Sybase数据库日常维护.docx
《Sybase数据库日常维护.docx》由会员分享,可在线阅读,更多相关《Sybase数据库日常维护.docx(6页珍藏版)》请在冰豆网上搜索。
Sybase数据库日常维护
数据库日常维护工作是系统管理员的重要职责。
其内容主要包括以下几个部分:
一、备份系统数据
sybase系统的备份与恢复机制保证了在系统失败时重新获取数据的可能性。
sqlserver提供了两种不同类型的恢复机制:
一类是系统自动完成的恢复,这种措施在每次系统启动时都自动进行,保证了在系统瘫痪前完成的事务都写到数据库设备上,而未完成的事务都被回退;另一类是人工完成的恢复,这是通过dump和load命令来执行人工备份和恢复工作。
因此定期备份事务日志和数据库是一项十分重要的日常维护工作。
1、备份数据库
每一个数据库都应在创建之后卸出,从而提供一个装入基点。
在此之后按排定的时间周期表卸出。
比如每周五卸出数据库。
对一般数据库系统卸出数据库周期建议为每周一次。
除了按计划周期卸出数据库之外,还需在每次运行没有日志的操作后卸出数据库。
例如:
·每次强制地运行了dumptranwithno_log(因为数据库的磁盘空溢出);
·每次用sp_dboption允许selectinto/bulkcopy做快速拷贝,或用selectinto命令创建一个永久性的表,或使用了writetext命令。
卸出数据库的命令为:
dumpdatabasedatabase_name
todump_device
database_name是要卸出的数据库名称,dump_device是卸出设备的名称。
用系统过程sp_helpdevice可以获得设备的信息。
下面一条命令用来卸出数据库my_db:
dumpdatabasemy_db
todb_bk_dev
2、备份事务日志
如果事务日志与数据库放在同一个设备上,则事务日志不应与数据库分开备份。
master数据库和小于4m的用户数据库就是这种情况。
一般数据库系统的数据库和日志分别放在不同的设备上,因此,可以用dumptran命令单独备份日志。
备份事务日志的周期直接影响数据的恢复程度,因此建议每天备份。
备份事务日志的命令格式为:
dumptransactiondatabase_name
[todump_device]
[withtruncate_only|withno_log|withno_truncate]
其中database_name是要备份事务的数据库名称,dump_device是备份设备名称,仅当包含了withtruncate_only或withno_log子句时,才可以备份到设备。
注意:
如果总是用dumpdatebase(备份数据库及其日志),而不用dumptran,事务日志将不会刷新,而变得非常庞大。
对于master数据库和小型数据库每次运行dumpdatebase之后应当运行dumptransaction命令刷新日志。
下面一条命令备份数据库db160的事务日志到备份设备上:
dumptransactiondb160
todb_log_bk_dev
withtruncate_only
3、备份数据库及其日志间的相互作用
在至少卸出一次数据库前,卸出事务日志是毫无意义的。
下图显示了备份数据库及其日志间的关系
如果在星期二下午5:
01出现非硬件故障,需要做的所有工作是装入磁带5(参见下一节:
数据恢复),由于磁带5是下午5:
00刚备份的,因此只有备份和装入之间的一分钟内的数据损失。
但是,如果在星期二下午4:
49失效会怎么样呢?
在这种情况下,要装入磁带1(在星期五下午5:
00的卸出)。
然后,依次装入磁带2,3以及4。
这样,系统将恢复到星期二上午10:
00点的状态,星期二的大部分工作丢失了。
此例显示了经常卸出事务的重要性。
二、万一系统失败时恢复数据库系统
如果用户数据库存储的设备失效,从而数据库被破坏或不可存取,通过装入最新的数据库备份以及后来的事务日志备份可以恢复数据库。
假设当前的事务日志存在于一个并没有毁坏的设备上,带着withno_truncate选项的dumptransaction命令卸出它。
要恢复数据库按如下步骤去做:
1、如果日志存在于一个分离的设备上,用带着no_truncate选项的dumptransaction命令卸出被毁坏的或者不可存取的用户数据库事务日志。
2、用下面的查询检查设备分配已毁坏数据库的设备使用情况。
必须为同一目的赋同样的空间块。
下面的查询显示了分配给数据库mydb设备使用和尺寸情况:
selectsegmap,sizefrom sysusages
wheredbid=
(selectdbidfromsysdatabaseswherename=“mydb”)
3、检查查询的输出。
在segmap列的‘3’代表数据分配,‘4’代表日志分配。
size列代表2k数据块的数目。
注意此信息的次序、使用和尺寸部分。
例如,输出为:
segmapsize
--------------------
310240//实际尺寸为:
20m
35120//实际尺寸为:
10m
45120//实际尺寸为:
10m
31024//实际尺寸为:
2m
42048//实际尺寸为:
4m
4、用dropdatabase命令删除毁坏设备上的数据库。
如果系统报错,用dbccdbrepair命令的dropdb选项。
5、删除数据库后,用sp_dropdevice删除毁坏了的设备。
6、用diskinit初始化新的数据库设备。
7、重建数据库。
用createdatabase命令从老的sysusages表拷贝所有的行,并包含第一逻辑设备。
对上例,命令为:
createdatabasemydb
ondatadev1=20,datadev2=10
logonlogdev1=10
8、用alterdatabase命令重建其余入口。
在此例中,在datadev1上分配更多的空间,命令为:
alterdatabasemydbondatadev1=2
9、用loaddatabase重新装入数据库,然后用loadtran装入前面卸出的日志。
loaddatabase命令语法是:
loaddatabasedatabase_name
fromdump_device
loadtransaction命令的语法是:
loadtransactiondatabase_name
fromdump_device
卸出数据库和事务日志的缺省权限归数据库所有者,且可以传递给其他用户;装载数据库和事务的权限也归数据库所有者,但不能传递。
二、产生用户信息表,并为信息表授权;
系统维护人员的另一个日常事务是为用户创建新的信息表,并为之授权。
创建表以及为表授权的方法已经在讲过,在此只将有关命令语法写出来。
·创建表的命令为:
createtabletable_name
(column_1datatype[null|notnull|identity],
column_2……
)
go
altertabletable_name
addprimarykey(column_list)
go
·删除表的命令格式为:
droptabletable_name
go
·为表授权的命令格式为:
grant{all|permission_list}
ontable_nametouser_name
go
·收回权限的命令格式为
revoke{all|permission_list}
ontable_namefromuser_name
go
三、监视系统运行状况,及时处理系统错误;
系统管理员的另一项日常工作是监视系统运行情况。
主要有以下几个方面:
1、监视当前用户以及进程的信息
使用系统过程:
sp_who
说明:
该命令显示当前系统所有注册用户及进程信息,如下表是某系统的信息。
spidstatusloginamehostnameblkdbnamecmd
---------------------------------------------------------------
1runningsascosysv0masterselect
2sleepingnull0masternetworkhandle
3sleepingnull0masterdeadlocktune
4sleepingnull0mastermirrorhandler
5sleepingnull0masterhousekeeper
6sleepingnull0mastercheckpointsleep
从左向右依次显示:
进程号、当前状态、注册用户名、主机名、占用块数、数据库名以及当前命令。
如果监视时发现进程总数接近最大连接数(用系统过程:
sp_configure“userconn”查看)时,应下掉不活动或无关进程,以保证系统正常运做;另外亦可监视非法用户或用户使用不属于自己使用范围的数据库等情况。
2、监视目标占用空间情况
使用系统过程:
sp_spaceused
说明:
该过程显示行数、数据页数以及当前数据库中由某个目标或所有目标所占用的空间。
如下表是某数据库日志表的信息:
namerow_totalreserveddataindex_sizeunused
------------------------------------------------------------
syslogsnotavail32kb32kb0kbnotavail
日常要监视的主要目标有:
用户数据库、数据库日志表(syslogs)以及计费原始数据表等。
如果发现占用空间过大,对日志表要进行转储;对其他目标则应扩充空间或清楚垃圾数据。
3、监视sqlserver统计数字
使用系统过程:
sp_monitor
说明:
sp_monitor显示sqlserver的历史统计数字,下表是某系统的统计数字:
last_runcurrent_runseconds
---------------------------------------------------------------
may1320001:
27pmmay1320003:
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_passwordcaller_password,new_password[,loginame]
其中caller_password是登录口令(老口令),new_password是新口令,loginame是登录名称。