Chinaunix首页 | 论坛 | 博客

  • 博客访问: 57174
  • 博文数量: 16
  • 博客积分: 1415
  • 博客等级: 上尉
  • 技术积分: 169
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-16 09:39
文章分类

全部博文(16)

文章存档

2011年(1)

2010年(15)

我的朋友

分类: 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 */

阅读(1830) | 评论(1) | 转发(0) |
0

上一篇:RMAN参数配置

下一篇:Rar使用说明文档

给主人留下些什么吧!~~

chinaunix网友2010-08-27 08:44:50

Download More than 1000 free IT eBooks: http://free-ebooks.appspot.com