分类: Sybase
2010-08-24 10:07:10
由于各种原因,在把原来运行的数据库备份文件(*.dmp)恢复到新的数据库服务器上时,会发生数据设备和日志设备交叉存放的问题。例如,数据库设备分配情况如下所示:
设备名称 容量 分配情况
xxxtf_data1 450M data
xxxtf_data1 50M log
xxxtf_log 50M data
xxxtf_log 150M log
在 SQL advantage 下运行sp_helpdb xxxtf 时,会报告如下类似结果:
device_fragments size usage free kbytes
---------------- ---- ----- -----------
xxxtf_data1 450.0 MB data only xxxxxx
xxxtf_data1 50.0 MB log only xxxxxx
xxxtf_log 50.0 MB data only xxxxxx
xxxtf_log 150.0 MB log only xxxxxx
device segment
------ ------- xxxtf_data1 default xxxtf_data1 logsegment xxxtf_data1 system xxxtf_log default
xxxtf_log logsegment
xxxtf_log system
按安装要求,应该是数据设备xxxtf_data1的500M空间全部存放data,xxxtf_log的200M空间全部存放log,而现在,log和data交叉分布在两个设备上,从安全和运行性能上考虑,这种情况应该尽量避免。出现上述状况的原因可能有下列二种:
1. 在第一次安装数据库时,没有将数据设备和日志设备分开。
2. 在新的数据库服务器(Netfinity 7000)上安装Sybase时,没有按照正确的步骤进行。省局要求的步骤是:
a.建立数据设备和日志设备分别为100M和50M的用户数据库xxxtf,倒入模板数据库zjds0624.dmp。
b.把数据库的设备扩容到实际运行的大小。
c.将已经在运行的tf98数据库清空日志,并备份到文件xxxtf.dmp。
d.倒入tf98数据库的备份文件xxxtf.dmp。
如果是由于第一种原因造成的,可能按正确的步骤安装也无法把数据和日志分开,这种情况下,在备份服务器完成倒入工作后,会在屏幕上或errlog文件上提示“因为数据和日志存放在同一设备上,可能会导致数据库运行失败后无法恢复”等信息。
碰到上述情况,可以试用下列办法来解决。
0、登录到Sybase后,进入xxxtf并清空日志,并备份数据库。
use xxxtf
go
dump tran xxxtf with truncate_only
go
dump database xxxtf to "dev_name"
go
1、从数据设备上把日志段清除掉。
sp_dropsegment "logsegment",xxxtf,xxxtf_data1
2、如果数据段占用了日志设备,也需要一一清除。
sp_dropsegment "default",xxxtf,xxtf_log
sp_dropsegment "system",xxxtf,xxtf_log
运行完以上过程后,系统可能会提示警告信息,类似“xxxtf_data1\xxxtf_log上的某些空间没有被任何段 引用”等等。
3、用 sp_helpdb xxxtf 检查数据库的状况
sp_helpdb xxxtf
go
device_fragments size usage free kbytes
---------------- ---- ----- -----------
xxxtf_data1 450.0 MB data only xxxxxx
xxxtf_data1 50.0 MB data only xxxxxx
xxxtf_log 50.0 MB log only xxxxxx
xxxtf_log 150.0 MB log only xxxxxx
device segment
------ ------- xxxtf_data1 default xxxtf_data1 -- unused by any segments --
xxxtf_data1 system xxxtf_log -- unused by any segments --
xxxtf_log logsegment
4、将“default”和“system”段扩容。
sp_extendsegment "default",xxxtf,xxxtf_data1
sp_extendsegment "system",xxxtf,xxxtf_data1
完成后,检查段的分配情况。
sp_helpsegment "default"
sp_helpsegment "system"
segment name status
----------- ---- -----------
1 default 1
device size free_pages
------ ---- -----------
xxxtf_data1 500.0MB xxxxxx
注意:如果报告显示的size尚未达到设备的最大容量(如default的size未到500M)时,请重复第4步直到所有段的容量都已经达到设备的最大值(default和system段=xxxtf_data1)。
5、分配日志段。
sp_logdevice xxxtf,xxxtf_log
运行完成以上所有步骤后,再检查数据库的状况。
sp_helpdb xxxtf
name db_size owner dbid created status
---- ------- ----- ----------- ------- ------
xxxtf 700.0 MB sa 5 Jun 30, 1999
device_fragments size usage free kbytes
---------------- ---- ----- -----------
xxxtf_data1 500.0 MB data only xxxxxxx
xxxtf_log 200.0 MB log only xxxxxxx
device segment
------ -------
xxxtf_data1 default
xxxtf_data1 system
xxtf_log logsegment
下面列出所涉及的存储过程的调用语法:
注:描述系统段时必须用引号将段名括起来,例如 "default","system","logsegment"
1.删除段
sp_dropsegment
@segname varchar(30), /* segment name */
@dbname varchar(30), /* database name */
@device varchar(30) = null /* device name */
2.扩展段
sp_extendsegment
@segname varchar(30), /* segment name */
@dbname varchar(30), /* database name */
@devname varchar(30) /* device name to put segment on */
3.查看数据库信息
sp_helpdb
@dbname varchar(30) = NULL /* database name to change */
4.查看段信息
sp_helpsegment
@segname varchar(30) = NULL /* segment name */
5.分配日志段
sp_logdevice
@dbname varchar(30), /* database name that has the syslogs */
@devname varchar(30) /* device name to put syslogs on */
chinaunix网友2010-08-27 08:44:50
Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com