EXPDP 数据泵介绍

数据泵可以高效备份,复制,保护和传输大量得数据和元数据。可以通过下列方式使用数据泵:
1.对整个数据库或数据自己进行实时逻辑备份;
2.为测试或开发,复制整个数据库或数据子集;
3.快速生成用于重建对象的DDL代码;
4.通过旧版本导出数据,然后像新版本导入数据的方式,升级数据库。

–数据泵包含了 exp/imp实用程序的功能:
1.高效处理大量数据的功能, 可以高效导出和导入大量数据。
2.交互式命令行使用程序,使用它可以先断开连接,然后恢复连接活动的数据泵作业。
3.在不创建数据泵文件的情况下,从远程数据库导出大量数据,并将这些数据直接导入本地数据库。
4.通过导入和导出工作,在运行时更改方案,表空间,数据文件和存储位置;
5.精细过滤对象和数据;
6.对目录对象应用受控安全模式(通过数据库);
7.高级功能,如压缩和加密。
–数据泵的结构
数据泵由以下组件构成:
1.expdp (数据泵导出实用程序);
2.impdp (数据泵导入实用程序);
3.DMBS_DATAPUMP软件包(数据泵API);
4.DBMS_METADATA软件包(数据泵元数据API);
在导出和导入数据和元数据时,expdp 和 impdp 实用程序会使用内置的DBMS_DATAPUMP 和 DBMS_METADATA 软件包。DBMS_DATAPUMP软件包可以在不同的数据库环境之间移动整个数据库或数据子集。DBMS_MATEDATA软件包可以导出和导入数据库对象的信息。
当启动数据泵导出和导入作业时,数据库服务器上就会初始化一个OS主进程。这个主进程的名称格式为 ora_dmNN_。在Linux和Unix系统中,可以使用ps命令查看进程。

ps -ef |grep ora_dm

因为数据泵使用其内部的PL/SQL代码执行操作,所以需要使用共享池中的一些内存加载PL/SQL软件。如果共享池中空间不足,系统会提示
ORA-04031:unable to allocate bytes of shared memory… 错误提示,并中断数据泵。当出现该错误时,可以将数据库参数SPARED_POOL_SIZE设置为50M以上。
–执行导出操作
在运行数据泵导出作业是需要进行环境配置:
1.创建指向OS目录的数据库目录对象,这个OS目录用于读/写数据泵文件;
2.为执行导出/导入操作的数据库用户赋予读写目录对象的权限;
3.在OS命令提示符界面中运行expdp实用程序。

 --创建数据库目录对象
    create directory dp_dir as '/u02/dumpfile';
    --查看目录对象的细节
    select owner,directory_name,directory_path from dba_directories;
    
    --为用户赋予访问目录对象的权限
    grant read,write on directory dp_dir to scott;
    
    --执行导出操作
    create table inv(inv_id number);
    insert into inv values (1);
    
    --使用非SYS用户导出这个表。
    expdp scott/tiger directory=dp_dir tables=inv dumpfile=exp.dmp logfile=exp.log
    

–导入表
导入处理过程和导出处理过程类似:
1.创建指向OS目录的数据库目录对象,这个OS目录用于写/读数据泵文件;
2.为执行导出/导入操作的数据库用户赋予读写目录对象的权限;
3.在OS命令提示符界面中运行impdp实用程序。

``

--删除INV表
    drop table inv purge;
    
    --通过导出的数据泵文件重建INV表;
    impdp scott/tiger directory=dp_dir dumpfile=exp.dmp logfile=imp.log
    
    --使用参数文件
    创建 exp.par 参数文件
    vi exp.par 
    
    userid=scott/tiger
    directory=dp_dir
    dumpfile=exp.dmp
    logfile=exp.log
    tables=inv
    reuse_dumpfiles=y
    
    使用PARFILE命令行选项引用参数文件,执行导出操作:
    expdp parfile=exp.par
    

–深入了解导出和导入操作
数据泵模式:
1.全数据库级;
2.方案级;
3.表级;
4.表空间级;
5.可传输表空间级;

–全数据库级导出
全库导出信息由下列部分组成:
1.用于重建表空间,用户,表,索引,约束,触发器,序列,以存储的PL/SQL脚本等元素的所有DDL语句;
2.所有表中的数据;(SYS用户的表除外)
将FULL参数设置为Y可以执行全库导出操作,必须使用拥有DBA权限或者DATAPUMP_EXP_FULL_DATABASE角色的用户才能执行该操作。

expdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=full.log full=y

–全库导出不会导出数据库中的所有元素
1.SYS方案中的对象不会导出。如果考虑可以将SYS方案中对象从一个数据库中导出,然后将他们导入另一个数据库会出现怎样的情况?SYS方案会覆盖数据字典内部
的表/视图,因而 破坏数据库。因此,数据泵不会导出SYS方案中的对象。
2.不会导出索引数据,更确切的说,不会导出用于重建索引的索引DDL代码。

--全库导入
impdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=fulllog.dmp full=y

–执行全库导入需要注意下列几点;
1.导入作业会先尝试重建所有表空间 。如果表空间已经存在,或者表空间依存的目录路径不存在,那么创建表空间的操作就会失败,导入作业执行下一个任务。
2.导入作业会更改SYS和SYSTEM用户账号,使它们包含导出的密码。因此,对产品系统执行了全库导入操作后名为,为谨慎起见,应为新环境更改密码。
3.导入作业会创建导出文件中的所有用户。如果某个用户已经存在,系统就会提示错误信息,而导入作业会执行下一个任务。
4.从数据库导出的用户会使用原来的密码,你可以根据自己的安全标准,更改这些密码。
5.表会被重建。如果表已经存在并含有数据,你必须设置导入作业处理该情况的方法。可以设置导入作业跳过,替换或截断该表,也可以设置将数据附加到该表中。
6.当所有表都重建完并加载了数据后,导入作业会创建相关索引。
7.在能够获得统计数据的情况下,导入作业还会导入统计数据。而且,导入作业还会实例化对象权限。

   --方案级
    方案级导出操作经常用户将一个或多个用户从一个环境复制到另一个环境。
    expdp scott/tiger directory=dp_dir dumpfile=scott.dmp logfile=scott.log
    --与仅导出运行导出作业的用户不同,通过SCHEMAS参数可以导出多个用户
    expdp scott/tiger directory=dp_dir dumpfile=user.dmp logfile=user.log schemas=scott,cmrmapp;
    
    --引用方案级数据泵文件可以执行方案级导入操作:
    impdp scott/tiger directory=dp_dir dumpfile=scott.dmp logfile=scott.log
    

–在执行方案级导入操作时,需要注意下列几点:
1.方案级导出文件中不含有表空间
2.导入作业会重建数据泵文件含有的所有用户。如果用户已经存在,系统会显示错误提示,而导入作业会继续执行下一个任务。
3.导入作业会通过数据泵文件重置用户的密码。
4.用户拥有的表会被导出并加载数据。如果表已经存在,则必须使用 TABLE_EXISTS_ACTION 参数设置数据泵处理该情况。

  在使用全库导出数据泵文件时,也可以执行方案级导入操作。要做到这一点,可以设置从全库导出文件提取哪个用户
    impdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=user.log schemas=scott,cmrmapp
    
  --表级
    TABLES参数可以使用数据泵操作特定的表:
    expdp scott/tiger directory=dp_dir dumpfile=tables.dmp logfile=tables.log tables=emp,test
    impdp scott/tiger directory=dp_dir dumpfile=tables.dmp logfile=tables.log --导入时可有可无 tables=emp,test
    在使用全库导出或者方案级导出数据泵文件时,也可以执行表级导入操作。要做到这一点,应设置从全库导出或者方案导出数据泵文件提取哪些表:
    impdp  scott/tiger directory=dp_dir dumpfile=full.dmp logfile=full.log tables=scott.emp
 --表空间级
 --表空间级导出和导入作业可以操作特定表空间中的对象。
    expdp scott/tiger directory=dp_dir dumpfile=users.dmp logfile=users.log tablespaces=users
    --利用表空间级导出文件,可以执行表空间级导入操作:
    impdp scott/tiger directory=dp_dir dumpfile=users.dmp logfile=users.log --导入时可有可无 tablespaces=users
    --设置TABLESPACES参数可以使用全库导入文件,执行表空间级导出操作:
    impdp scott/tiger directory=dp_dir dumpfile=full.dmp logfile=fullimp.log tablespaces=users

    表空间级导入操作会创建表空间含有的所有表和索引,该操作不会重建表空间本身。
    

–传输数据
数据泵的主要作用之一时将数据从一个数据库复制到另一个数据库。通常,源数据库和目标数据库会相距数千公里。数据泵提供了多种强大,高效的复制数据功能。
1.网络连接。
2.复制数据文件(可传输表空间);
3.外部表。

  --直接通过网络执行导出和导入操作
    产品库环境配置: IP:10.1.29.252    端口:1521   SID:ORCL
    产品库环境部署:
    grant dba to cmrmapp identified by acca;
    grant dba to cmrmcps identified by acca;
    grant dba to cmrmdebug identified by acca;

    创建测试表并插入数据:
    create table cmrmapp.emp as select * from scott.emp;
    create table cmrmcps.emp as select * from scott.emp;
    create table cmrmdebug.emp as select * from scott.emp;

产品库中含有用户 CMRMAPP,CMRMCPS和CMRMDEBUG,需要将这些用户移动到测试库,并将它们重命名为TESTAPP,TESTCPS和TESTDEBUG。
1.在测试库中创建要导入的用户

 --测试库环境部署
    grant dba to testapp identified by acca;
    grant dba to testcps identified by acca;
    grant dba to testdebug identified by acca;
    
    2.在测试库中创建指向产品数据库的链接(DBLINK)。用户必须拥有DBA角色:
    create database link dk connect to scott identified by tiger using '10.1.39.252:1521/orcl';
   
    3.创建指向存储日志目录的目录对象
    create or replace directory engdev as '/u02/dumpfile';
    
    4.在测试库服务器上运行导入命令,引用 NWTWORK_LINK指定远程数据库。
    impdp scott/tiger directory=engdev network_link=dk schemas='CMRMAPP,CMRMCPS,CMRMDEBUG' remap_schema='CMRMAPP:TESTAPP,CMRMCPS:TESTCPS,CMRMDEBUG:TESTDEBUG' LOGFILE=DEV.log
   /*注意   创建DBLINK的用户要和impdp的用户一致。会提示
    ORA-39001: 参数值无效
    ORA-39200: 链接名称 "dk" 无效。
    ORA-02019: 未找到远程数据库的连接说明*/
    
    --验证结果
    select * from testapp.emp;
    select * from testcps.emp;
    select * from testdebug.emp;
       

–复制数据文件
Oracle 提供了在数据库之间复制文件的机制,将其与数据泵一起是哦那个可以传输相关元数据。这称为可传输表空间功能。完成该任务的时间取决于将数据文件复制到目器所需的时间。该技巧适用于在DSS和数据仓库环境中移动数据。

实现可传输表空间步骤:
1.确保表空间具有独立性,常见的违反独立性规则的情况:
(1).表空间中的索引指向了不在传输之列的表空间中的表;
(2).表空间中表的外键约束用了不在传输之列的表空间的表的主键。

-- 查看需要传输表空间是否违反了独立性规则:
   exec dbms_tts.transport_set_check('U02',true);
   --查看违反规则的情况:
   select * from transport_set_violations;
   

–如果Oracle检测到了违反独立性规则的情况,将显示
no rows selected

如果检测到了违反独立行规则的情况,如在表空间表上创建的索引不会被传输,那么就必须重建被传输的表空间中的索引。

  2.将要传呼的表空间设置为只读模式:
   alter tablespace cmrm_dat  read only;
   alter tablespace cmrm_idx read only;
   3.使用数据泵导出这些表空间中的元数据
   expdp scott/tiger directory=dp_dir dumpfile=trans.dmp transport_tablespaces=CMRM_DAT,CMRM_IDX

4.将数据泵导出文件复制到目标服务器
5.将数据文件复制到目标数据库,将这些文件存储在目标服务器上的目录中。文件名和目录路径必须与下一步骤中导入命令使用的文件名和目录路径匹配。

   scp /u02/datafile/cmrm_dat.dbf oracle:10.1.39.254:/u02/datafile/cmrm_dat.dbf
   scp /u02/datafile/cmrm_idx.dbf oracle:10.1.39.254:/u02/datafile/cmrm_idx.dbf

   6.将元数据导入目标库。
 impdp scott/tiger directory=dp_dir dumpfile=trans.dmp transport_datafiles=/u02/datafile/cmrm_dat.dbf,/u02/datafile/cmrm_idx.dbf

导入数据后验证表空间信息和数据:

   select tablespace_name,status from user_tablespaces;

发现导入后得表空间也是read only,将状态改成 read write;

   alter tablespace cmrm_dat read write;
   alter tablespace cmrm_idx read write;
   

–管理存储方式得功能

 --导出表空间元数据
   expdp scott/tiger directory=dp_dir dumpfile=inv.dmp  full=y include=tablespace
   --sqlfile 参数可以查看导出表空间的DDL代码
   impdp scott/tiger directory=dp_dir dumpfile=inv.dmp sqlfile=tbsp.sql
   
   --设置不同的数据文件路径和名称
   userid=scott/tiger 
   directory=dp_dir 
   dumpfile=inv.dmp 
   full=y 
   include=tablespace:"like 'CMRM%'" 
   remap_datafile="'/u01/app/oracle/oradata/ORCL/datafile/cmrm_inx.dbf','/u02/datafile/cmrm_inx.dbf'"
   remp_datafile="'/u01/app/oracle/oradata/ORCL/datafile/cmrm_dat.dbf','/u02/datafile/cmrm_dat.dbf'"
   
   impdp parfile=imp.par
   
   --更改数据库文件的尺寸
   userid=scott/tiger 
   directory=dp_dir 
   dumpfile=inv.dmp 
   full=y 
   include=tablespace:"like 'CMRM%'" 
   transform=pstspace:20
   
   impdp parfile=imp.par

   --更改段和存储属性
   删除段属性:
   impdp scott/tiger directory=dp_dir dumpfile=inv.dmp transform=segment_attributes:n
  
   使用STROAGE:N选项进删除存储子句:
   impdp scott/tiger directory=dp_dir dumpfile=inv.dmp transform=stroage:n
   

–过滤数据库对象
数据泵提供了大量过滤数据和元数据的机制。通过下列方式们可以调整数据泵导出和导入的内容:
1.query 参数可以导出或导入数据子集;
2.sample 参数可以导出表中一定百分比的行;
3.content 参数可以设置在导出和导入内容中,包含或不包含的数据和元数据
4.exclude 参数可以设置排除导出和导入内容之外的对象;
5.include 参数可以设置被包含导出和导入内容中的对象
6.schemas 之类的参数,可以仅操作数据库对象的某个子集

–query 参数
使用QUERY参数可以设置数据泵仅向数据泵文件写入符合特定条件的行。在重建测试环境和仅需要复制数据自己的情况中,就需要这样做。/注意:该参数会无视外键约束,
因此不要在不考虑父表-字表关系的情况下,盲目限定数据子集。
/
这个查询子句是合法的ssql子句。该查询必须房子啊双引号或者单引号中。建议使用双引号,因为可能需要使用单引号处理VARCHAR2数据。还应该使用参数文件,以统一
各种OS解析引号的方式。

   --生成测试数据
   create table inv (inv_id number);
   create table reg (reg_amg varchar2(10));
   insert into inv values (1);
   insert into inv values (2);
   insert into reg values ('a');
   insert into reg values ('b');
   commit;
   --生成 exp.par文件
   userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   tables=inv,reg
   query=inv:"where inv_id=1"
   query=reg:"where reg_amg ='a'"
   
   --删除表
   drop table inv purge;
   drop table reg purge;
   
   --生成 imp.par文件
   userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   tables=inv,reg
   
   --验证结果
   select * from inv;
   select * from reg;
   

–按百分比导出数据
sample=<>

  --如果想要从表中导出10%的数据
   expdp scott/tiger directory=dp_dir tables=inv sample=10 dumpfile=inv.dmp
   --导出多张表,但是单个表或者个别表导出部分数据
   expdp scott/tiger directory=dp_dir tables=inv,reg sample=inv:10 dumpfile=inv.dmp
   

–从导出文件排除对象
EXCLUDE 参数可以使数据泵不导出指定对象。查看那些对象类型可以被过滤,可以通过 DATABASE_EXPORT_OBJEXTS,SCHEMA_EXPORT_OBJECTS或TABLE_EXPORT_OBJEXTS视图
中的OBJECT_PATH列。

   select object_path from database_export_objects where object_path not like '%/%';

–在导出表时,不导出索引和权限

   expdp scott/tiger directory=dp_dir dumpfile=inv.dmp tables=inv exclude=index,grant

–NAME_CLAUSE 选项可以进行更精细得过滤。EXCLUDE参数得NMAE_CLAUSE选项可以设置SQL过滤器。要从导出或导入内容种排除名称以INV开头得索引:

   userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   tables=inv
   exclude=index:"like 'INV%'"

如果使用这种方式排除某个用户,系统会显示错误提示。因为导出操作的默认模式时方案级,而数据泵不会同事及排除又包含某个方案。如果要将这个方案排除导出文件,
应先将导出操作设置为全库模式,然后在排除该方案。

 --错误语法
   userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   exclude=schema:"='SCOTT'"
   --更改后
   userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   exclude=schema:"='SCOTT'"
   full=y
   
   --排除统计数据
   userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   tables=inv
   exclude=statistics

–如果尝试从最初没有半酣统计数据的数据泵文件中排除统计数据,系统就会显示下面的错误:
ORA-39168:Object path statistics was not found.
–如果导出数据泵文件的对象从来没有生成过统计数据,系统也会显示上述错误提示。

–仅在导出文件中包含指定对象
INCLUDE 参数可以使用数据泵仅在导出文件包含指定的数据库对象。
–只导出某个用户的过程和函数:

  userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   tables=inv
   include=function,procedure

–在使用INCLUDDE参数时,还可以设置仅导出指定的PL/SQL对象;

 userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   include=function:"='TEST_SUB'"
   

–当仅导出指定的PL/SQL对象时,因为需要避免各种OS使用不同方式解析引号的问题,建议使用参数文件。在使用参数文时,无需担心不同OS的不同解析方式。

  userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   include=function:"='FUN_TEST'",procedure:"='PRO_TEST'"

–如果设置的对象不存在,数据泵会报错但会继续执行导出操作:
ORA-39168: Object path FUNCTION was not found;

–导出表,索引,约束和触发器DDL
要从数据库种导出表,索引,约束和触发器的DDL,可以使用全库导出模式,设置 CONTENT=METADATA_ONLY 并在导出内容中仅包含表:

   userid=scott/tiger
   directory=dp_dir
   dumpfile=inv.dmp
   content=metadata_only
   full=y
   include=table

–导入排除对象和导导入内容包含对象与导出语法一致。

–常见数据泵任务
–估算导出作业的尺寸
如果导出大量的数据,在运行导出命令前应估算数据泵文件的尺寸。这样做的原因时估算导出作业的要求空间。
要估算该尺寸,可以使用EXTIMATE_ONLY参数:

   expdp soctt/tiger estimate_only=y full=y logfile=n

–列出数据泵文件的内容

   impdp scott/tiger directory=dp_dir dumpfile=inv.dmp sqlfile=inv.sql

–当在导入操作中使用sqlfile选项时,impdp进程不会导入任何数据;它金辉创建含有导入进程运行的sql命令的文件。有时生成sql文件可能更方便:
1.在运行导入操作前预览并验证sql语句
2.手动运行sql文命令,陈丛间数据库对象;
3.捕捉用于重建数据库对象的sql代码

–克隆用户
当需要将用户及其对象和数据移动到其他数据库时,重命名用户时迁移操作必不可少的部分。先创建方案及导出文件,时其中含有你想要克隆的用户。

   expdp scott/tiger directory=dp_dir schemas=inv dumpfile=inv.dmp

可以使用数据泵导入用户。如果你想讲这个用户移动到其他数据库,可以将数据泵文件复制到目标数据库,并使用REMAP_SCHEMA参数为该用户创建副本。

   impdp scott/tiger directory=dp_dir remap_schemas=scott:testapp dumpfile=inv.dmp

–创建一致的导出文件
一致到的导出文件是指,导出文件中的所有数据都具有一致的时间或SCN。当导出含有许多附表和字表的活动数据库时,应确保获得数的一致性快照。
FLASHBACK_SCN 和 FLASHBACK_TIME 参数可以创建一致导出文件。首先要确定SCN的当前的值,

   select current_scn from v$database;

–使用 FLASHBACK_SCN参数,为全库导出创建一致性导出文件:

   expdp scott/tiger directory=dp_dir full=y flashback_scn=2767443 dumpfile=full.dmp

–在对象已经存在的情况下执行导入操作
在导出和导入数据时,经常需要向已经含有对象(表,索引等)的方案中导入对象。在这累情况中,应该导入数据并是数据泵不创建已经臣在的对象。
TABLE_EXISTS_CTION 和 CONTENG, TABLE_EXISTS_CTION选项,使数据泵向已经存在的表中附加数据。还可以利用CONTENT=DATA_ONLY选项,可以使数据
泵不运行创建对象的DDL代码(仅加载数据)。

  impdp scott/tiger directory=dp_dir dumpfile=inv.dmp table_exists_action=append content=data_only
    

–重命名表
目标方案中可能又与导入表同名的表,REMAP_TABLE参数可以在导入时重命名表。下面的例子将用户SCOTT的INV表导入,并重命名为用户的INVEN表:

   impdp scott/tiger directory=dp_dir dumpfile=inv.dmp tables=scott.inv remap_table=scott.inv:inven

–使用这个语法不能在处理非同名用户时重命名表。在导入时,最终会将SCOTT.INV重命名成CMRMAPP,会引起混乱。

  impdp scott/tiger directory=dp_dir dumpfile=inv.dmp tables=scott.inv remap_table=scott.inv:cmrmapp.inven
  
   --正确语法
   impdp scott/tiger directory=dp_dir dumpfile=inv.dmp tables=scott.inv,cmrmapp.inven remap_schema=scott:cmrmapp--  remap_table=inv:inven
 
   --不创建日志文件
   expdp scott/tiger directory=dp_dir tables=inv nologfile=y

–使用并行机制
PARALLEL参数能够使Oracle以并行方式执行数据泵作业。例如,如果服务器上有4块CPU,可以通过PARALLEL参数将并行度设置为4:

   expdp scott/tiger parallel=4 dumpfile=exp.dmp directory=dp_dir full=y

–要最大成都的利用并行功能,应确保在导出时设置了多个文件。

   expdp scott/tiger parallel=4 dumpfile=exp1.dmp,exp2.dmp,exp3.dmp,exp4.dmp directory=dp_dir full=y

–还可以使用替换变量%U,使数据泵自动创建符合并行度的数据泵文件。%U替换变量的其实值为01,并随着数据泵文件数量的增加而增加。

   expdp scott/tiger parallel=4 dumpfile=exp%U.dmp directory=dp_dir full=y

–在通过导出文件执行导入操作时,既可以单独设置数据泵文件,也可以使用由%U变量创建的数据泵文件。

   impdp scott/tiger parallel=4 dumpfile=exp%U.dmp

–Oracle公司建议不要使用过大的并行度,该值不应该大于服务器上CPU数量的两倍。
还可以在运行导出和导入作业时修改并行度。应先在作业中附加命令交互模式。然后,使用PARALLEL选项,attach设置 作业名称

–重用导出文件名称
默认情况下,数据泵不会覆盖已经存在的数据泵文件。
如果使用相同的目录和相同的数据泵文件名称,系统就会显示下列错误:
ORA-31641:unable to create dump file ‘/u02/dumpfile/’
可以为作业设置新的数据泵文件,野可以使用REUSE_DUMPFILES参数直接使用数据泵覆盖现存的数据泵文件:

   expdp scott/tiger direccotry=dp_dir tables=inv dumpfile=inv.dmp reuse_dumpfiles=y

–创建处理日常任务的DDL文件
在数据库环境中,有时无法预料数据库对象的更改方式。拥有产品数据库用户密码的开发人员可能会在数据库运行时做出改改操作,并且不通知其他人员他所做的更改。
DBA在处理问题时,可能会不遵守标准处理过程,对对象做出了更改。并且不知道哪里做了更改。

 写一个简单的SHELL脚本,线虫数据库导出了元数据,然后使用数据泵通过导出文件创建一个DDL文件:
   #!/bin/bash
   #更新下系统环境变量
   source /home/oracle/.bash_profile
   #
   DAY=`date +%Y_%m_%d`
   SID=ORCL
   #-------------------------------------
   #导出DLM语句
   expdp scott/tiger dumpfile=${SID}.${DAY}.dmp content=metadata_only \
   directory=dp_dir full=y logfile=${SID}.${DAY}.log
   #-------------------------------------
   #生成SQL文件
   impdp scott/tiger dumpfile=${SID}.${DAY}.dmp directory=dp_dir sqlfile=${SID}.${DAY}.sql logfile=${SID}.${DAY}.sql.log
   #
   exit 0
   

–将视图导出为表
Oracle Database 12c 开始,可以将视图导出,然后通过导入操作将其创建为表。
VIEWS_AS_TABLES参数可以将视图导出为表结构:

   expdp scott/tiger directory=dp_dir dumpfile=v.dmp views_as_tables=v_test

–导入

   impdp scott/tiger directory=dp_dir dumpfile=v.dmp 

–如果仅想导入单表

   impdp scott/tiger directory=dp_dir dumpfile=v.dmp remap_table=v_test:tv_test

–命令行互交模式
数据泵提供了命令行互交模式,使用它可以监控数据泵作业的状态,还可以在运行作业时修改作业的属性。命令行交互模式对运行时间较长的数据泵操作最为有用。在这种
模式中,还可以停止,重启和种植正在运行的作业

–进入命令交互模式
1.在使用expdp和impdp启动的数据泵作业中,按Ctrl+C组合键;
2.对正在运行的作业应用ATTACH参数
输入EXIT推出命令行交互模式

–附加正在运行的作业
数据泵的一个强大功能是可以附加正在运行的作业,并查看他的进度和状。如果有DBA特权账号,即使你不是作业的所有者,也可以附加作业。ATTACH参数可以附加作业。
在附加作业前,必须先确定数据泵作业的名称。

   select owner_name,operation,job_name,state from dba_datapump_jobs;

–用户SCOTT可以直接辅导导出作业上1

   expdp scott/tiger attach=SYS_EXPORT_FULL_05

–如果不是该作业的拥有着,可以设置所有者名称和作业名称附加作业:

   expdp system/u02 attach=SCOTT.SYS_EXPORT_FULL_05

–输入 STATUS命令查看当前附加作业的状态

–停止和重启作业
使用STOP_JOB参数停止作业

   Import> stop_job

输出结果

   Are you sure you wish to stop this job ([yes]/no):

输入yes停止作业,还可以设置立即停止:

   stop_job=immediate

在使用IMMEDIATE选项停止作业时,作业中可能还有未完成的任务。要重启作业,可进入命令行交互模式,并执行START_JOB

   Import> start_job

如果要在终端上继续显示日志,可执行continue_client命令

   Import> continue_client

–终止数据泵作业

   Import> kill_job

输出结果

   Are you sure you wish to stop this job ([yes]/no):

输入yes会永久终止作业。数据泵会直接删除作业,并删除运行导出和导入操作用户中的相关状态表。

–数据字典视图
确定数据泵作业是否正在运行的一个快速方法,是查询DBA_DATAPUMP_JOBS视图,查找STATE列职位EXECUTING的作业:

   select job_name,operation,job_name,state from dba_datapump_jobs;

利用DBA_DATAPUMP_SESSIONS视图检查会话信息:

   select sid,serial#,username,process,program from v$session s ,dba_datapump_sessions d where s.SADDR =d.saddr
   

–查询再整运行作业的状态:
当启动数据泵作业时,Oralce会在运行改作业的用户中自动创建一个状态表。该表的名称由正在运行的导出作业类型决定。

  select name,object_name,total_bytes/1024/1024 t_m_bytes,job_mode,state,to_char(last_update,'yyyy-mm-dd hh24:mi')
   from SYS_EXPORT_FULL_05 where state='EXECUTING';
   
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值