zoukankan      html  css  js  c++  java
  • EXP AND IMP

    purpors: exp pro data to uat data

    ######for one owner table

    1. step 1 colelct dmp file

    ACCEPT v_owner PROMPT 'please input v_owner:'
    define v_owner;
    pause
    ACCEPT v_table PROMPT 'please input v_table:'
    define v_table;

    REM srdc_rman_backup_output.sql - collect RMAN information with backup.


    define SRDCNAME='EXPDP_BACKUP'

    SET MARKUP HTML ON PREFORMAT ON
    set TERMOUT off FEEDBACK off VERIFY off TRIMSPOOL on HEADING off

    COLUMN SRDCSPOOLNAME NOPRINT NEW_VALUE SRDCSPOOLNAME

    select 'SRDC_'||upper('&&SRDCNAME')||'_'||upper(instance_name)||'_'||
    to_char(sysdate,'YYYYMMDD_HH24MISS') SRDCSPOOLNAME from v$instance;

    set TERMOUT on MARKUP html preformat on
    REM
    spool &&SRDCSPOOLNAME..htm
    select '+----------------------------------------------------+' from dual
    union all
    select '| Diagnostic-Name: '||'&&SRDCNAME' from dual
    union all
    select '| Timestamp: '||to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS TZH:TZM') from dual
    union all
    select '| Machine: '||host_name from v$instance
    union all
    select '| Version: '||version from v$instance
    union all
    select '| DBName: '||name from v$database
    union all
    select '| Instance: '||instance_name from v$instance
    union all
    select '+----------------------------------------------------+' from dual
    /
    set pagesize 50000;
    set echo on;
    set feedback on;
    select directory_name,directory_path from dba_directories;

    select * from dba_registry_history;

    select count(*) from dba_objects where owner IN
    (select username from dba_users where account_status='OPEN' and username not in('SYS','SYSTEM','OPER','BACKUPDB','C##OPER','PDBADMIN'));

    select owner,object_name from dba_objects where owner IN
    (select username from dba_users where account_status='OPEN' and username not in ('SYS','SYSTEM','OPER','BACKUPDB','C##OPER','PDBADMIN'))
    and statuS='INVALID';

    select count(*),object_type,owner from dba_objects where owner IN
    (select username from dba_users where account_status='OPEN' and username not in
    ('SYS','SYSTEM','OPER','BACKUPDB','C##OPER','PDBADMIN'))
    group by object_type,owner;

    select SUM(bytes)/1024/1024 "M" from dba_segments where owner like '%DATA%';

    SELECT * FROM v$nls_parameters WHERE PARAMETER='NLS_CHARACTERSET';

    SELECT '&v_owner' from dual;
    SELECT '&v_table' from dual;

    select SUM(bytes)/1024/1024 "M" from dba_segments where owner=upper('&v_owner') and segment_name=upper('&v_table');

    select count(*) from &v_owner..&v_table;

    spool off
    set markup html off preformat off

    ###### for all owner

    REM srdc_rman_backup_output.sql - collect RMAN information with backup.


    define SRDCNAME='DB_BACKUP'

    SET MARKUP HTML ON PREFORMAT ON
    set TERMOUT off FEEDBACK off VERIFY off TRIMSPOOL on HEADING off

    COLUMN SRDCSPOOLNAME NOPRINT NEW_VALUE SRDCSPOOLNAME

    select 'SRDC_'||upper('&&SRDCNAME')||'_'||upper(instance_name)||'_'||
    to_char(sysdate,'YYYYMMDD_HH24MISS') SRDCSPOOLNAME from v$instance;

    set TERMOUT on MARKUP html preformat on
    REM
    spool &&SRDCSPOOLNAME..htm
    select '+----------------------------------------------------+' from dual
    union all
    select '| Diagnostic-Name: '||'&&SRDCNAME' from dual
    union all
    select '| Timestamp: '||to_char(systimestamp,'YYYY-MM-DD HH24:MI:SS TZH:TZM') from dual
    union all
    select '| Machine: '||host_name from v$instance
    union all
    select '| Version: '||version from v$instance
    union all
    select '| DBName: '||name from v$database
    union all
    select '| Instance: '||instance_name from v$instance
    union all
    select '+----------------------------------------------------+' from dual
    /
    set pagesize 50000;
    set echo on;
    set feedback on;
    select '+-------------dump info--------------------------+' from dual;

    select directory_name,directory_path from dba_directories;

    select * from dba_registry_history;

    select count(*) from dba_objects where owner IN
    (select username from dba_users where account_status='OPEN' and username not in('SYS','SYSTEM','OPER','BACKUPDB','C##OPER','PDBADMIN'));

    select owner,object_name from dba_objects where owner IN
    (select username from dba_users where account_status='OPEN' and username not in ('SYS','SYSTEM','OPER','BACKUPDB','C##OPER','PDBADMIN'))
    and statuS='INVALID';

    select count(*),object_type,owner from dba_objects where owner IN
    (select username from dba_users where account_status='OPEN' and username not in
    ('SYS','SYSTEM','OPER','BACKUPDB','C##OPER','PDBADMIN'))
    group by object_type,owner;

    select SUM(bytes)/1024/1024 "M" from dba_segments where owner like '%DATA%';

    SELECT * FROM v$nls_parameters WHERE PARAMETER='NLS_CHARACTERSET';

    select '+-------------tablespace info--------------------------+' from dual;
    SELECT total.tablespace_name,
    Round(total.MB, 2) AS Total_MB,
    Round(total.MB - free.MB, 2) AS Used_MB,
    Round(( 1 - free.MB / total.MB ) * 100, 2)
    || '%' AS Used_Pct
    FROM (SELECT tablespace_name,
    Sum(bytes) / 1024 / 1024 AS MB
    FROM dba_free_space
    GROUP BY tablespace_name) free,
    (SELECT tablespace_name,
    Sum(bytes) / 1024 / 1024 AS MB
    FROM dba_data_files
    GROUP BY tablespace_name) total
    WHERE free.tablespace_name = total.tablespace_name;

    select file_id,file_name,tablespace_name,autoextensible from dba_data_files;

    spool off
    set markup html off preformat off

    ########

    1.exp and imp will not create user  (all)

    2.expdp and impdp will create user (default)

     (impdp 做的时候,如果做之前没有显性删除用户(drop user),则impdp 不会自动创建user,那么也不需要重置密码 )
    3.expdp会导出DDL,并且导出表相关的LOBSEGMENT、LOBINDEX和常规的索引。
          impdp会使用DDL创建表,并且创建表上相关的索引。

    for 12c use @ to access pdb

    1.from table to table

    -> IN PROD TS

    exp TS/TEST_Data130@TSprod file=D:projectsTSTS_TS_20160908_update.dmp  log=D:projectsTSeais_all_exp_2016_09_02.log  TABLES=(owner.TS_record_his,owner.TS_record)

    ->IN UAT  (表导入前存在的 )

    imp TS/gatepassuat_data2@TSuat file=D:projectsTSTS_TS_20160908_update.dmp log=D:projectsTSTS_upd_imp_2016_09_05.log  fromuser=TS touser=TS tables=(TS_record_his,TS_record)

     ->IN UAT  (表导入前是不存在的 )

    imp TS/gatepassuat_data2@TSuat file=D:projectsTSTS_TS_20160908_update.dmp log=D:projectsTSTS_upd_imp_2016_09_05.log  fromuser=TS touser=TS 

    expdp/impdp

    -> IN PROD user:TS

    expdp system/oracle123@TSprod file=TS_TS_20160908_update.dmp  directory=TMP_DIR log=TS_all_exp_2016_09_02.log  tables=('TS.TS_record_his','TS.TS_record')

    ->IN UAT  for 12c use @ to access pdb

    impdp system/oracle123_@TSuat  directory=DUMP_DIR dumpfile=TS_TS_20160908_update.dmp  log=TS_all_imp_2016_09_02.log table_exists_action=replace remap_schema=TS:TS

    --tables=('TS_record_his','TS_record') table_exists_action=replace remap_schema=TS:TS;

    --tables=TS.TS_record_his,TS.TS_record remap_schema=TS:TS;

    -> in prod SQL> select * from dba_directories;

    OWNER                          DIRECTORY_NAME ------------------------------ ------------------------------ DIRECTORY_PATH ------------------------------------------------------------------------ SYS                            TMP_DIR D:dba mp

    SYS                            XMLDIR D:appAdministratorproduct11.2.0dbhome_1 dbmsxml

    SYS                            ORACLE_OCM_CONFIG_DIR D:appAdministratorproduct11.2.0dbhome_1/ccr/state

    OWNER                          DIRECTORY_NAME ------------------------------ ------------------------------ DIRECTORY_PATH ------------------------------------------------------------------------ SYS                            DATA_PUMP_DIR D:appAdministrator/admin/TSprod/dpdump/

    SYS                            ORACLE_OCM_CONFIG_DIR2 D:appAdministratorproduct11.2.0dbhome_1/ccr/state

    -> in UAT SQL> select * from dba_directories;

    OWNER                          DIRECTORY_NAME ------------------------------ ------------------------------ DIRECTORY_PATH -------------------------------------------------------------------------------- SYS                            DUMP_DIR D:dbadump

    SYS                            XMLDIR D:appAdministratorproduct11.2.0dbhome_1 dbmsxml

    SYS                            ORACLE_OCM_CONFIG_DIR D:appAdministratorproduct11.2.0dbhome_1/ccr/state

    OWNER                          DIRECTORY_NAME ------------------------------ ------------------------------ DIRECTORY_PATH -------------------------------------------------------------------------------- SYS                            DATA_PUMP_DIR D:appAdministrator/admin/TSuat/dpdump/

    SYS                            ORACLE_OCM_CONFIG_DIR2 D:appAdministratorproduct11.2.0dbhome_1/ccr/state

    2.from schema to schema



    -Prepare:
    c:apporacledump: datapump


    select count(*) from dba_objects where owner IN
    (select username from dba_users where account_status='OPEN' and username not in ('SYS','SYSTEM','OPER','BACKUPDB'))

    select owner,object_name from dba_objects where owner IN
    (select username from dba_users where account_status='OPEN' and username not in ('SYS','SYSTEM','OPER','BACKUPDB'))
    and statuS='INVALID';

    -charater
    SELECT * FROM v$nls_parameters WHERE PARAMETER='NLS_CHARACTERSET';   

    set NLS_LANG="AMERICAN_AMERICA.AL32UTF8"

    select SUM(bytes)/1024/1024 "M" from dba_segments where owner like '%OTD%';


    -rollout

    in prod  (if do below in pdb , make sure already create datapump  manule )

    in prod
    set NLS_LANG=AMERICAN_AMERICA.AL32UTF8

    set system=db

    expdp system/oracle123_ file=TS_TS_201702_update.dmp  directory=datapump log=TS_all_exp_2017_09_28.log  SCHEMAS='%system%usr','%system%patch','%system%query','%system%data' parallel=2





    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export user=otdb
    expdp system/oracle123_ file=TS_TS_201702_update.dmp  directory=datapump log=TS_all_exp_2017_09_28.log  SCHEMAS=$user'usr',$user'patch',$user'query',$user'data' parallel=2     



     

    in uat

    1。notice :

    如果data 用户包括sequence ,那么在目标端,导入之前,需要手工先drop sequnece ,在导入。

    脚本如下:

     spool drop_sequence.sql

    set head off feedback off
    --select 'drop SEQUENCE '||SEQUENCE_OWNER||'.'||SEQUENCE_NAME||';' from dba_sequences where ----------SEQUENCE_OWNER in ('FAMSDATA','SMASDATA');

    select 'drop SEQUENCE '||SEQUENCE_OWNER||'.'||SEQUENCE_NAME||';' from dba_sequences where SEQUENCE_OWNER like
    ('%&DATA%') and SEQUENCE_OWNER not in ('ORDDATA');


    spool off

    2。 (if do below in pdb , make sure already create datapump  manule )


    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    export user=rpms
    impdp system/sys_ file=TS_TS_201702_update.dmp directory=datapump SCHEMAS=$user'usr',$user'patch',$user'query',$user'data' table_exists_action=replace parallel=2 log=impdp.log;


     

     

    in prod

    expdp system/oracle123@testuat file=TS_TS_20160928_update.dmp  directory=DATA_PUMP_DIR log=TS_all_exp_2016_09_28.log  SCHEMAS='etestquery','testrusr','testdata' parallel=2;

    in uat

    impdp tuser/tuser file=TS_TS_20160928_update.dmp  directory=DATA_PUMP_DIR SCHEMAS='etestquery','testrusr','testdata' table_exists_action=replace parallel=2  log=TS_all_imp_2016_09_28.log;

     for 12c use @ to access pdb

    impdp tuser/tuser@pdb file=TS_TS_20160928_update.dmp  directory=DATA_PUMP_DIR SCHEMAS='etestquery','testrusr','testdata' table_exists_action=replace parallel=2  log=TS_all_imp_2016_09_28.log;

     执行@$ORACLE_HOME/rdbms/admin/utlrp.sql脚本编译数据库失效对象。

     Run the utlrp.sql script as SYS user.
    @%ORACLE_HOME%/rdbms/admin/utlrp.sql

    3.ps

    使用imp进行数据导入时,若表已经存在,要先drop掉表,再进行导入。

    而使用impdp完成数据库导入时,若表已经存在,有四种的处理方式:

    1)  skip:默认操作

    2)  replace:先drop表,然后创建表,最后插入数据

    3)  append:在原来数据的基础上增加数据

    4)  truncate:先truncate,然后再插入数据

    notice :

    如果data 用户包括sequence ,那么在目标端,导入之前,需要手工先drop sequnece ,在导入。

    脚本如下:

     spool drop_sequence.sql

    set head off feedback off
    select 'drop SEQUENCE '||SEQUENCE_OWNER||'.'||SEQUENCE_NAME||';' from dba_sequences where SEQUENCE_OWNER in ('FAMSDATA','SMASDATA');
    spool off

    6.

    只导入用户下对象的元数据
    impdp bys/bys schemas=bys  directory=dir_dp file=bys5.dmp logfile=bys6.log content=metadata_only
    只导入用户下对象的数据
    impdp bys/bys schemas=bys  directory=dir_dp file=bys5.dmp logfile=bys7.log content=data_only
    导入用户下所有对象及数据:  --不写content=,默认就是ALL
    impdp bys/bys schemas=bys  directory=dir_dp file=bys5.dmp logfile=bys8.log

    7.for 12c

    SQL> select name from v$datafile;

    NAME
    --------------------------------------------------------------------------------
    /centrproddb/data/centrprod/system01.dbf
    /centrproddb/data/centrprod/pdbseed/system01.dbf
    /centrproddb/data/centrprod/sysaux01.dbf
    /centrproddb/data/centrprod/pdbseed/sysaux01.dbf
    /centrproddb/data/centrprod/undouser01.dbf
    /centrproddb/data/centrprod/users01.dbf
    /centrproddb/data/centrprod/penrsprod/system01.dbf
    /centrproddb/data/centrprod/penrsprod/sysaux01.dbf
    /centrproddb/data/centrprod/penrsprod/penrsprod_users01.dbf
    /centrproddb/data/centrprod/pipamprod/system01.dbf
    /centrproddb/data/centrprod/pipamprod/sysaux01.dbf

    NAME
    --------------------------------------------------------------------------------
    /centrproddb/data/centrprod/penrsprod/enrs_data_f01.dbf
    /centrproddb/data/centrprod/penrsprod/enrs_idx_f01.dbf
    /centrproddb/data/centrprod/pipamprod/ipam_data_f01.dbf
    /centrproddb/data/centrprod/pipamprod/ipam_idx_f01.dbf
    /centrproddb/data/centrprod/pipamprod/test.dbf

    16 rows selected.


    SQL> select file_name from dba_data_files;

    FILE_NAME
    --------------------------------------------------------------------------------
    /centrproddb/data/centrprod/system01.dbf
    /centrproddb/data/centrprod/sysaux01.dbf
    /centrproddb/data/centrprod/undouser01.dbf
    /centrproddb/data/centrprod/users01.d

    --exp 带有query 条件的查询 ,使用parfile ,可以防止query 条件查询 导致的 unix 命令行无法识别的报错。

    step 1:

    vi /tmp/test.par

    userid=dbdata/dbyida_01
    file=/dbuatdblog/table_2017.dmp
    log=/dbuatdblog/exp2017.log
    tables=db_CONFIRMED_GATE_MOVEMENT
    query="where to_char(LAST_UPD_DATE,'yyyy-mm-dd') >= '2017-06-01'"

    step 2: 

    exp parfile=/tmp/test.par

    ref

    http://blog.csdn.net/kimsoft/article/details/5720814

    ###new  无需 expdp ,直接走网络impdp

    drop directory schema_imp;


    connect / as sysdba
    create directory schema_imp as '/db/db01/db_impdp';

    grant read,write on directory schema_expdp   to public;

    impdp_schemas.par:
    userid='/ as sysdba'
    directory=schema_imp
    dumpfile=expdp_schemas_%U.dmp
    logfile=impdp_schemas.log
    parallel=6
    schemas=BBSP,BBSPODS,BCDPETL,DBMONOPR,DBMGR,OVSEE
    content=all
    network_link=dblink_migup


    --- 监控数据库impdp 任务的进度,查看表空间的进度
    select * from dba_datapump_jobs;
    SYS_IMPORT_SCHEMA_02

    ####sample 1


    1.puserdb03 /usr/user/data/dump
    select directory_name,directory_path from dba_directories;
    SELECT * FROM v$nls_parameters WHERE PARAMETER='NLS_CHARACTERSET';

    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK


    userid='/ as sysdba'
    directory=datapump
    dumpfile=expdp_useropr_log_%U.dmp
    logfile=expdp_useropr_log.log
    parallel=4
    filesize=10240M
    schemas=useropr
    content=all

    expdp parfile=/usr/user/data/dump


    2.root@pnuserdb01

    导入数据前关闭约束和触发器,不关闭的话:有可能报错 ,感谢 

     使用数据泵导入数据,导入过程中没有任何错误,导入的记录数完全正常,但应用就是无法使用,取不到数据,找了很久都没找到原因,最后,发现是由于序列的问题引起的,发现导出和导入的值不一样,通过与开发沟通才明白,因为在导入数据时要对一些字段定义做了修改,所以先导入空表,然后再导入数据的,在向表插入数据时会插入序列,而序列是由触发器来产生的,从而导致两边的序列值不一致,引起记录的值有差异,找到原因就好办了,在导入数据前关闭所有的约束和触发器,
    SQL>set heading off
    SQL>select 'alter table '||table_name||' disable constraint '||constraint_name||';' from user_constraints;
    SQL>alter table table_name disable constraint constraint_name;

    SQL>select 'alter trigger '||trigger_name||' disable;' from user_triggers;
    SQL>alter trigger trigger_name disable;

    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8


    cat impdp_usermove.par
    userid='/ as sysdba'
    directory=datapump
    dumpfile=expdp_useropr_log_%U.dmp
    logfile=impdp_usermove_log.log
    parallel=4
    REMAP_SCHEMA=useropr:usermove
    content=all
    table_exists_action=truncate


    impdp parfile=/usr/nuser/data/dump

    --done
    hagrp -freeze sg_nuser_db -sys pnuserdb01

    -undone
    hagrp -unfreeze sg_nuser_db -sys pnuserdb01

  • 相关阅读:
    PHP a[n+1]共有n+1个数,数值范围是1~n,a中有1个数重复,其他各不相同,找出这个重复的数
    PHP 逆转字符串与逆转句子
    根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数
    PHP 将数组转换为完全二叉树
    PHP 查找随即数组中的最小的k个数
    PHP 逆转单链表
    TSQL 存储过程创建 PDF 格式文件(报表)
    TSQL: 三个通用的与日期相关的,辅助按周(星期日是周的最后一天)汇总的自定义函数
    收藏夹
    十行代码搞定 "冒泡排序"
  • 原文地址:https://www.cnblogs.com/feiyun8616/p/5872215.html
Copyright © 2011-2022 走看看