在项目中,许多地方用到每天从中心数据库Oracle中数据导入到Sybase数据库,或者Sybase数据库中数据迁移到Sybase数据库中。如果是Oracle那么采用Jdbc生成bcp文件,否则直接利用sybase中bcp工具生成相关的bcp数据文件,然后利用Sybase中BCP工具将数据导入到Sybase中。
Sybase提供的大容量复制程序(BCP)用来帮助你以主表方式从数据库快速输出输入数据。重要的是,它是SYBASE公司提供专门用于数据库表一级数据备份的工具。一般存放在所安装的ASE或者Open Client 的BIN目录中。bcp 实用工具在实例和数据文件之间以用户指定的格式复制数据。BCP也一个可从CLIENT Library或者DB-Library应用程序使用的API(应用程序编程接口)。可执行文件名称为bcp.EXE。
ASE-15.0默认目录为:$Sybase\OCS-15_0\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命令详解(sybase)使用如下:
语法
usage: bcp [[database_name.]owner.]table_name[:view_name] {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 fileexport_path -Uusername -Ppassword -Sservername -c
例如:bcp dbname..tablename out c:\tmp\filename -Usa -Ppassword -Sserver -C 即可。
其中 dbname为数据库名,tablename为表名,-U后为SYBASE登录名称,-P后为SYBASE登录口令,-S后为SYBASE服务名称(即你在dsedit中设置的Servername),-c代表使用可见文本方式导出数据。如果为数据恢复只需要将out 替换为 in 即可。
其中参数说明
database_name
指定的表或视图所在数据库的名称。如果未指定,则为用户默认数据库。
owner
表或视图所有者的名称。如果执行大容量复制操作的用户拥有指定的表或视图,则 owner 是可选的。如果没有指定 owner 并且执行大容量复制操作的用户不拥有指定的表或视图。在以下情况下可省略表的所有者。如果该表的所有者与执行BCP的用户相同,或者如果它是唯一的名称,且执行BCP的用户有权从该表读出或选择。
table_name
是将数据复制到 Sybase 时 (in) 的目的表名,以及从Sybase 复制数据时 (out) 的源表名。
view_name
是将数据复制到 Sybase 时 (in) 的目的视图名,以及从 Sybase 复制数据时 (out) 的源视图名。只有其中所有列都引用同一个表的视图才能用作目的视图。有关将数据复制到视图的限制的更多信息,请参见 INSERT。
in | out
指定大容量复制的方向。in 是从文件复制到数据库表或视图,out 是指从数据库表或视图中导出或转储。
data_file
大容量复制表或视图到磁盘(或者从磁盘复制)时所用数据文件的完整路径。当将数据大容量复制到 Sybase 时,此数据文件包含将复制到指定表或视图的数据。当从 Sybase 大容量复制数据时,该数据文件包含从表或视图复制的数据。路径可以有 1 到 255 个字符。
-m max_errors
指定在大容量复制操作取消之前可能产生的错误的最大数目。bcp 无法复制的每一行都将被忽略并计为一个错误。如果没有包括该选项,则默认为 10。
-f format_file
指定格式文件的完整路径,该格式文件包含以前在同一个表或视图上使用 bcp 时的存储响应。当使用由 format 选项所创建的格式文件大容量复制入或复制出数据时,使用此选项。格式文件的创建是可选的。在提示几个格式问题之后,bcp 将提示是否在格式文件中保存回答。默认文件名为 Bcp.fmt。大容量复制数据时,bcp 可引用一个格式文件,因此不必重新交互输入以前的回答。如果未使用此选项,也没有指定 –n、-c、-w、-6 或 -N,则 bcp 将提示输入格式信息。
-e err_file
指定错误文件的完整路径,此错误文件用于存储 bcp 无法从文件传输到数据库的所有行。来自 bcp 的错误信息将发送到用户工作站。如果未使用此选项,则不创建错误文件。
-F first_row
指定要大容量复制的第一行的序数。默认值是 1,该选项可用来将大型数据库的数据抽取到交错排列到多个BCP文件中。表示在指定数据文件的第一行。
-L last_row
指定要大容量复制的最后一行的序数。该选项可用来将大型数据库的数据抽取到交错排列到多个BCP文件中。表示指定数据文件中的最后一行。
-b batch_size
指定所复制的每批数据中的行数。每个批处理作为一个事务复制至服务器。SQL Server 提交或回滚(在失败时)每个批处理的事务。默认情况下,指定的数据文件中的所有数据都作为一批复制。请不要与 -h "ROWS_PER_BATCH = bb" 选项一起使用。
-n native
导入导出的本机文件格式。它是一个伪二进制格式,不可读,但导入导出速度却比较快。该文件格式是特殊操作系统特有的,而且在不同操作系统之间不可移植。使用数据的本机(数据库)数据类型执行大容量复制操作。此选项不提示输入每一字段,它将使用本机值。
-c character
表示这是字符文件格式,用来编写人们可用和刻度的文本文件。字段之间的分割为<TAB>字符,如果你想创建一个在不同操作系统上其他Sybase服务器可用的文件,那么必须使用这一个选项。使用字符数据类型执行大容量复制操作。此选项不提示输入每一字段;它使用 char 作为存储类型,不带前缀,\t(制表符)作为字段分隔符,\n(换行符)作为行终止符。
-t field_terminatior
选项用来分隔输出文件中每个字段/列。
-r row_terminator
选项用来分隔输出文件中的每一行。
-U username
执行BCP的用户或注册。该用户必须足够的权限来执行需要的select或者Insert语句,以便执行BCP过程。
-P password
运行BCP的用户口令,如果不规定该口令,BCP会想你提示。
-I interfaces_file
使用的sql.ini文件所在的位置,如果不规定interfaces_file的数值,那么Sybase将根据主机变量$Sybase中规定的目录,在INI子目录中查看。
-S server
数据库和表所在服务器名称。
-a display_charset
采用如下方法生成一个可以一次导出一个数据库中所有表的数据的执行脚本。
备份得到的数据文件如果需要重新往数据库中恢复,只需要将上面操作步骤中BCP命令中的out 参数换为in参数即可。
注意:在对正式数据做操作前最好先作一些测试。
另外,如果牵涉到使用bcp进行字符集的更改,可以采用 –J charset 参数进行
关于BCP等工具的具体使用指南,请参见SYBASE相关文档。
针对系统移植所需做的工作,应该有如下几个步骤:
1. 安装新环境的硬件环境,包括网络,硬盘状况;
2. 安装新环境的操作系统,包括Service Pack;
3. 安装相同版本的SYBASE数据库产品,包括补丁;
4. 添加数据库用户,设备等相关信息,应与老系统中一致
5. 创建新系统数据库;
6. 利用你所拥有的表脚本或者通过SYBASE CENTRAL中的生成DDL功能,将老系统中的建表
<!--EndFragment--> <!--EndFragment-->