内存数据库 timesten使用命令导出内存库数据到物理库方法及注意点

文章标签: 内存数据库,timesten
2014-11-11 14:56:52     23 人阅读    

一、使用命令从内存库导出表数据到物理库表的方法及注意事项:
用到的命令:
ttBulkCp       Timesten直连方式(direct)导出内存库表数据到文件xxx.dump;
ttBulkCpCS     Timesten客户端方式(client)导出内存库表数据到文件xxx.dump;
sqlldr          根据控制文件格式,将导出数据导入物理库表;sql loader,它可以把一些以文本格式存放的数据顺利的导入到oracle数据库中,是一种在不同数据库之间进行数据迁移的非常方便而且通用的工具。
命令的具体使用,举例如下:
#直连方式:导出内存库表数据到文件
ttBulkCp -o "DSN=bill56;uid=bill;pwd=bill" XML_USERINFO XML_USERINFO.dump
   
说明:XML_USERINFO:内存库中要导出数据的表名;
      XML_USERINFO.dump:将数据导出到的文件;
注:此命令将表XML_USERINFO中的所有数据导出到文件XML_USERINFO.dump中;

#客户端连接方式:导出内存库表数据到文件
ttBulkCpCS -o "DSN=bill56;uid=bill;pwd=bill" XML_USERINFO XML_USERINFO.dump
   
说明:XML_USERINFO:内存库中要导出数据的表名;
      XML_USERINFO.dump:将数据导出到的文件;
注:此命令将表XML_USERINFO中的所有数据导出到文件XML_USERINFO.dump中;

#将导出数据导入到物理库表
sqlldr billing/billing@DB42 control=XML_USERINFO.ctl data=XML_USERINFO.dump rows=100000 bindsize=1048576 direct=true errors=-1
    
说明:XML_USERINFO.ctl:控制文件(作为模版);;
      XML_USERINFO.dump:数据文件;
      Rows:多少条记录提交一次,默认为 64;
      Bindsize:每次提交记录的缓冲区的大小(字节为单位,默认256000);
      direct:使用直通路径方式导入(默认FALSE);
      errors:允许的错误记录数(默认50);
3、实例介绍使用上述命令导出导人过程
以导出内存库表XML_USERINFO中数据到物理库表XML_USERINFO为例:
XML_USERINFO的表结构如下:
  create table XML_USERINFO
  (
    USERID               VARCHAR2(20) not null,
    ACCOUNTID           VARCHAR2(20) not null,
    CUSTOMERID          VARCHAR2(20) not null,
    MSISDN               VARCHAR2(20) not null,
    PROVINCE_ID          VARCHAR2(2)  not null,
    AREA_ID              VARCHAR2(3)  not null,
    USER_NET_TYPE        VARCHAR2(1),
    BRAND_TYPE           VARCHAR2(1),
    PRODUCT_ID            VARCHAR2(15) not null,
    PRODUCT_NAME         VARCHAR2(50),
    OPEN_TIME              VARCHAR2(14) not null,
    ACTIVE_TIME            VARCHAR2(14),
    DELETE_TIME            VARCHAR2(14),
    STATE                   VARCHAR2(1)  not null,
    AVAILED_TIME           VARCHAR2(14) not null,
    LATEST_UPDATE_TIME   VARCHAR2(14) not null
  )
  注意:关注下红色标注的允许为空的字段,后面会重点讲述此类字段在导入时的处理。
保证内存库和物理库上存在对应的表XML_USERINFO;
根据表结构编写控制文件XML_USERINFO.ctl,文件名可自定义,内容如下:
    load data
        into table XML_USERINFO
        append
        fields terminated by ',' optionally enclosed by '"' TRAILING NULLCOLS
        (
        USERID,
        ACCOUNTID,
        CUSTOMERID,
        MSISDN,
        PROVINCE_ID,
        AREA_ID,
        USER_NET_TYPE NULLIF USER_NET_TYPE="NULL",
        BRAND_TYPE NULLIF BRAND_TYPE="NULL",
        PRODUCT_ID,
        PRODUCT_NAME NULLIF PRODUCT_NAME="NULL",
        OPEN_TIME,
        ACTIVE_TIME NULLIF ACTIVE_TIME="NULL",
        DELETE_TIME NULLIF DELETE_TIME="NULL",
        STATE,
        AVAILED_TIME,
        LATEST_UPDATE_TIME
        )
   说明:append:装入表的方式;
装入表的方式有四种,如下:
insert--为缺省方式,在数据装载开始时要求表为空
append--在表中追加新记录
replace--删除旧记录(用deletefromtable语句),替换成新装载的记录
truncate--删除旧记录(用truncatetable语句),替换成新装载的记录
       特别注意点,本文档的关键:
           控制文件XML_USERINFO.ctl中标红加粗的部分,要特别注意;
           如果内存库导出表XML_USERINFO中,某字段是空,则在使用命令ttBulkCp或ttBulkCpCS、sqlldr导出数据到物理库表时,在控制文件中一定要在允许为空的字段上加上空字段的输出格式控制,即:NULLIF 允许为空的字段名="NULL";如:内存库表XML_USERINFO中字段PRODUCT_NAME是允许为空的,所以在写控制文件时,其在文件中应写为:PRODUCT_NAME NULLIF PRODUCT_NAME="NULL"。
           因为,如果不加入“NULLIF 允许为空的字段名="NULL"”控制,则导入到物理库表中的此字段值会为“NULL”,而非与内存库一致的空值;       
           另需注意点,在控制文件中对允许为空字段进行上述处理后,内存库中字段值为空的和字段值为“NULL“的字段在使用命令导入到物理库表中后对应字段值均会为空;
经过步骤2)和3),则前提条件准备好了;接下来进行具体的导入操作,具体如下:
在shell脚本中,按如下顺序写入内容;或在控制台上按顺序直接执行下面的语句:

经过4),则数据导入到了物理库对应表中;

说明:运行ttBulkCp或ttBulkCpCS后生成的.dump文件内容如下:

注:其中的NULL在内存库中对应字段值为空;“NULL“在内存库中对应值为字符串NULL;


原文地址:http://www.itmmd.com/201411/159.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

websphere数据源连接池也要写建议?现场事故怨谁?   上一篇
下一篇  kindediter 3.5 整合 SyntaxHighlighter 高亮插件完美解决方案

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!