zoukankan      html  css  js  c++  java
  • DB2 移动数据总结一

    数据移动参考的连接

    IMPORT
    http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0008304.html?cp=SSEPGG_9.7.0%2F3-6-2-4-58

    EXPORT
    http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0008303.html?cp=SSEPGG_9.7.0%2F3-6-2-4-36

    LOAD
    http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0008305.html?cp=SSEPGG_9.7.0%2F3-6-2-4-78

    lob export
    http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.dm.doc/doc/c0004562.html

    table export
    http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.dm.doc/doc/c0004561.html

    type table export
    http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.dm.doc/doc/c0050960.html

    LBAC-protected data export considerations
    http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.dm.doc/doc/c0024643.html

    Identity column export considerations
    http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.dm.doc/doc/c0004560.html


    移动工具
    import/export
    load

    db2look/db2move
    db2dart

    使用数据移动的场景及问题
    1.在对某表做大量修改时,特别是CR时,检查数据库的备份记录,是否有最近的备份文件,如果有,请客户确认如果出现问题是否可用;另一种,就是做数据的临时备份,这时我们需要DataMovement Tools
    如何评估表中的数据量大小

    如何方便的查看表中是否含有标识列
    db2 "select distinct identity from syscat.columns where tabname = 'XXXX'"
    
    如何方便的查看表中是否含有lob列
    db2 "select TABSCHEMA concat '.'||TABNAME from syscat.columns where typename like '%LOB' and TABSCHEMA not like '%IBM%' and not like 'SYS%'" | grep -i xxxxx
    
    
    另一种方式是查看表的定义
    db2look -d db_name -t t1 t2 -e -o db2look_tables.out;cat db2look_tables.out
    e.g. db2look -d sample -t dbv97fp7.employee   -e
    NOTE:如果在-t选项做了某表的alias,那么将不会导出数据


    2. 在跨操作系统情况下,恢复数据库,在这种情况下,无法使用offline 或online 备份文件进行数据库恢复
    似乎export 无法完成这样的工作啊,因为语法上是需要select 语句导出数据的,该如何实现的呢?
    db2look+db2move

    3. 表数据迁移,有时,客户需要将一个表中的数据迁移到另一个表中,其中表的定义可能不一致的


    标识列:
    NOTE:标识列导入导出的注意事项
    1) 在原数据中没有标识列的情况下导入到含有标识列的表
    A B C  --->  A B i1 C
    NOTE:这是原数据中的列数小于目标表中的列数的特殊情况

    2)在原数据中带有标识列的情况下导入到含有标识列的表
    A B i1 C ---> A B i1 C

    3)目标表带有 generated always 的标识列,不需要导入文件中的标识列值

    4)目标表带有 generated always 的标识列,需要使用载入原数据中标识列的值
    NOTE:普通的identity能否使用identityoverride 文件修饰符

    5)导入文件中含有标识列,但是表中不包含标识列
    NOTE:这是目标表列数小于原数据列数的特例

    生成列:
    导入注意事项:
    没有使用文件类型修饰符时,将会按照如下规则进行
    1)当数据文件中相应的行缺少生成列的值或提供了NULL值时,将创建生成列值;
    直接导入将导致生成列后的列的值,无法导入必须使用如下方法
    2)如果为生成列提供了非空值,那么将拒绝该行(SQL3550W)

    生成列与标识列有类似的问题
    导入和导出生成列同样有类似与标识列的文件修饰符 generatedignore,generatedmissing,generatedoverride
    NOTE:使用load 和文件修饰符 generatedoverride 会出现如下问题,该如何处理
    SQL0668N  Operation not allowed for reason code "1" on table "DBV97FP7.TBGE".SQLSTATE=57016 ????

    3)如果为不可空生成列创建了NULL值,例如如果将列定义为两个表列之和,但这两个表列的文件中含有NULL值,那么会发生这种情况,那么将拒绝整行(SQL0407N)

    大对象的导入导出:
    导出大对象(LOB)列的表时,默认操作是对每个LOB值导出最多32KB,以便将其与列数据的余下部分放在同一个文件中。如果要导出超过32KB的LOB值,那么应将LOB数据写至单独文件以便截断。
    要指定应将LOB写至自己的文件,可以使用lobsinfile文件修饰符。此文件类型修饰符指示EXPORT使用程序将LOB数据放置在LOBS TO 子句指定的目录中。使用LOBS TO 或LOBFILE会隐式激活lobsinfile文件类型修饰符。
    默认情况下,LOB值与导出的关系数据将写至同一路径。如果LOBS TO 选项指定了一个或多个路径,那么EXPORT使用程序将循环使用这些LOB路径,以便每个成功的LOB值写入相应的LOB文件。
    可以使用lobfile选项对输出LOB文件指定名称。如果指定了LOBFILE选项,那么LOBFILENAME的格式为lobfilespecxxx.lob,其中lobfilespec是为LOBFILE选项指定的值,而xxx是 EXPORT使用程序生存的lob文件的序号,否则,lobfilename的格式为exportfilename.xxx.lob,其中exportfilename是为EXPORT命令指定的已输出文件格式名称,而xxx是export实用程序输出的lob文件的序列号
    默认情况下,多个LOB将写至单个文件,如果将各个LOB存储在不同的文件中,可以使用lobsinfepfiles文件修饰符已将每个LOB写至单独的文件(如何解释各个LOB)


    空值:
    对于空值的处理,往往会有很多问题,比如
    1)我们在导入列是空值时,完成插入一个默认值,而非空,避免存在列有非空限制,导致数据导入失败;
    2)对于变成字符列来说 ,对于导入的数据,往往希望将字符尾部的空格自动消除掉,但是事与愿违,导入的数据将会保留尾部的null or blank;
    3)数据库默认情况下,会消除字符串前面的空格,有时候,我们希望保留,比如是名字的前面

    对于null处理数据库提供了如下文件修饰符 nullindchar striptnulls  striptblanks  keepblanks

    定界符:
    什么是定界符?
    定界符包括哪些类型,分别什么意思?  record delimiter, character delimiter, column delimiter

    对于定界符的作用,往往是避免数据库识别错误文件数据。
    1)我们的数据,有时候需要导入的数据如下
    I am 6" tall
    数据中不包含字符定界符,""是数据而不是定界符的情况;  ----这里的两种处理方式(取消字符定界符,修改字符定界符为其他)
    2)我们想导出的数据不包含字符定界符;
    3)字符定界符““与数据冲突,想改变字符定界符;
    4)"Vincent <row delimiter> is a manager", <row delimiter>
    "Vincent
    is a manager"
    "Bob
    is a employee"
    导入的数据库中;

    数据库提供如下的文件修饰符:nodoubledel,
    chardel,coldel,delprioritychar
    双字符定界符
    ""  ---解释一下双字符定界符
    字符定界符,列定界符,行定界符(记录定界符)

    PC/IXF:
    特点一:
    典型导出操作包括插入到现有表中所选数据的输出,当然也可以导出整个表,以备以后使用import重建表。这种情况,必须指定文件格式为PC/IXF,然后通过CREATE 方式创建已保存表(包括索引)。但是出现以下任何情况,某些数据将不会保存到IXF文件中

    特点二:
    该文件是二进制文件,可以跨平台使用,并且文件占用空间小。

    数据库有两个文件修饰符
    indexixf,nochecklengths

    日期格式:
    在不同平台和系统上进行数据移动时,日期格式容易出问题。
    这几个文件修饰符仅用于ASC和DEL格式
    dateformat
    datesiso
    timeformat
    timestampformat

    这两个没有研究呢
    代码页不同
    XML

    1. 原理通透 2. 思路清晰 3.操作娴熟
  • 相关阅读:
    年末反思
    Flink运行时架构
    Phoenix 启动报错:Error: ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.
    Clickhouse学习
    Flink简单认识
    IDEA无法pull代码到本地,Can't Update No tracked branch configured for branch master or the branch doesn't exist.
    第1章 计算机系统漫游
    简单的 Shell 脚本入门教程
    开源≠免费 常见开源协议介绍
    MySQL 视图
  • 原文地址:https://www.cnblogs.com/DBA-Ivan/p/4197259.html
Copyright © 2011-2022 走看看