您的位置信息之舟电 脑硬件栏目首页数据库类Sybase 收藏本页

→ SYBASE 使用技巧集锦(4)

www.kepusoft.com 信息之舟电脑软件应用栏目

    信息之舟电脑软件应用栏目编者按: Q.如何将SQL/ASE SERVER移植到同种平台(相同操作系统)的系统上?

    A.N1 这里所列出的所有步骤,并不需要按顺序执行,只是表明了在实验中成功完成这项任务的顺序。
    N2 SYBASE 提示您保留直至今日的ISQL脚本,包括建立login、create database、disk init等等。使用
    这些脚本会使您完成这项任务更加容易。这些脚本也可以通过master中系统表的内容来重新生成,可能
    会繁琐一些。
    N3 成功的关键在于目标系统中系统表的字段与源系统中相应系统表的字段相同。特别是:syslogins与
    sysdatabases中的'suid 以及 'dbid';sysusages中所有行的segmap、lstart以及size。
    请在数据源系统上执行以下操作:

    对所有的数据库进行数据一致性检查(DBCC),并后备所有的用户数据库。
    保留master 数据库中数据表的内容,使用select * from table_name命令:
    sysdevices,sysusages,sysdatabses
    syslogins,sysservers,syssvrroles,sysloginroles,sysremotelogins
    对于sysusages 表,请使用以下命令:
    select * from sysusages order by dbid,lstart
    对于sysdatabases 表,请使用以下命令:
    select * from sysdatabases order by dbid
    使用bcp命令拷贝(2)中所列出的系统表内容。
    Unix:bcp master..table_name out file_name -Usa -Psa_password -c
    Vms:bcp master..table_name out file_name /username="sa"/sa_password/char
    保留sp_configure命令的执行结果
    请在目标系统上执行以下操作:

    安装并配置新的SQL Server和Backup Server。
    确认所指定的master、tempdb、sybsystemprocs大小至少等于数据源系统上相应数据库的大小,同时确认
    与数据源系统相同的语言模块以及字符集。
    启动SQL Server,使之处于正常工作状态。参照数据源系统的配置(4中保留的执行结果)修改目标系统配
    置与之相同,并确认'device'参数值至少等于源系统此参数值。
    在model、sybsystemprocs数据库中任意执行几个动作以判断数据库工作正常。请不要添加用户、角色、修
    改系统表。
    重启SQL Server以测试新配置有效。
    执行以下操作:
    1>; use master
    2>; go
    1>; sp_configure "allow updates",1
    2>; go
    重启SQL Server。
    使用bcp命令拷贝(2)中所列出的系统表内容。
    Unix:bcp master..table_name in file_name -Usa -Psa_password -b 1 -c
    Vms:bcp master..table_name in file_name /user="sa"/sa_password/char/batch=1
    建数据库设备,大小至少等于源系统中相应数据库的大小。
    运行create database和alter database的脚本(或者使用命令行)。注意create、alter顺序要与源系统
    create、alter顺序一致,并使用与之相同的参数。完成后请对比源系统与目标系统中的sysdatabases、
    sysusages,使之完全相同,否则要重新做12这步工作。(请参照N3提示)注意:
    在10.0以及更高版本中segmap字段在做了数据库load之后会被修改。
    在确定需要相同的dbid时,则要采用与在源系统中create、alter相同的顺序,在目标系统中做create、
    alter,并且使用相同的参数值。而这种需求仅仅是当数据库中某些objects要参考不同的数据库中的
    objects才会采用的。另外,这种需求只有在每一个数据库中都被采用,完成的结果才会使得sysusages表
    中的segment、lastart、size字段,或者是fragment与源系统中数值相同。运行以下命令,与原系统的输
    出进行比较:
    select * from sysusages order by lstart
    load用户数据库并执行dbcc检测。
    执行以下操作:
    1>; sp_configure "allow updates",0
    2>; go
    重启SQL Server。
    后备master库以及用户数据库。



    Q.如何做Rebuild Master(没有后备master库,而使用命令disk reinit,disk refit)?

    A.提示1:

    如果有可能,在执行这个任务之前,请先做操作系统级SYBASE DEVICES的后备。UNIX操作系统可使用命
    令"dd"。因为如果disk reinit使用了错误的信息,那么,在执行了disk refit之后就会产生无法弥补的
    错误。倘若,存在一个SYBASE DEVICES的后备文件,将会给我们一个弥补的机会。例如:当disk reinit
    使用了过小的size值,我们还可以重新恢复SYBASE DEVICES文件,重新做disk reint、disk refit。

    提示2:

    在使用disk reinit命令时,将覆盖SYBASE DEVICE(请参照以下语法),安全的做法是size值使用裸分
    区或系统文件的大小的最大值。如果使用的是UNIX裸分区,即使你不能确认SYBASE DEVICE最初大小是不
    是最大值,都要使用裸分区大小的最大值。

    步骤:

    .获得将要被恢复的SYBASE DEVICE的信息。
    这些信息被用来重建sysdevices,sysusages以及sysdatabases。
        .从error log的server启动信息中获得SYBASE DEVICE的设备名、指定路径。
        .使用裸分区或系统文件的大小的最大值作为SYBASE DEVICE的
    大小。
       .以上信息也可以通过最近的sysdevices系统表的内容来获得。如果
    对此信息怀有疑问,还是使用以上的方法比较稳妥。
    .做操作系统级的SYBASE DEVICE后备。UNIX操作系统,使用"dd"命令实现。
    .配置一个新的ASE Server。在以后的步骤中会用到这个新的master。
    .如果需要,请再配置一个Backup Server。
    .用单用户模式启动Server。
    .运行disk reinit,用来重建sysdevices系统表,而没有重新初始化SYBASE DEVICE。
    语法如下:
    disk reinit
    name="device_name",
    physname="physical_name",
    vdevno=virtual_device_number,
    size=number_of_blocks
    完成后,请查看error log。
    .确认重建的sysdevices系统表中信息正确:
    ——select * from sysdevices
    比较表中的信息是否与error log或者保留的sysdevices中的信息相同。
    .运行disk refit,用来重建sysdevices以及sysdatabases。
    用法如下:
    use master
    go
    disk refit
    go
    查看error log中是否有错误提示。
    .当disk refit完成后,会自动shut down ASE Server。
    .确认重建的系统表的信息是否正确:
    ——单用户模式启动ASE Server
    ——select * from sysusages、select * from sysdatabases
    ——sysusages系统表看起来是否正确?可以和以前保留的的信息进行比较。如果没有这种可能,那么应该
    保证不出现显而易见的错误。例如:是否缺少dbid;是否缺行;是否对于一个数据库来说只有segmap=4(表
    示为日志行)的行等等。
    ——sysdatabases系统表看起来是否正确?是不是没有显而易见的错误?
    11、 启动ASE Server,查看是否所有的数据库都已经正常恢复。
    .对所有的库做dbcc检查。
    .对所有库做后备。


    Q.如何移植master设备?

    A.以下步骤说明了如何将master设备移植到不同的磁盘上。请注意,在执行buildmaster之前,要停止SQL
    Server的应用。

    成功的关键在于,新建的sysusages系统表中每一行内容与旧的sysusages系统表内容相符。

    .对master库做dbcc检查,并后备master库。
    .执行select * from table_name命令,并保留其输出内容。其中,table_name包括:sysdevices、
    sysusages、sysdatabases。同样,可以使用bcp命令来实现。
    .执行sp_configure命令,并保留其输出内容。
    .拷贝$SYBASE/server_name.cfg文件,以做保留。
    .Shut down SQL/ASE Server。
    .执行以下命令,创建一个新的master设备:
        UNIX:buildmaster -d -ssize
        VMS:buildmaster /disk= /size=size    (size以页为单位,1页=2K)
    .编辑RUN_server_name文件,-d(UNIX)或/device(VMS)参数指向新建的设备名。
    .单用户模式启动SQL/ASE Server:
        UNIX:startserver -f RUN_sever_name -m
        VMS:startserver /server=server_name /masterrecover
    .执行select * from sysdevices命令,并保留其输出内容。
    .确认新建的sysusages系统表中每一行内容与旧的sysusages系统表内容相符,而且在配置好Server之后,
    没有做过alter database,那么系统表sysusages的内容是正确的。如果做过alter database,则要按原来
    的顺序执行这    些脚本,如果没有脚本,就要到保存的sysusages系统表的信息中找到alter database
    的参数。
    .Shutdown SQL/ASE Server,并用单用户模式启动Server,查看sysusages系统表内容是否正确。
    .如果所配置的Backup Server名称不是SYB_BACKUP,则要执行:
    1>; sp_configure "allow updates",1
    2>; go
    1>; update sysservers set srvnetname="name in interfaces file"
       where srvname="SYB_BACKUP"
    2>; go
    .装载master库。如果新master设备的大小与旧设备大小不同,则Server会Shut down。请注意新的系统表
    将会被重写,而且你需要调整Sysdevices系统表中master设备的大小。请执行以下两步:
    .用单用户模式启动Server.
    .如果新设备大小与旧设备大小不同,请执行:
    1>; sp_configure "allow updates",1
    2>; go
    1>; update sysdevices set high=nnnn where name="master"
    2>; go
      其中nnnn是以页(2K)为单位的master设备的大小,此值可以从保留的sysdevices系统表的信息中找到。
    如果 所建的设备比旧设备大,请执行:
    1)创建一个与master设备差不多大的数据库,这样做的目的是重新初始化分 配页,使得整个master设备
    可用。
    2)删除这个数据库。
    .重启Server。
    .后备master数据库。
    注意:

    .在装载master库之前要确定SQL Server此时的字符集和语言模块与后备master库时的字符集和语言模块相同。
    .在执行此任务之前和完成以后使用sp_helpsort查看字符集与语言模块是否相同。  

www.kepusoft.com 信息之舟电脑之家收集整理推荐文章