数据库维护
2014-12-09  网站运维
  当一个数据库被创建以后一个很重要的工作——数据库维护. 

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

  一、备份系统数据

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

  1、备份数据库

  每一个数据库都应在创建之后卸出,从而提供一个装入基点。在此之后按排定的时间周期表卸出。比如每周五卸出数据库。对一般数据库系统卸出数据库周期建议为每周一次。

  2、备份事务日志

  如果事务日志与数据库放在同一个设备上,则事务日志不应与数据库分开备份。master 数据库和小于 4M 的用户数据库就是这种情况。一般数据库系统的数据库和日志分别放在不同的设备上,因此,可以用 DUMP TRAN 命令单独备份日志。

  备份事务日志的周期直接影响数据的恢复程度,因此建议每天备份。

  3、备份数据库及其日志间的相互作用

  在至少卸出一次数据库前,卸出事务日志是毫无意义的。

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

  如果用户数据库存储的设备失效,从而数据库被破坏或不可存取,通过装入最新的数据库备份以及后来的事务日志备份可以恢复数据库。假设当前的事务日志存在于一个并没有毁坏的设备上,带着 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

  9、用 LOAD DATABASE 重新装入数据库,然后用 LOAD TRAN 装入前面卸出的日志。

  LOAD DATABASE 命令语法是:

  LOAD DATABASE database_name 

  FROM dump_device

  LOAD TRANsaction 命令的语法是: 

  LOAD TRANsaction database_name 

  FROM dump_device

  卸出数据库和事务日志的缺省权限归数据库所有者,且可以传递给其他用户;装载数据库和事务的权限也归数据库所有者,但不能传递。   

  三、产生用户信息表,并为信息表授权;

  系统维护人员的另一个日常事务是为用户创建新的信息表,并为之授权。创建表以及为表授权的方法已经在讲过,在此只将有关命令语法写出来。

  四、监视系统运行状况,及时处理系统错误;

  系统管理员的另一项日常工作是监视系统运行情况。主要有以下几个方面:

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

  使用系统过程:sp_who以保证系统正常运做;另外亦可监视非法用户或用户使用不属于自己使用范围的数据库等情况。   

  2、监视目标占用空间情况 

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

  3、监视 SQL Server 统计数字   

  使用系统过程:sp_monitor