数据库维护

1.数据库维护 

数据库维护是指当一个数据库被建立之后的工做都叫作数据库维护。包括备份系统数据、恢复数据库系统、产生用户信息表,并为信息表受权、监视系统运行情况,及时处理系统错误、保证系统数据安全,周期更改用户口令;html

2.维护概述

当一个数据库被建立之后的工做都叫作数据库维护.数据库

数据库维护比数据库的建立和使用更难.安全

3.维护内容

数据库平常维护工做是系统管理员的重要职责。其内容主要包括如下几个部分:spa

备份系统数据日志

SYBASE 系统的备份与恢复机制保证了在系统失败时从新获取数据的可能性。SQL Server 提供了两种不一样类型的恢复机制:一类是系统自动完成的恢复,这种措施在每次系统启动时都自动进行,保证了在系统瘫痪前完成的事务都写到数据库设备上,而未完成的事务都被回退;另外一类是人工完成的恢复,这是经过 DUMP 和 LOAD 命令来执行人工备份和恢复工做。所以按期备份事务日志和数据库是一项十分重要的平常维护工做。htm

一、备份数据库进程

每个数据库都应在建立以后卸出,从而提供一个装入基点。在此以后按排定的时间周期表卸出。好比每周五卸出数据库。对通常数据库系统卸出数据库周期建议为每周一次。事务

除了按计划周期卸出数据库以外,还需在每次运行没有日志的操做后卸出数据库。例如:get

·每次强制地运行了 DUMP TRAN WITH NO_LOG (由于数据库的磁盘空溢出);cmd

·每次用 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

二、备份事务日志

若是事务日志与数据库放在同一个设备上,则事务日志不该与数据库分开备份。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

三、备份数据库及其日志间的相互做用

在至少卸出一次数据库前,卸出事务日志是毫无心义的。下图显示了备份数据库及其日志间的关系

若是在星期二下午5:01出现非硬件故障,须要作的全部工做是装入磁带5(参见下一节:数据恢复),因为磁带5是下午5:00刚备份的,所以只有备份和装入之间的一分钟内的数据损失

可是,若是在星期二下午4:49失效会怎么样呢?在这种状况下,要装入磁带1(在星期五下午5:00的卸出)。而后,依次装入磁带2,3以及4。这样,系统将恢复到星期二上午10:00点的状态,星期二的大部分工做丢失了。此例显示了常常卸出事务的重要性。

万一系统失败时恢复数据库系统

若是用户数据库存储的设备失效,从而数据库被破坏或不可存取,经过装入最新的数据库备份以及后来的事务日志备份能够恢复数据库。假设当前的事务日志存在于一个并无毁坏的设备上,带着 WITH NO_TRUNCATE 选项的 DUMP TRANsaction 命令卸出它。

要恢复数据库按以下步骤去作:

一、若是日志存在于一个分离的设备上,用带着 NO_TRUNCATE 选项的 DUMP TRANsaction 命令卸出被毁坏的或者不可存取的用户数据库事务日志。

二、用下面的查询检查设备分配已毁坏数据库的设备使用状况。必须为同一目的赋一样的空间块。

下面的查询显示了分配给数据库 mydb 设备使用和尺寸状况:

SELECT segmap,size FROM sysusages

WHERE dbid =

( SELECT dbid FROM sysdatabases WHERE name = "mydb")

三、检查查询的输出。在 segmap 列的 '3'表明数据分配,'4'表明日志分配。size 列表明 2K 数据块的数目。注意此信息的次序、使用和尺寸部分。例如,输出为:

segmapSize

--------------------

310240//实际尺寸为:20M

35120//实际尺寸为:10M

45120//实际尺寸为:10M

31024//实际尺寸为:2M

42048//实际尺寸为:4M

四、用 DROP DATABASE 命令删除毁坏设备上的数据库。若是系统报错,用DBCC DBREPAIR 命令的 DROPDB 选项。

五、删除数据库后,用 sp_dropdevice 删除毁坏了的设备。

六、用 DISK INIT 初始化新的数据库设备。

七、重建数据库。用 CREATE DATABASE 命令从老的 sysusages 表拷贝全部的行,并包含第一逻辑设备。

对上例,命令为:

CREATE DATABASE mydb

ON datadev1=20,datadev2=10

LOG ON logdev1=10

八、用 ALTER DATABASE 命令重建其他入口。在此例中,在datadev1上分配更多的空间,命令为:

ALTER DATABASE mydb ON datadev1=2[page]

九、用 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 {ALL|permission_list}

ON table_name TO user_name

go

·收回权限的命令格式为

REVOKE {ALL|permission_list}

ON table_name FROM user_name

go

监视系统运行情况,及时处理系统错误

系统管理员的另外一项平常工做是监视系统运行状况。主要有如下几个方面:

一、监视当前用户以及进程的信息

使用系统过程:sp_who

说明:该命令显示当前系统全部注册用户及进程信息,以下表是某系统的信息。

SpidStatusLoginamehostnameblkdbnamecmd

---------------------------------------------------------------

1RunningSascosysv0MasterSELECT

2SleepingNULL0MasterNETWORK HANDLE

3SleepingNULL0MasterDEADLOCK TUNE

4SleepingNULL0MasterMIRROR HANDLER

5SleepingNULL0MasterHOUSEKEEPER

6SleepingNULL0MasterCHECKPOINT SLEEP

从左向右依次显示:进程号、当前状态、注册用户名、主机名、占用块数、数据库名以及当前命令。

若是监视时发现进程总数接近最大链接数(用系统过程:sp_configure "user conn" 查看)时,应下掉不活动或无关进程,以保证系统正常运作;另外亦可监视非法用户或用户使用不属于本身使用范围的数据库等状况。

二、监视目标占用空间状况

使用系统过程:sp_spaceused

说明:该过程显示行数、数据页数以及当前数据库中由某个目标或全部目标所占用的空间。以下表是某数据库日志表的信息:

NameRow_totalreserveddataIndex_sizeunused

------------------------------------------------------------

SyslogsNot avail32KB32KB0KBNot avail

平常要监视的主要目标有:用户数据库、数据库日志表(syslogs)以及计费原始数据表等。若是发现占用空间过大,对日志表要进行转储;对其余目标则应扩充空间或清楚垃圾数据。

三、监视 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是登陆名称。