Sybase ASE学习笔记3

2014-03-20  谢满彬 

学习笔记2虽能恢复数据库(如果没推测错,此种方法只是把数据库在某个时间戳的状态记下来,并不能直接用于数据库迁移),但它不能满足数据库迁移,因此下面介绍一下另外一种备份方法。
PS:这里指的数据库迁移仅限于sybase到sybase(版本,页大小一致的)。
环境描述、问题都同学习笔记2一样,即把linux上的数据库远程备份到windows下。
先把要使用的工具介绍一下:1.ddlgen 2.bcp
1.ddlgen在sybase ase 12.5以后才出现的工具,ddlgen参数说明可参考 http://infocenter.sybase.com/help/index.jsp(
Adaptive Server Enterprise 15.7 >  Utility Guide >  Utility Commands Reference
)
2.bcp这个工具可在cmd下bcp -help来查看用法,另外还可以参考 http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc30191.1570100/doc/html/san1367605030412.html
问题:如何把linux下的数据库备份到windows下呢?
步骤:

1.为了让在windows下能识别远程linux下的sybase服务,因此必须在sql.ini(路径:${SYBASE_HOME}\ini\)中添加该服务。

另外sybase也提供了修改接口文件的工具,在windows下是dsedit.exe,在linux下是dscp

2.使用ddlgen工具导出数据库结构。

ddlgen -U用户名 -Ppassword -Ssybase -Ddb_name -OC:\script.txt(注:可以根据需要添加-E错误日志、-L过程日志和-J指定字符)

这里的用户名最好是DBO或者是SA,理由:经比较普通用户导出的文件和DBO或者SA导出的文件,我发现普通用户导出的文件在文件的开头会少了DBOPTION的设置(最后会use 目标db 运行checkpoint,从而使下方的增加用户脚本运行正确),导致脚本会出错。

3.使用bcp工具导出数据库的数据。
首先通过db连接工具链接要导出数据的数据库。
运行以下sql: select 'bcp db_name..' + name + ' out C:\data\data_' + name + '.txt' + '  -U用户名 -Ppassword -Ssybase -c -t"|"' from sysobjects where type='U'

其中红色部分是为了隔离\和',免得系统识别为转义,蓝色部分可选,可不填写格式或根据需要更改格式都行。(bcp中有t这个参数,它的作用是列与列之间的数据用什么分割,由于本人的经历,建议选择分隔符时一定要选择比较特殊的符合,这样可以避免在bcp in的时候出错)

打开notepad,把sql的结果复制到notepad中并保存,修改文件后缀,改为bat。(linux下改为shell脚本)
最后双击运行就可以了。

恢复数据库
1.用isql工具,isql -Usa -Ppassword -Ssybase -iC:\script.txt 
2.把上面的bat文件中out改为in,双击运行就可以了。

个人比较推荐使用这种方法,一是所需要的物理空间较小,二是应该可以根据实际需要来修改ddl脚本。 在实际时候过程中,还会遇到字符集的问题,这个问题实践较少,内容有待补充,但值得一提是的bcp的-Y参数:specifies that character-set conversion is disabled in the server, and is instead performed by bcp on the client side when using bcp out 。NOTE:During bcp out, all character-set conversion is done in the server.


最后跟大家分享一下:在导入的时候遇到报错,可以使用bcp -e保存错误日志,因为console台上打印的信息有时候是不完整。


如有错漏,请指出,我会尽快改正过来的。
271°/2712 人阅读/0 条评论 发表评论

登录 后发表评论