存档

文章标签 ‘BCP’,文章数:9

本博客中关于isql和bcp这2个工具的文章有:

ISQL:

  1. Sybase ASE中用isql连接数据库失败时的错误信息所反馈的信息
  2. ASE中的命令行实用工具isql的几个参数的使用方法

BCP:

  1. 关于BCP工具的使用,介绍三个方面的东西
  2. 关于Sybase中的快bcp
  3. ASE15.x的bcp能够实现按照条件导出表内数据
  4. bcp导出数据时禁止字符集转化
  5. 快速生成bcp in导表命令行的方法

本文介绍Sybase ASE V15.x版本中isql和bcp这两个工具的新特性。在前面的博文:ASE中的命令行实用工具isql的几个参数的使用方法 中介绍了isql的几个新特性。

1 BCP

1.1 Skip number of rows: --skiprows (SDK 12.5.1 ESD #19)

1.2 Partition support for multiple-partition, multiple-file operations (ASE 15.0)

1.3 Computed columns: --hide-vcc / --show-fi (ASE 15.0)

1.4 Encrypted columns: -C (ASE 15.0 ESD #1 / SDK 12.5.1 ESD #5)

1.5 Initialization strings: --initstring (ASE 15.0 ESD #5)

1.6 Discard file support for rejected rows: -d (ASE 15.0 ESD #8)

1.7 Alternate Sybase home: -y (New Features in 15.0.2 ESD#5 / SDK 15.0 ESD#2)

1.8 bcp64 for 64-bit products on UNIX platforms (New Features in 15.5 ESD #9)

1.9 Usage

2 ISQL

2.1 isql external error status return: --retserverror (ASE 15.0.2 ESD#4 / SDK 15.0 ESD#10)

2.2 Alternate Sybase home: -y (ASE 15.0.2 ESD#5 / SDK 15.0 ESD#2)

2.3 Redirects/Append the output of the T-SQL command to file_name (ASE 15.0.2 ESD#5 / SDK 15.0 ESD#12)

2.4 Pipes the output of the T-SQL command to an external command (ASE 15.0.2 ESD#5 / SDK 15.0 ESD#12)

2.5 Obfuscated input: --conceal (ASE 15.0 ESD #13)

2.6 Verbose usage: --help (ASE 15.0 ESD #14)

2.7 Application name: --appname (ASE 15.0.3 ESD#4 / OCS 15.0 ESD#17 / OCS 15.5)

2.8 Command history: --history (ASE 15.0.3 ESD#4 / OCS 15.0 ESD#18 / OCS 15.5)

2.8.1 Command history

2.8.2 Listing command history

2.8.3 Recalling and reissuing commands

2.9 isql64 for 64-bit products on UNIX platforms (New Features 15.5 ESD #9)

2.10 Usage

3 Sources

3.1 New Features Open Server™ 15.5 and SDK 15.5 for Windows, Linux, UNIX, and Mac OS X

3.2 New Features Open Server™ 15.0 and SDK 15.0 for Microsoft Windows, Linux, UNIX, and Mac OS X

将生产环境中AIX5.3平台上的Sybase ASE12.5.2迁移到备机作测试用,下面简单记录下主要步骤。

环境:

Sybase ASE version: 12.5.2 32bit

OS Version: AIX 5.3

$SYBASE: /home/syb123

Instance name: TEST

database name: testdb

备机上建立好了与主机相同的vg与lv

 

主要步骤:

1.将主机上的目录/home/syb123打包,拷贝到备机,解开tar包到备机的相同目录下。删除备机/home/syb123下的interfaces文件。

例:有表

--sybase

create table t_test(

mydate datetime)

go

--oracle

create t_test(mydate date)

方法1:在sybase侧建立视图,然后从导出视图(此方法舍弃了毫秒部分)

create view v_test as

select

convert(varchar(10),pst_exec_stime,111)+' '+convert(varchar(9),pst_exec_stime,8) mydate

from t_test

go

  1. 导出表数据到文本文件

在用户表名上点右键,选择批量复制(bcp)下的输出菜单。

选择导出文件的路径。可以针对每个表分区分别指定输出文件路径。此表systbl_Counters仅有一个roundrobin分区。选择将所有分区的数据保存到:c:\sybase\dbo_systbl_Counters_BCP.out。 点下一步,

选择导出文件的格式:字符形式还是本地形式。选择字符形式。点下一步,

把从Sybase或其它类型数据库导出的文本文件再次导入到sybase数据库的时候,bcp是个很好的工具。

本博客已有3篇关于bcp的文章:

 

如果要用bcp导入很多的表,对每一个表都要写一条语句是件很费劲的事情,尤其表数量很多的时候。简单的方法呢?

第一种方法: 利用SQL语句

在bcp out导出数据的时候,也就是生成相应的bcp out命令语句的时候,也同时生成bcp in导入的命令语句。

生成导出语句的SQL为:

select  "bcp "+db_name()+"."+user_name(uid)+"."+name+"  out /tmp/databcpout/" +name+ ".txt -Usa -P<sa_passwd> -S<server_name>  -c -T10000000 " from sysobjects where type='U' order by name

其中: 将<sa_passwd>,server_name> 分别替换成sa的密码和数据库服务器名。或者用对想要导出的表有查询权限的用户也行。

Sybase ASE15.0及以后的版本中的bcp命令实用工具中有个-Y参数,这个参数的作用是:禁用在服务器中的字符集转化,在使用bcp in时由bcp在客户端上执行字符集转化过程。 只有ASE15.0或更高版本中支持客户端unicode转化。 另外:所有字符集转化都是在bcp out期间在服务器中执行的。        

ASE15.0之前的版本中利用bcp这个实用程序只能够导出整表或视图的数据。要想利用bcp有条件得导出表内数据,只能根据条件建立视图,然后 再导出该视图的数据;或者根据条件建立临时表,再导出临时表的数据。但是,都必须在执行bcp命令之前到数据库内部去创建对象(视图或者临时表),然后再 执行bcp命令导出视图或者临时表数据。显然,不是太方便。而其它的数据库管理系统,比如sqlserver早在sqlserver2000就实现了根据 条件queryout数据的功能。利用sybase ASE的第三方工具按条件导出数据也是一种办法。

在ASE 15.0及以后版本中,sybase终于提供了按照条件导出表内数据的办法,虽然实现起来还稍微有一点点小麻烦,但是终究是有这个功能了。参数:--initstring 就是为实现这个功能而加的。

关于参数:--initstring的注意事项有:

1.  参数--initstring之后的SQL语句会在数据导出之前被发送到ASE引擎;

2.  参数--initstring之后的SQL语句被当做会话级别的SQL语句一样处理;

3.  参数--initstring之后的SQL语句在整个bcp导出数据会话期间始终有效;

4.  真正导出的数据是关键字bcp和out之间的表的数据,而不是参数--initstring中select列表的数据。

下面开始举几个例子:

在sybase中复制数据时,经常能够解决到bcp(bulk copy)。 bcp分两种,快bcp和慢bcp。这两种分法是针对bcp in。对于bcp out个人感觉没有快、慢之分,反正就是从sybase的extent上大块大块的拷数据。 今天在bcp 数据in 到一个sybase server的时候,报下面的错误: C:\Documents and Settings\Administrator>bcp test.dbo.tablename in d:\12 34 -c -Usa -Saix Password: Starting copy… Server Message: SYB_AIX53 – Msg 4806, Level 16, State 1: You cannot run the non-logged version of bulk copy in this database. Please chec k with the DBO. Server Message: SYB_AIX53 – Msg [...]