• X impdp导数据的时候批量替换表空间的方法


     

    方法一:

    impdp导数据的时候经常会有很多表在不同的表空间的情况,如果想进行批量替换表空间,可以用%作为通配符来替换。

    remap_tablespace=%:tbs  

    ===============================================================================================================

    方法二: 

    如上的方法我在自己的机器上测试可以,但是在其他的环境上不可以正常运行。

    然后可以用其他的方法,如下:

    transform 可用在这样的场景中:

    要将SLKTESTNEW模式下的表导入到另一个库下的SH_SMCVDMS_SLK_OWSLK模式下。

    该模式下对象实际所占的大小:

    SQL> select sum(bytes)/1024/1024 from dba_segments where owner=upper('SLKTESTNEW');

    SUM(BYTES)/1024/1024

    --------------------

                11747.25   -----------很大,会计算所有hwm下的block

    导出语句:

    expdp system/1111sys directory=dmpdata SCHEMAS=SLKTESTNEW dumpfile=owslk20110630.dmp logfile=owslk20110630.log  

    导出数据后的dmp大小:

    $ du -m OWSLK20110630.DMP

    80.63   OWSLK20110630.DMP   ----很小,因为expdp只把有效block导出

    若不加transform,且导入的表空间小于前面计算的11747.25,中间报错:

    ORA-01659: unable to allocate MINEXTENTS beyond 14 in tablespace SH_SMCVDMS_SLK_OWSLK_DATA01。

    也不必为了80M的数据再加入11G的空间。那就用impdp的transform 选项 实现导入。

    impdp的transform 选项决定是否去掉ddl语句的各种存储参数

    Purpose

    Enables you to alter object creation DDL for specific objects, as well as for all applicable objects being loaded.

     

    Metadata transform to apply to applicable objects.   Valid transform keywords: SEGMENT_ATTRIBUTES, STORAGE,OID, and PCTSPACE

     

    Syntax and Description

    TRANSFORM = transform_name:value[:object_type]

    例如:transform=storage:n:table ,去掉ddl的storage参数,只对table有效,若没有table这个子句的话,就对所有对象有效,比如index

    sql_file 选项加入后只是模拟导入过程,形成sql脚本,不会真正的导入。通过脚本可查看storage选项是否存在,segment_attributes是否存在。

    使用transform可降低导入数据的存储需求,比如若源数据需要30G的表空间,但导出数据后只有300M,再导入的时候不必分配30G,由于transform起作用,把storage去掉了。

    举例:

    没指定transform,导入形成的dll

    CREATE TABLE "SH_SMCVDMS_SLK_OWSLK"."DE_DEMESSAGEIDMAP"

       (        "DEMESSAGEID" CHAR(40) NOT NULL ENABLE,

           ..................................

            "UPDATE_BY" CHAR(10)

       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

      STORAGE(INITIAL 2952790016 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645   -----先要初始化这么大的空间出来,这个不必要。若空间不足导入会终止

      PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)

      TABLESPACE "SH_SMCVDMS_SLK_OWSLK_DATA01" ;

    加入了transform=storage:n

    CREATE TABLE "SH_SMCVDMS_SLK_OWSLK"."DE_DEMESSAGEIDMAP"

       (        "DEMESSAGEID" CHAR(40) NOT NULL ENABLE,

              ..................................

            "UPDATE_BY" CHAR(10)

       ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

      TABLESPACE "SH_SMCVDMS_SLK_OWSLK_DATA01" ;   ------------把storage部分去掉了,这样可不必需要那么多的空间,按数据库默认的initial 64k.

    加入了transform=segment_attributes:n

    CREATE TABLE "SH_SMCVDMS_SLK_OWSLK"."DE_DEMESSAGEIDMAP"

       (        "DEMESSAGEID" CHAR(40) NOT NULL ENABLE,

             ..................................

            "UPDATE_BY" CHAR(10)

       ) ; ---------------这个很干净了,create table的时候都是使用数据库的默认存储参数,表空间也使用的是用户默认表空间

    ---模拟导入,形成sql脚本:

    impdp system/1111directory=dmp transform=storage:n  REMAP_SCHEMA="SLKTESTNEW:sh_smcvdms_slk_owslk"   remap_tablespace="SH_DMS_SLK_OWSGM_DATA01:sh_smcvdms_slk_owslk_data01"    remap_tablespace="SH_DMS_SLK_OWSGM_LOB01:SH_SMCVDMS_SLK_OWSLK_LOB01"    dumpfile=OWSLK20110630.DMP logfile=owslk20110702_storage_n.log  sqlfile=owslk0702_storage_n.sql

    ----真正导入:

    impdp system/1111 directory=dmp transform=storage:n  REMAP_SCHEMA="SLKTESTNEW:sh_smcvdms_slk_owslk"   remap_tablespace="SH_DMS_SLK_OWSGM_DATA01:sh_smcvdms_slk_owslk_data01"    remap_tablespace="SH_DMS_SLK_OWSGM_LOB01:SH_SMCVDMS_SLK_OWSLK_LOB01"    dumpfile=OWSLK20110630.DMP logfile=owslk20110702_storage_n.log  table_exists_action=replace

    ------ 最简单的方法:

    如果是按照用户导入的,那么需要在新服务器上新建用户,并且指定默认表空间。

    然后按照如下的方案导入,那么所有的语句都会导入到 新建用户的默认表空间中的。

    impdp system/1111 directory=dmp transform=storage:n  REMAP_SCHEMA="SLKTESTNEW:sh_smcvdms_slk_owslk"   

    dumpfile=OWSLK20110630.DMP logfile=owslk20110702_storage_n.log   transform=segment_attributes:n  table_exists_action=replace 

    ====end=====

  • 相关阅读:
    beautifulsoup的一些使用
    requests(爬虫常用)库的使用
    find a maximum product triplet in this array
    Minimum difference between two arrays
    [LeetCode] Binary Tree Upside Down
    n 刀切多少块pizza
    Biased Random Number Generator
    linked list焦点问题,面经里很多,考虑相交不相交,有环无环 + Find Leaves of Binary Tree (Java)
    replace string use another
    Union and Intersection of two sorted list
  • 原文地址:https://www.cnblogs.com/chendian0/p/14388502.html
Copyright © 2020-2023  润新知