008-2.数据库管理-expdp&impdp

 

我 的 个 人 主 页:???? 失心疯的个人主页 ????
入 门 教 程 推 荐 :???? Python零基础入门教程合集 ????
虚 拟 环 境 搭 建 :???? Python项目虚拟环境(超详细讲解) ????
PyQt5 系 列 教 程:???? Python GUI(PyQt5)文章合集 ????
Oracle数据库教程:???? Oracle数据库文章合集 ????
优 质 资 源 下 载 :???? 资源下载合集 ????

优 质 教 程 推 荐:???? Python爬虫从入门到入狱系列 合集????

expdp和exp的区别
  • 在10g之前,传统的导出和导入分别使用EXP工具和IMP工具,从10g开始,不仅保留了原有的EXP和IMP工具,还提供了数据泵导出导入工具EXPDP和IMPDP:
    • 1、EXP和IMP是客户端工具程序,它们既可以在可以客户端使用,也可以在服务端使用。
    • 2、EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用,客户端只能用来连接服务器启动导入导出操作,导出文件只存储在服务端。
    • 3、IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。
    • 4、EXPDP/IMPDP在备份和恢复时间上要比EXP/IMP有着优势,而且文件要小的多。
    • 5、使用EXPDP/IMPDP管理更加灵活。支持并行;可中断;可以修改元数据文件名字、表空间名;支持元数据导入导出;估算导出数据所需空间;指定导入数据库版本等。
  • oracle中的expdp导出、impdp导入的使用以前,都得先完成如下三个步骤
  • 第一步 以管理员身份,建立逻辑目录sql
    create directory my_dbdata as 'D:/my_dbdata';
    
  • 第二步 查看逻辑目录是否建立成功数据库
    select * from dba_directories;
    
    - 此时应该在再查看“D:/my_dbdata”这个磁盘物理路径是否存在。
    - 由于oracle建立时并不关心该磁盘目录是否存在,若是不存在,则在后续的操做中会报错
    
  • 第三步 赋予导出用户的逻辑目录操做权限oracle,好比我要导出一个用户名为“answer”的库,则须要用管理员来赋予“answer”用户对于逻辑目录的操做权限。
    grant read,write on directory my_dbdata to answer;
    
  • 示例
    -- 创建逻辑目录
    -- linux系统
    create directory xf_directory as '/data/xf/xf_data';
    -- windows系统
    create directory xf_directory as 'D:/xf_data';
    
    -- 在服务器上创建文件夹
    -- linux系统
    cd /    -- 返回根目录
    cd data     -- 进入data目录
    mkdir xf    -- 创建目录,名称为xf
    mkdir xf_data   -- 创建目录,名称xf_data
    
    -- 删除逻辑目录
    drop directory xf_directory;
    
    -- 查询逻辑目录
    select * from dba_directories;
    
    -- 逻辑目录授权
    grant read,write on directory xf_directory to miaerp_dxyy
    
  • 导入和导出命令,操做系统为windows,在cmd窗口中执行,若为linux或其余unix系统,则直接在命令行操做性能
  • 特别注意:在expdp、impdp命令使用时,不要习惯性的在命令末尾加上分号“;”,会致使不经意间出现错误。曾经我进行导入操做是,最后加了个分号,语句以下:操作系统
    impdp eppapp0805/eppapp0805 DIRECTORY=epp_data DUMPFILE=eppapptest_88_20130805.dmp remap_schema=eppapptest:eppapp0805;
    
  • 看见了没,最后那个参数是remap_schema=eppapptest:eppapp0805,表示该dmp包是从eppapptest用户导出来的,要把这个dmp包导入到用户eppapp0805去,结果,导入时oracle把“eppapp0805;”连分号一块儿当成用户名了,一看现有库中不存在这个用户,就建立新用户,而后就建立了一个带分号结尾的用户。而这个用户还不能登陆,由于有特殊字符,很是的郁闷命令行

  • 导出-expdp
  1. 按用户导出
    expdp answer/answer@orcl directory=my_dbdata schemas=answer dumpfile=answer.dmp
    
  2. 按表名导出
    expdp answer/answer@orcl directory=my_dbdata tables=a_answer,a_question dumpfile=m_table.dmp 
    
  3. 按查询条件导出
    expdp answer/answer@orcl directory=my_dbdata tables=a_answer query='WHERE id < 20' dumpfile=exp_by_query.dmp
    
  4. 按表空间导出
    expdp answer/answer@orcl directory=my_dbdata  tablespaces=user dumpfile=tablespace.dmp
    
  5. 整个数据库导出
    expdp answer/answer@orcl directory=my_dbdata  full=y dumpfile=full.dmp
    
  • 导出-expdp参数说明
    dumpfile:指定导出文件名
    logfile:指定导出日志名
    directory:指定逻辑目录的名称,为以前建立的逻辑目录。
    schemas:设置导出指定用户的数据
    tables:设置导出指定表数据
    tablespaces:设置导出指定表空间数据
    query:设置导出条件
    full:导出全部数据(full=y)
    
    CONTENT:用于指定要导出的内容,默认为ALL
        CONTENT = ALL:导出对象定义和全部数据
        CONTENT = DATA_ONLY:只导出数据
        CONTENT = METADATA_ONLY:只导出对象定义
    EXCLUDE:用于指定执行操做时释放要排除的对象类型或相关对象
        EXCLUDE=object_type[:name_clause] [,….]
        object_type:用于指定要排除的对象类型
        name_clause:用于指定要排除的具体对象
        例:EXCLUDE=TABLE:EMP
    INCLUDE:导出时包含指定的类型
        例:INCLUDE=TABLE_DATA,
        INCLUDE=TABLE:"LIKE 'TAB%'"
        INCLUDE=TABLE:”NOT LIKE ‘TAB%’”…
        EXCLUDE和INCLUDE不能同时使用
    FILESIZE:指定导出文件的大小,默认为0,表示没有大小限制(单位为bytes)
    TABLESPACE:指定一个表空间导出
    QUERY
        QUERY=[schema.][table\_name:] query_clause
        schema为指定方案名,table\_name为指定表名,query_clause用于指定条件限制子句
        例:expdp answer/answer directory=my\_dbdata dumpfiel=answer.dmp tables=a_answer query=’WHERE deptno=20’
        QUERY选项不能与CONTENT=METADATA\_ONLY,EXTIMATE\_ONLY,TRANSPORT_TABLESPACES等选项同时使用.
    PARALLEL:并行操做:指定执行导出操做的并行进程个数,默认值为1
        您能够经过PARALLEL参数为导出使用一个以上的线程加速做业。每一个线程建立一个单独的转储文件,所以参数dumpfile应当拥有和并行度同样多的项目。
        您能够指定通配符做为文件名,而不是显式地输入各个文件名,
        例:expdp answer/answer tables=a\_answer directory=my\_dbdata dumpfile=expCASES_%U.dmp parallel=4
        注意:dumpfile参数拥有一个通配符%U,它指示文件将按须要建立,格式将为expCASES_nn.dmp,其中nn 从01 开始,而后按须要向上增长。
        在并行模式下,状态屏幕将显示四个工做进程。(在默认模式下,只有一个进程是可见的)全部的工做进程同步取出数据,并在状态屏幕上显示它们的进度。
        分离访问数据文件和转储目录文件系统的输入/输出通道是很重要的。不然,与维护Data
        Pump 做业相关的开销可能超过并行线程的效益,并所以而下降性能。并行方式只有在表的数量多于并行值而且表很大时才是有效的。
    

  • 导入-impdp
  1. 导入到指定用户下
    -- 数据文件由用户answer导出
    impdp system/password DIRECTORY=my_dbdata DUMPFILE=answer.dmp SCHEMAS=answer
    
  2. 若是导出的用户名称跟导入的用户名称不一致,则按下面的方法导入
    impdp system/password DIRECTORY=my_dbdata DUMPFILE=answer.dmp REMAP_SCHEMA=user1(导出时的所属用户名):user2(导入时的所属用户名)
    
  3. 只导入dmp文件中的某几个表
    impdp system/password DIRECTORY=my_dbdata DUMPFILE=answer.dmp TABLES=a_answer,a_question
    
  4. 导入表空间
    impdp system/password DIRECTORY=my_dbdata DUMPFILE=tablespace.dmp TABLESPACES=user
    
  5. 导入整个数据库
    impdp system/password DIRECTORY=my_dbdata DUMPFILE=full.dmp FULL=y;
    
  6. 追加数据
    impdp system/password DIRECTORY=my_dbdata DUMPFILE=answer.dmp SCHEMAS=answer TABLE_EXISTS_ACTION=APPEND
    
  • 导入-impdp参数说明
    TABBLE_EXISTS_ACTION
        TABBLE_EXISTS_ACTION={SKIP | APPEND | TRUNCATE | FRPLACE }
        SKIP:导入时会跳过已存在的对象
        APPEND:导入时会追加数据
        TRUNCATE:导入时会截断表,而后追加新的数据
        FREPLACE:导入时会删除已存在的表,重建表再追加数据
    REMAP_SCHEMA:用于将源方案中的全部对象装载到目标方案中。
        例:若是dmp文件导出时对应用户名为 user1,导入时对应用户名为user2,则由于用户名不一致而没法导入,须要这样用
        REMAP_SCHEMA=user1:user2
    REMAP_TABLESPACE:将源表空间的全部对象导入到目标表空间
        REMAP_TABLESPACE=source_tablespace:target:tablespace
    REMAP_DATAFILE:将源数据文件转变为目标数据文件,在不一样平台之间搬移表空间可能须要该选项
        REMAP_DATAFIEL=source_datafie:target_datafile
    

  • oracle导入导出命令impdp和expdp - 哔哩哔哩

  • 用expdp和impdp导入导出之前,都需要先创建逻辑目录,并在服务器上创建实际文件夹,否则后面会报错(导入的时候需要将dmp文件放在逻辑目录指定路径下的文件夹内)

  • 首先创建逻辑目录并授权给用户

  • 创建逻辑目录

    create directory 逻辑目录名称 as '路径,基于系统';
    
  • 查看逻辑目录是否创建成功

    select * from dba_directories;
    
    - 此时应该在再查看“D:/my_dbdata”这个磁盘物理路径是否存在。
    - 由于oracle建立时并不关心该磁盘目录是否存在,若是不存在,则在后续的操做中会报错
    
    • 1.jpg

  • 然后将文件夹读写权限给被授权用户:

    grant read,write on directory 逻辑目录名称 to 被授权用户;
    
  • 导出命令expdp

    expdp schemas=user directory=逻辑目录名称 dumpfile =expdp_database.dmp logfile=expdp_database.log;
    
  • 参数含义解释:

  • dumpfile:导出的文件名,必须是dmp后缀结尾

  • schemas:用户名,导出指定用户拥有的内容

  • logfile:导出时记录日志的文件名

  • directory:导出到的文件夹,必须保证是文件夹,这个文件夹在oracle里面设置,通过create directory语句创建

  • 导入命令impdp

    impdp dumpfile=database.dmp schemas=user logfile=log1.log directory=DATA_DIRECTORY  remap_schema=user:user1 transform=segment_attributes:n,oid:n table_exists_action=replace
    
    • 导入的时候,dmp文件需要放在oracle的安装目录内
  • E:appAdministratoradminWHTEST(这个地方是你的数据库实例名)dpdump

  • 参数含义解释:

  • dumpfile:要导入的文件,必须是dmp文件。

  • schemas:用户名,指的是在导出dmp文件时操作的用户名。

  • logfile:导入时的记录日志文件

  • directory:导入到的文件夹,必须保证是文件夹,这个文件夹在oracle里面设置,通过create directory语句创建,创建格式如下:

  • remap_schema:原导出的用户:导入到的用户

  • 注意:指定导入到的用户,如果导入后用户名称发生变化,需要导入到的用户的名称

  • transform:变化操作,针对导入数据库时因为原有内容的oid导致无法导入,设置此选项代表重置那些oid

  • table_exists_action=replace:当表存在时,覆盖