数据库要怎么维护?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库要怎么维护?相关的知识,希望对你有一定的参考价值。
数据库日常维护(参考)数据库日常维护工作是系统管理员的重要职责。其内容主要包括以下几个部分:
一、备份系统数据
SYBASE 系统的备份与恢复机制保证了在系统失败时重新获取数据的可能性。SQL Server 提供了两种不同类型的恢复机制:一类是系统自动完成的恢复,这种措施在每次系统启动时都自动进行,保证了在系统瘫痪前完成的事务都写到数据库设备上,而未完成的事务都被回退;另一类是人工完成的恢复,这是通过 DUMP 和 LOAD 命令来执行人工备份和恢复工作。因此定期备份事务日志和数据库是一项十分重要的日常维护工作。
1、备份数据库
每一个数据库都应在创建之后卸出,从而提供一个装入基点。在此之后按排定的时间周期表卸出。比如每周五卸出数据库。对一般数据库系统卸出数据库周期建议为每周一次。
除了按计划周期卸出数据库之外,还需在每次运行没有日志的操作后卸出数据库。例如:
·每次强制地运行了 DUMP TRAN WITH NO_LOG (因为数据库的磁盘空溢出);
·每次用 sp_dboption 允许 select into/bulkcopy 做快速拷贝,或用 SELECT INTO 命令创建一个永久性的表,或使用了 WRITETEXT 命令。
卸出数据库的命令为:
DUMP DATABASE database_name
TO dump_device
database_name 是要卸出的数据库名称,dump_device 是卸出设备的名称。用系统过程 sp_helpdevice 可以获得设备的信息。
下面一条命令用来卸出数据库 my_db :
DUMP DATABASE my_db
TO db_bk_dev
2、备份事务日志
如果事务日志与数据库放在同一个设备上,则事务日志不应与数据库分开备份。master 数据库和小于 4M 的用户数据库就是这种情况。一般数据库系统的数据库和日志分别放在不同的设备上,因此,可以用 DUMP TRAN 命令单独备份日志。
备份事务日志的周期直接影响数据的恢复程度,因此建议每天备份。
备份事务日志的命令格式为:
DUMP TRANsaction database_name
[TO dump_device]
[WITH TRUNCATE_ONLY|WITH NO_LOG|WITH NO_TRUNCATE]
其中 database_name 是要备份事务的数据库名称,dump_device 是备份设备名称,仅当包含了 WITH TRUNCATE_ONLY 或 WITH NO_LOG 子句时,才可以备份到设备。
注意:如果总是用 DUMP DATEBASE (备份数据库及其日志),而不用 DUMP TRAN ,事务日志将不会刷新,而变得非常庞大。
对于 master 数据库和小型数据库每次运行 DUMP DATEBASE 之后应当运行 DUMP TRANsaction 命令刷新日志 。
下面一条命令备份数据库 db160 的事务日志到备份设备上:
DUMP TRANsaction db160
TO db_log_bk_dev
WITH TRUNCATE_ONLY
3、备份数据库及其日志间的相互作用
在至少卸出一次数据库前,卸出事务日志是毫无意义的。下图显示了备份数据库及其日志间的关系
如果在星期二下午5:01出现非硬件故障,需要做的所有工作是装入磁带5(参见下一节:数据恢复),由于磁带5是下午5:00刚备份的,因此只有备份和装入之间的一分钟内的数据损失。
但是,如果在星期二下午4:49失效会怎么样呢?在这种情况下,要装入磁带1(在星期五下午5:00的卸出)。然后,依次装入磁带2,3以及4。这样,系统将恢复到星期二上午10:00点的状态,星期二的大部分工作丢失了。此例显示了经常卸出事务的重要性。
二、万一系统失败时恢复数据库系统
如果用户数据库存储的设备失效,从而数据库被破坏或不可存取,通过装入最新的数据库备份以及后来的事务日志备份可以恢复数据库。假设当前的事务日志存在于一个并没有毁坏的设备上,带着 WITH NO_TRUNCATE 选项的 DUMP TRANsaction 命令卸出它。
要恢复数据库按如下步骤去做:
1、如果日志存在于一个分离的设备上,用带着 NO_TRUNCATE 选项的 DUMP TRANsaction 命令卸出被毁坏的或者不可存取的用户数据库事务日志。
2、用下面的查询检查设备分配已毁坏数据库的设备使用情况。必须为同一目的赋同样的空间块。
下面的查询显示了分配给数据库 mydb 设备使用和尺寸情况:
SELECT segmap,size FROM sysusages
WHERE dbid =
( SELECT dbid FROM sysdatabases WHERE name = “mydb”)
3、检查查询的输出。在 segmap 列的 ‘3’代表数据分配,‘4’代表日志分配。size 列代表 2K 数据块的数目。注意此信息的次序、使用和尺寸部分。例如,输出为:
segmapSize
--------------------
310240//实际尺寸为:20M
35120//实际尺寸为:10M
45120//实际尺寸为:10M
31024//实际尺寸为:2M
42048//实际尺寸为:4M
4、用 DROP DATABASE 命令删除毁坏设备上的数据库。如果系统报错,用DBCC DBREPAIR 命令的 DROPDB 选项。
5、删除数据库后,用 sp_dropdevice 删除毁坏了的设备。
6、用 DISK INIT 初始化新的数据库设备。
7、重建数据库。用 CREATE DATABASE 命令从老的 sysusages 表拷贝所有的行,并包含第一逻辑设备。
对上例,命令为:
CREATE DATABASE mydb
ON datadev1=20,datadev2=10
LOG ON logdev1=10
8、用 ALTER DATABASE 命令重建其余入口。在此例中,在datadev1上分配更多的空间,命令为:
ALTER DATABASE mydb ON datadev1=2[page]
9、用 LOAD DATABASE 重新装入数据库,然后用 LOAD TRAN 装入前面卸出的日志。
LOAD DATABASE 命令语法是:
LOAD DATABASE database_name
FROM dump_device
LOAD TRANsaction 命令的语法是:
LOAD TRANsaction database_name
FROM dump_device
卸出数据库和事务日志的缺省权限归数据库所有者,且可以传递给其他用户;装载数据库和事务的权限也归数据库所有者,但不能传递。
二、产生用户信息表,并为信息表授权;
系统维护人员的另一个日常事务是为用户创建新的信息表,并为之授权。创建表以及为表授权的方法已经在讲过,在此只将有关命令语法写出来。
·创建表的命令为:
CREATE TABLE table_name
( column_1 datatype [NULL | NOT NULL | IDENTITY],
column_2 ……
)
go
ALTER TABLE table_name
ADD PRIMARY KEY (column_list)
go
·删除表的命令格式为:
DROP TABLE table_name
go
·为表授权的命令格式为:
GRANT
ON table_name TO user_name
go
·收回权限的命令格式为
REVOKE
ON table_name FROM user_name
go
三、监视系统运行状况,及时处理系统错误;
系统管理员的另一项日常工作是监视系统运行情况。主要有以下几个方面:
1、监视当前用户以及进程的信息
使用系统过程:sp_who
说明:该命令显示当前系统所有注册用户及进程信息,如下表是某系统的信息。
SpidStatusLoginamehostnameblkdbnamecmd
---------------------------------------------------------------
1RunningSascosysv0MasterSELECT
2SleepingNULL0MasterNETWORK HANDLE
3SleepingNULL0MasterDEADLOCK TUNE
4SleepingNULL0MasterMIRROR HANDLER
5SleepingNULL0MasterHOUSEKEEPER
6SleepingNULL0MasterCHECKPOINT SLEEP
从左向右依次显示:进程号、当前状态、注册用户名、主机名、占用块数、数据库名以及当前命令。
如果监视时发现进程总数接近最大连接数(用系统过程:sp_configure “user conn” 查看)时,应下掉不活动或无关进程,以保证系统正常运做;另外亦可监视非法用户或用户使用不属于自己使用范围的数据库等情况。
2、监视目标占用空间情况
使用系统过程:sp_spaceused
说明:该过程显示行数、数据页数以及当前数据库中由某个目标或所有目标所占用的空间。如下表是某数据库日志表的信息:
NameRow_totalreserveddataIndex_sizeunused
------------------------------------------------------------
SyslogsNot avail32KB32KB0KBNot avail
日常要监视的主要目标有:用户数据库、数据库日志表(syslogs)以及计费原始数据表等。如果发现占用空间过大,对日志表要进行转储;对其他目标则应扩充空间或清楚垃圾数据。
3、监视 SQL Server 统计数字
使用系统过程:sp_monitor
说明:sp_monitor 显示SQL Server 的历史统计数字,下表是某系统的统计数字:
Last_runCurrent_runSeconds
---------------------------------------------------------------
May 13 2000 1:27PMMay 13 2000 3:01PM5678
CPU_busyIO_busyIdle
---------------------------------------------------------------
16(6)-0%0(0)-0%5727(5672)-99%
Packets_receivedPackets_sentPacket_errors
---------------------------------------------------------------
21(17)100(97)0(0)
Total_readTotal_writeTotal_errorsConnections
--------------------------------------------------------
785(366)311(113)0(0)3(2)
上表依次给出该系统本次运行统计的上一次时间、本次时间、间隔秒数、CPU占用、IO占用、收发包情况、系统读入写出情况等信息
四、保证系统数据安全,周期更改用户口令;
为保证系统数据的安全,系统管理员必须依据系统的实际情况,执行一系列的安全保障措施。其中,周期性的更改用户口令是比较常用且十分有效的措施。
更改用户口令是通过调用系统过程sp_password 来实现的。Sp_password 的语法为:
sp_password caller_password,new_password [,loginame]
其中caller_password 是登录口令(老口令),new_password是新口令,loginame是登录名称。
在百度搜索:数据库日常维护(参考)
相 关 文 章
Sybase存储过程的建立和使用
SYBASE dbcc
电信企业参与竞争的利器-数据仓库和数据挖掘
SCOUNIX下磁带机的安装与备份
StoredProcedure(存储过程)编写经验和优化措施
细说SYBASE数据库日志
常见数据库系统之比较 - SYBASE 和 SQL SERVER
SYBASE ASE FOR LINUX安装及perl连接SYBASE
Sybase数据库应用(一)
安装Sybase ASE
如果对您有帮助,请记得采纳为满意答案,谢谢!祝您生活愉快!
vaela 参考技术A 备份系统数据
备份数据库
备份事务日志备份数据库及其日志间的相互作
万一系统失败时恢复数据库系统以上都是数据库维护时需要做的 在简单的说就是 确保数据库正常运行不出现错误 没有数据冗余 参考技术B 回家拿个锤子到电脑旁边来。看到数据不爽。一锤子下去完事。 参考技术C 备份 / 恢复
性能优化
openGauss维护管理之大小写敏感
一、概述
1、基于PostgreSQL数据敏感
openGauss源于PostgreSQL
PostgreSQL对数据大小写敏感:
1、PG中默认是大小写不敏感,表名、字段名等不区分大小写,大写字母会自动转换为小写字母,需要使用大写字母时需要使用双引号,或借助函数
2、查询数据中的大小写敏感
3、创建的账号或者角色大小写敏感
如果要指定表名或者列名为大写该怎么办?
只要加上双引号即可。
但是这种方法很麻烦,后续对于这个这些表或列进行相应的操作都需要带上双引号,不建议这样使用。
试验主要围绕这三点验证
openGauss试验结果:
1、数据库名、表名、列名创建都可以无符号创建和双引号创建
2、数据库名创建,无符号大小写库名、双引号小写库名创建后只能以全小写库名查询,双引号大写库名创建后只能原样查询
3、表名创建,无符号大小写表名、双引号小写表名创建后都可以使用无符号大小写、双引号小写查询
双引号大写表名创建后,只能使用双引号原样查询
4、列名创建,无符号大小写列名、双引号小写列名创建后都可以使用无符号大小写、双引号小写查询
双引号大写列名创建后,只能使用双引号原样查询
5、数据字符串插入和查询,只支持单引号
6、数据查询大小写敏感
二、试验
1、数据库名
1、符号试验
无符号、``、、""
create database test1 owner joe; #OK
create database `test2` owner joe; #ERROR: syntax error at or near "`"
create database test3 owner joe; #ERROR: syntax error at or near "`"
create database "test4" owner joe; #OK
drop database test1;
drop database "test4";
2、数据库名大小写敏感验证
创建数据库
create database test1 owner joe;
create database TEST2 owner joe;
create database "test3" owner joe;
create database "TEST4" owner joe;
数据库查询
select datname from pg_database;
test1
test2
test3
TEST4 #除了冒号带大写字母的,其他的都变成了小写
select datname from pg_database where datname=test1; #test1
select datname from pg_database where datname=TEST1; #null
select datname from pg_database where datname=TEST2; #null
select datname from pg_database where datname=test2; #test2
select datname from pg_database where datname=test3; #test3
select datname from pg_database where datname=TEST3; #null
select datname from pg_database where datname=test4; #null
select datname from pg_database where datname=TEST4; #TEST4
清理数据库
drop database test1;
drop database test2;
drop database test3;
drop database "TEST4";
总结
无符号大写库名、无符号小写库名、双引号小写库名,创建后都会转换成无符号小写数据库名
双引号大写库名,创建后是无符号大写数据库名
2、表名
1、符号试验
无符号、``、、""
create table test1(id int); #OK
create table `test2`(id int); #ERROR: syntax error at or near "`"
create table test3(id int); #ERROR: syntax error at or near "test3"
create table "test4"(id int); #OK
drop table test1;
drop table "test4";
2、表名大小写敏感验证
create table test1(id int);
create table TEST2(id int);
create table "test3"(id int);
create table "TEST4"(id int);
表查询
select * from test1; #OK
select * from TEST1; #OK
select * from "test1"; #OK
select * from "TEST1"; #ERROR: relation "TEST1" does not exist on dn_6001
select * from test2; #OK
select * from TEST2; #OK
select * from "test2"; #OK
select * from "TEST2"; #ERROR: relation "TEST2" does not exist on dn_6001
select * from test3; #OK
select * from TEST3; #OK
select * from "test3"; #OK
select * from "TEST3"; #ERROR: relation "TEST3" does not exist on dn_6001
select * from test4; #ERROR: relation "test4" does not exist on dn_6001
select * from TEST4; #ERROR: relation "test4" does not exist on dn_6001
select * from "test4"; #ERROR: relation "test4" does not exist on dn_6001
select * from "TEST4"; #OK
表清理
drop table test1;
drop table TEST2;
drop table "test3";
drop table "TEST4";
总结:无符号的表名,无符号大写、无符号小写、双引号小写,都可以查询,双引号大写无法查询
有双引号小写的表名,无符号大写、无符号小写、双引号小写,都可以查询,双引号大写无法查询
有双引号大写的表名,无符号大写、无符号小写、双引号小写,无法查询,双引号原样可以查询
3、列名
1、符号试验
无符号、``、、""
create table test1(id int); #OK
create table test2(`id` int); #ERROR: syntax error at or near "`"
create table test3(id int); #ERROR: syntax error at or near "id"
create table test4("id" int); #OK
drop table if exists test1;
drop table if exists test4;
总结:列名支持无符号和双引号("")
2、列名大小写敏感验证
创建表并插入数据
create table test1(id1 int,ID2 int,"id3" int,"ID4" int);
insert into test1 values(1,2,3,4),(5,6,7,8);
数据查询
第一步
select id1 from test1 where id1=1; #1
select id1 from test1 where ID1=1; #1
select id1 from test1 where "id1"=1; #1
select id1 from test1 where "ID1"=1; #ERROR: column "ID1" does not exist
第二步
select id1 from test1 where id2=2; #1
select id1 from test1 where ID2=2; #1
select id1 from test1 where "id2"=2; #1
select id1 from test1 where "ID2"=2; #ERROR: column "ID2" does not exist
第三步
select id1 from test1 where id3=3; #1
select id1 from test1 where ID3=3; #1
select id1 from test1 where "id3"=3; #1
select id1 from test1 where "ID3"=3; #ERROR: column "ID3" does not exist
第四步
select id1 from test1 where id4=4; #ERROR: column "id4" does not exist
select id1 from test1 where ID4=4; #ERROR: column "id4" does not exist
select id1 from test1 where "id4"=4; #ERROR: column "id4" does not exist
select id1 from test1 where "ID4"=4; #1
数据清理
drop table if exists test1;
总结:无符号的列名,无符号大写、无符号小写、双引号小写,都可以查询,双引号大写无法查询
有双引号小写的列名,无符号大写、无符号小写、双引号小写,都可以查询,双引号大写无法查询
有双引号大写的列名,无符号大写、无符号小写、双引号小写,无法查询,双引号大写可以查询
4、数据大小写敏感
1、符号试验
无符号、``、、""
create table test1(id int,name VARCHAR(10));
insert into test1 values(1,hello); #ERROR: column "hello" does not exist
insert into test1 values(2,`hello`); #ERROR: column "hello" does not exist
insert into test1 values(3,hello); #OK
insert into test1 values(4,"hello"); #ERROR: column "hello" does not exist
总结:具体数据字符串类型只支持单引号()
2、数据大小写敏感验证
数据插入
delete from test1
insert into test1 values(1,hello);
insert into test1 values(2,HEllo);
insert into test1 values(3,HELLO);
数据查询
select id from test1 where name=hello; #1
select id from test1 where name=HEllo; #2
select id from test1 where name=HELLO; #3
select id from test1 where name like HE%; #2、3
清理数据
drop table if exists test1;
总结:数据大小写敏感
以上是关于数据库要怎么维护?的主要内容,如果未能解决你的问题,请参考以下文章