免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2784 | 回复: 3
打印 上一主题 下一主题

Sybase数据备份之BCP用法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-10-27 09:22 |只看该作者 |倒序浏览
BCP一般存放在所安装的ASE或者Open Client 的BIN目录中。12版本以前的ASE,bcp存放目录为 $SYBASE/bin,12版本(含12版本)以后存放目录为 $SYBASE/OCS-12_x/bin。其中$SYBASE为SYBASE安装目录,12_x代表12.0、12.5版本,显示为12_0或者12_5,可执行文件名称为bcp.EXE。

参数列表如下:(可用 bcp – 得到)

usage: bcp [[database_name.]owner.]table_name[:slice_number] {in | out} datafile

[-m maxerrors] [-f formatfile] [-e errfile]

[-F firstrow] [-L lastrow] [-b batchsize]

[-n] [-c] [-t field_terminator] [-r row_terminator]

[-U username] [-P password] [-I interfaces_file] [-S server]

[-a display_charset] [-q datafile_charset] [-z language] [-v]

[-A packet size] [-J client character set]

[-T text or image size] [-E] [-g id_start_value] [-N] [-X]

[-M LabelName LabelValue] [-labeled]

[-K keytab_file] [-R remote_server_principal]

[-V [security_options]] [-Z security_mechanism] [-Q]

常用数据备份格式为:

bcp dbname..tablename out c:\temp\filename -Usa -Ppassword –Sservername –c


其中 –U后为SYBASE登录名称,–P后为SYBASE登录口令,–S后为SYBASE服务名称,–c代表使用可见文本方式导出数据,如果为数据恢复只需要将out 替换为 in 即可。

可用如下方法生成一个可以一次导出一个数据库中所有表的数据的执行脚本。

编辑一个如下文本文件,文件名称例为 bcpscript:

use dbname 选中将要导出数据的数据库

go

select 'bcp dbname..' + name + ' out c:\temp\' + name + ' -Usa -P -Ssybcdsrv -c' from sysobjects where type = 'U' (在sysobjects系统表中type为U的表为用户表,系统表为S)

go

用如下格式执行:

isql –Usa –Ppassword –Sservername –i bcpscript –o bcpout.bat(i参数后为输入文件,o参数后文件为输入文件执行后得到的输出文件)

执行后可以得到一个后缀名为 BAT 的批处理文件(在unix下则生成一个shell文件并更改相应的执行权限),可直接执行。即在指定的目录下导出了相应的数据文件。一个表的数据为一个文件。如在UNIX下则可不用BAT后缀。

备份得到的数据文件如果需要重新往数据库中恢复,只需要将上面操作步骤中BCP命令中的out 参数换为in参数即可。

注意:在对正式数据做操作前最好先作一些测试。

另外,如果牵涉到使用bcp进行字符集的更改,可以采用 –J charset 参数进行,关于BCP等工具的具体使用指南,请参见SYBASE相关文档。

针对系统移植所需做的工作,应该有如下几个步骤:

1. 安装新环境的硬件环境,包括网络,硬盘状况;

2. 安装新环境的操作系统,包括Service Pack;

3. 安装相同版本的SYBASE数据库产品,包括补丁;

4. 添加数据库用户,设备等相关信息,应与老系统中一致

5. 创建新系统数据库;

6. 利用你所拥有的表脚本或者通过SYBASE CENTRAL中的生成DDL功能,将老系统中的建表脚本导出,生成数据库中的表.最好将建表脚本与建立表上约束(主键,外键等)的脚本分开,先在表上不建约束,在数据导入后,再加上.;

7. BCP OUT 老系统中数据,根据上面提到的方法;

8. 运行建立其他对象的脚本,包括索引,主键,外键及存储过程,触发器,缺省等;

9. 在新系统中对需要更改的表结构做更改,或者添加新表;

10. 测试应用系统是否工作正常.

论坛徽章:
34
ChinaUnix元老
日期:2018-07-04 15:10:362015年亚洲杯之阿联酋
日期:2015-02-06 17:15:532015亚冠之武里南联
日期:2015-06-06 15:40:252015亚冠之北京国安
日期:2015-06-17 15:42:412022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之阿尔纳斯尔
日期:2015-09-20 09:42:1215-16赛季CBA联赛之北京
日期:2016-01-15 10:03:5915-16赛季CBA联赛之青岛
日期:2016-04-26 16:44:4915-16赛季CBA联赛之广夏
日期:2018-07-04 15:33:21C
日期:2016-10-25 16:12:142017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之同曦
日期:2017-02-22 22:41:10
2 [报告]
发表于 2010-10-27 13:45 |只看该作者
BCP要最根本的是源表结构要与目标表结构一致,这点确实很郁闷!

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2010-10-27 15:17 |只看该作者
回复 2# wfcjz


    只有这样才能实现高效率嘛。  鱼与熊掌的问题嘛。

论坛徽章:
34
ChinaUnix元老
日期:2018-07-04 15:10:362015年亚洲杯之阿联酋
日期:2015-02-06 17:15:532015亚冠之武里南联
日期:2015-06-06 15:40:252015亚冠之北京国安
日期:2015-06-17 15:42:412022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:322015亚冠之阿尔纳斯尔
日期:2015-09-20 09:42:1215-16赛季CBA联赛之北京
日期:2016-01-15 10:03:5915-16赛季CBA联赛之青岛
日期:2016-04-26 16:44:4915-16赛季CBA联赛之广夏
日期:2018-07-04 15:33:21C
日期:2016-10-25 16:12:142017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之同曦
日期:2017-02-22 22:41:10
4 [报告]
发表于 2010-10-27 17:48 |只看该作者
回复 3# andkylee

呵呵,可以考虑在BCP中不只是导出数据,将建表语法也导出那就爽死了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP