文档库

最新最全的文档下载
当前位置:文档库 > 创智_DRMS_操作手册_sybase数据库BCP导入导出

创智_DRMS_操作手册_sybase数据库BCP导入导出

Sybase数据库BCP导入导出操作手册

目录

1. 常用数据库备份类型 (2)

2. BCP数据导出使用情况 (2)

3. BCP数据导入导出操作方法 (2)

3.1. 生成BCP导出语法 (2)

3.2. BCP数据导出 (3)

3.3. BCP数据导入 (4)

3.4. 分段导入以及日志清理 (4)

3.5. 前后台BCP out&in语法生成器 (6)

4. 注意事项 (6)

创智_DRMS_操作手册_sybase数据库BCP导入导出

1.常用数据库备份类型

●使用Sybase的Backup Server(备份服务器),做Dump备份。

转储数据库(Dump database),就是为整个数据库(包括数据、表结构、触发器、游标、存储过程、事务日志等)做一次物理备份。转储数据库时,系统自动执行一次checkpoint,即将日志和数据从缓冲区拷贝到硬盘(只拷贝脏页),把已被分配的页(日志和数据)转储到设备。这种数据备份方式是将整个数据库的运行环境完整的复制一份,包括数据库的脏页和碎片,在使用load命令恢复时,只能恢复到同样大小的数据库中(数据和日志的大小都只能和原来完全一致),适用于在每天的日终营业网点下班后的日常备份。

优点是数据库完整无误,缺点是不能直接查看备份内容。

●BCP数据库备份

BCP(bulk copy)是SYBASE公司提供专门用于数据库表一级数据备份的工具,一般存放在所安装的ASE或者Open Client 的BIN目录中。利用这个命令来处理数据的备份和恢复,比软件中提供的数据备份、恢复要快的多,因为该命令对数据的操作不产生日志。

2.BCP数据导出使用情况

●如果数据库受到硬伤(如数据库挂起无法恢复、或者系统表结构损坏等),

造成数据不能通过备份服务器进行正常备份,或者正常备份的数据库也一样是损坏的,就要通过BCP数据导出方式,把数据库所有表数据导出来,再进行恢复。

●通过bcp备份恢复可以去掉原数据库的碎片,减小数据库大小,提高数据

库的存储效率和运行速度:

Sybase数据库作为联机事务处理应用服务器,每天应用程序都对数据库做大量的插入、修改和删除等操作,不可避免的在数据库的物理存储介质上留下页碎片和扩展单元碎片,从而影响数据库的存储效率和运行速度。

3.BCP数据导入导出操作方法

3.1.生成BCP导出语法

命令格式:

bcp 表名 out/in 路径名文件名 -c -t 分隔符 -u (用户名)-p(密码)-S(服务器名)-J(字符串)

解释:

创智_DRMS_操作手册_sybase数据库BCP导入导出

数据库名为要备份的数据库名字

表名为要备份的表的名字

out/in 备份用out,恢复用in

文件名:备份形成的文件或恢复需要的数据文件,要求包含文件的路径信息,否则默认为当前路径。

用户名:一般为sa

密码:sa的口令

服务器名:如本机器连接多个数据库服务器,则需要指定相应的数据库服务器字符串:cp850一定要填上,否则导出来的中文都是乱码。

BCP out语法生成器:

SELECT 'bcp 数据库名.pos.'+ name + ' out ' + name + ".txt -Usa -P -S 服务名 -c -t~ -Jcp850"

from sysobjects

where type = 'U'

order by name;

通过PB将上述语法执行后形成的语句导出成txt文件,然后把后缀名改成bat形成批处理文件,在需要执行时,直接运行批处理文件即可。

3.2.BCP数据导出

在指定路径执行批处理后,就会开始导出数据,弹出DOS命令窗口,会显示当前的数据导出情况,如正在导出哪个表的数据,导出的数据条数多少或者报错信息等,同时,导出成功后就会在语法里设定的导出目录中生成txt文档:

创智_DRMS_操作手册_sybase数据库BCP导入导出

创智_DRMS_操作手册_sybase数据库BCP导入导出

创智_DRMS_操作手册_sybase数据库BCP导入导出

3.3.BCP数据导入

导出成功后,就需要重新建立一个新的数据库和新的表结构,然后通过BCP 批处理导入数据。

同样,要先生成导入的语法:

SELECT 'bcp 数据库名.pos.'+ name + ' in ' + name + ".txt -Usa -P –S 服务名 -c -t~ -Jcp850"

from sysobjects

where type = 'U'

order by name;

然后存为bat批处理文件再执行即可,同样也会弹出DOS命令窗口显示数据导入情况。

3.4.分段导入以及日志清理

BCP导出数据不会产生日志信息,速度很快,而BCP数据导入的时候,如果表结构含有索引和主键,就会每BCp进一条数据,数据库都自动写一条log日志,记载此数据的上一条和下一条记录,确定本记录在此表中的准确位置,一是影响bcp速度,二是数据库的log日志飞速膨胀。

所以当日志满了之后,就会卡住不再运行,需要清理数据库日志才行,这就需要在BCP导入语法当中,在适当的位置添加调用清理日志的语法,每导出一部分表数据后,就自动清理日志。而一般服务器电脑上都有c:\check文件夹,里

创智_DRMS_操作手册_sybase数据库BCP导入导出

面自带有清理日志的批处理语法,所以可以直接调用,在bcp导入语法中添加以下语句即可:

call c:\checkdb\truncate.bat

由于数据库的自动清除log功能只有在一个事务结束后才起作用,所以如果导出的是一个很大的表的话,有可能在导入的过程中就满日志卡住中断了,这样的话就需要对大表进行分段导出和导入,BCP大表导出例子(其中-F后面是起始行数,-L是结束行数):

bcp kzx.pos.monthly_tx_summary out d:\bcpdata\monthly_tx_summary1.txt -Usa -P -Skzx -c -t~ -Jcp850 -F 1 -L 200000

bcp kzx.pos.monthly_tx_summary out d:\bcpdata\monthly_tx_summary2.txt -Usa -P -Skzx -c -t~ -Jcp850 -F 200001 -L 400000

bcp kzx.pos.monthly_tx_summary out d:\bcpdata\monthly_tx_summary3.txt -Usa -P -Skzx -c -t~ -Jcp850 -F 400001 -L 600000

bcp kzx.pos.monthly_tx_summary out d:\bcpdata\monthly_tx_summary4.txt -Usa -P -Skzx -c -t~ -Jcp850 -F 600001 -L 800000

bcp kzx.pos.monthly_tx_summary out d:\bcpdata\monthly_tx_summary5.txt -Usa -P -Skzx -c -t~ -Jcp850 -F 800001 -L 1000000

bcp kzx.pos.monthly_tx_summary out d:\bcpdata\monthly_tx_summary6.txt -Usa -P -Skzx -c -t~ -Jcp850 -F 1000001

与上面配套的BCP大表导入例子:

bcp kzx_chg.pos.monthly_tx_summary in

d:\bcpdata\monthly_tx_summary1.txt -Usa -P -Skzx -c -t~ -Jcp850

bcp kzx_chg.pos.monthly_tx_summary in

d:\bcpdata\monthly_tx_summary2.txt -Usa -P -Skzx -c -t~ -Jcp850

bcp kzx_chg.pos.monthly_tx_summary in

d:\bcpdata\monthly_tx_summary3.txt -Usa -P -Skzx -c -t~ -Jcp850

bcp kzx_chg.pos.monthly_tx_summary in

d:\bcpdata\monthly_tx_summary4.txt -Usa -P -Skzx -c -t~ -Jcp850

bcp kzx_chg.pos.monthly_tx_summary in

d:\bcpdata\monthly_tx_summary5.txt -Usa -P -Skzx -c -t~ -Jcp850

bcp kzx_chg.pos.monthly_tx_summary in

d:\bcpdata\monthly_tx_summary6.txt -Usa -P -Skzx -c -t~ -Jcp850

BCP分段导入导出有完整的操作方案文档,有兴趣的可以另外学习和参考。

创智_DRMS_操作手册_sybase数据库BCP导入导出

3.5.前后台BCP out&in语法生成器

以下是针对前台sybase网络版数据库的BCP语法生成器:

/*BCP OUT */

SELECT 'bcp 数据库名.dbo.'+ name + ' out ' + name + ".txt -Usa -P –S 服务名 -c -t~ -Jcp850"

from sysobjects

where type = 'U'

order by name;

/*BCP IN*/

SELECT 'bcp 数据库名.dbo.'+ name + ' in ' + name + ".txt -Usa -P –S 服务名 -c -t~ -Jcp850"

from sysobjects

where type = 'U'

order by name;

后台数据库BCP语法生成器:

/*BCP OUT */

SELECT 'bcp 数据库名.pos.'+ name + ' out ' + name + ".txt -Usa -P -S 服务名 -c -t~ -Jcp850"

from sysobjects

where type = 'U'

order by name;

/*BCP IN*/

SELECT 'bcp 数据库名.pos.'+ name + ' in ' + name + ".txt -Usa -P -S服务名 -c -t~ -Jcp850"

from sysobjects

where type = 'U'

order by name;

4.注意事项

●数据库属性必须把选项中的“允许选择进入/批量复制”和“检查点上截断

日志”两项勾上。

●导入的数据库以及temdb大小要足够大。

●如果数据量大的话,导出的txt文件大小会很大,故导出的路径要保证有足

够的空间。

●导入的数据库的表结构必须与导出数据库的表结构一致,否则会导入失败,

对于一些临时表可以不用导入,如果有个性化表的话也需补建才能导入。

●如果想提高BCP导入数据的速度,可以将比较大的表的索引和主键删除,导

入完成后,再重新将删除的主键和索引建上。

创智_DRMS_操作手册_sybase数据库BCP导入导出

●导入后的数据要跟导入前的数据做比较,然后对有差异的表用 PipeLine 工

具进行重新导入。

●不能连续执行BCP导入语法,否则对于没有主键和索引的表就会造成数据重

复。

●数据导入完成后,要建立相应的触发器、存储过程,部分表需要改表锁为页

锁、增加索引、进行数据库优化等。

创智_DRMS_操作手册_sybase数据库BCP导入导出