zoukankan      html  css  js  c++  java
  • 【原创】Oracle数据库(备份、恢复)导入、导出技巧

    Oracle 数据库数据备份、恢复(导入、导出)技巧

    首先我们看一下Oracle给出的数据库备份、恢复命令的帮助信息:

    1.           导出命令帮助信息

    C:\Documents and Settings\tianchao>exp help=y

     

    Export: Release 10.2.0.1.0 - Production on 星期五 7月 6 13:54:31 2012

     

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

     

     

     

    通过输入 EXP 命令和您的用户名/口令, 导出

    操作将提示您输入参数:

     

         例如: EXP SCOTT/TIGER

     

    或者, 您也可以通过输入跟有各种参数的 EXP 命令来控制导出

    的运行方式。要指定参数, 您可以使用关键字:

     

         格式:  EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)

         例如: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)

                   或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表

     

    USERID 必须是命令行中的第一个参数。

     

    关键字   说明 (默认值)         关键字      说明 (默认值)

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

    USERID   用户名/口令           FULL        导出整个文件 (N)

    BUFFER   数据缓冲区大小        OWNER        所有者用户名列表

    FILE     输出文件 (EXPDAT.DMP)  TABLES     表名列表

    COMPRESS  导入到一个区 (Y)   RECORDLENGTH   IO 记录的长度

    GRANTS    导出权限 (Y)          INCTYPE     增量导出类型

    INDEXES   导出索引 (Y)         RECORD       跟踪增量导出 (Y)

    DIRECT    直接路径 (N)         TRIGGERS     导出触发器 (Y)

    LOG      屏幕输出的日志文件    STATISTICS    分析对象 (ESTIMATE)

    ROWS      导出数据行 (Y)        PARFILE      参数文件名

    CONSISTENT 交叉表的一致性 (N)   CONSTRAINTS  导出的约束条件 (Y)

     

    OBJECT_CONSISTENT    只在对象导出期间设置为只读的事务处理 (N)

    FEEDBACK             每 x 行显示进度 (0)

    FILESIZE             每个转储文件的最大大小

    FLASHBACK_SCN        用于将会话快照设置回以前状态的 SCN

    FLASHBACK_TIME       用于获取最接近指定时间的 SCN 的时间

    QUERY                用于导出表的子集的 select 子句

    RESUMABLE            遇到与空格相关的错误时挂起 (N)

    RESUMABLE_NAME       用于标识可恢复语句的文本字符串

    RESUMABLE_TIMEOUT    RESUMABLE 的等待时间

    TTS_FULL_CHECK       对 TTS 执行完整或部分相关性检查

    TABLESPACES          要导出的表空间列表

    TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)

    TEMPLATE             调用 iAS 模式导出的模板名

     

    成功终止导出, 没有出现警告。

    2.           导入命令帮助信息

    C:\Documents and Settings\tianchao>imp help=y

     

    Import: Release 10.2.0.1.0 - Production on 星期五 7月 6 13:54:52 2012

     

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

     

     

     

    通过输入 IMP 命令和您的用户名/口令, 导入

    操作将提示您输入参数:

     

         例如: IMP SCOTT/TIGER

     

    或者, 可以通过输入 IMP 命令和各种参数来控制导入

    的运行方式。要指定参数, 您可以使用关键字:

     

         格式:  IMP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)

         例如: IMP SCOTT/TIGER IGNORE=Y TABLES=(EMP,DEPT) FULL=N

                   或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表

     

    USERID 必须是命令行中的第一个参数。

     

    关键字   说明 (默认值)        关键字      说明 (默认值)

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

    USERID   用户名/口令           FULL       导入整个文件 (N)

    BUFFER   数据缓冲区大小        FROMUSER    所有者用户名列表

    FILE     输入文件 (EXPDAT.DMP)  TOUSER     用户名列表

    SHOW     只列出文件内容 (N)     TABLES      表名列表

    IGNORE   忽略创建错误 (N)    RECORDLENGTH  IO 记录的长度

    GRANTS   导入权限 (Y)          INCTYPE     增量导入类型

    INDEXES   导入索引 (Y)         COMMIT       提交数组插入 (N)

    ROWS     导入数据行 (Y)        PARFILE      参数文件名

    LOG     屏幕输出的日志文件    CONSTRAINTS    导入限制 (Y)

    DESTROY                覆盖表空间数据文件 (N)

    INDEXFILE              将表/索引信息写入指定的文件

    SKIP_UNUSABLE_INDEXES  跳过不可用索引的维护 (N)

    FEEDBACK               每 x 行显示进度 (0)

    TOID_NOVALIDATE        跳过指定类型 ID 的验证

    FILESIZE               每个转储文件的最大大小

    STATISTICS             始终导入预计算的统计信息

    RESUMABLE              在遇到有关空间的错误时挂起 (N)

    RESUMABLE_NAME         用来标识可恢复语句的文本字符串

    RESUMABLE_TIMEOUT      RESUMABLE 的等待时间

    COMPILE                编译过程, 程序包和函数 (Y)

    STREAMS_CONFIGURATION  导入流的一般元数据 (Y)

    STREAMS_INSTANTIATION  导入流实例化元数据 (N)

     

    下列关键字仅用于可传输的表空间

    TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)

    TABLESPACES 将要传输到数据库的表空间

    DATAFILES 将要传输到数据库的数据文件

    TTS_OWNERS 拥有可传输表空间集中数据的用户

     

    成功终止导入, 没有出现警告。

    在以上内容中,我特意标注了部分内容,也就是导入导出命令的“关键字=值”,其实我要讲的技巧也就在其中。

    3.           Oracle导入导出技巧

    技巧(1)    如何知道某个dmp数据库备份文件由哪个用户导出?

    我们通常使用的导出、导入命令为:

    l  导出:

    exp username/password@oracle_db_sid file=export.dmp log=export.log full=y

    l  导入:

    imp username/password@oracle_db_sid file=import.dmp log=import.log fromuser=export_user touser=import_user

    我们经常在导入dmp文件时,需要知道某个dmp文件是由哪个用户导出的,有个方法提供给大家,不管在linux、unix、windows操作系统下,more命令的用途都是“一点儿一点儿地查看一个文件的内容”,以windows为例,由于记事本、EditPlus等文本编辑软件,都只能打开大小有限的文件,对于通常的数据库备份文件,在这时就不一定适用,如下表,在C盘下有一个5M大小的数据库导出文件eia_xc.dmp:

    C:\Documents and Settings\tianchao>cd \

     

    C:\>dir

     驱动器 C 中的卷是 System

     卷的序列号是 0C2C-36CA

     

     C:\ 的目录

    ……

    2012-06-28  16:44         5,093,376 eia_xc.dmp

    ……

    我想知道该文件是由哪个用户导出的,在命令行执行如下命令即可:

    C:\>more eia_xc.dmp



    TEXPORT:V10.02.01

     

    UEIA_XC

    RUSERS

    2048

    0

    20

    0


    T


    T

     

     

     

     

     

     

     

     

     

     

     

                                        星期四 6月 28 16:44:6 2012c:\eia_xc.dmp

     

     

     

     

     

     

     

     

     

     

    -- More (0%) --

    这时我们已经看到了eia_xc.dmp文件的一点点内容,但通过这个我们已经知道了这个dmp文件由eia_xc用户导出。

    技巧(2)    如何导入、导出某个dmp备份文件中特定名称表的数据?

    使用如下命令:

    imp username/password@oracle_db_sid file=import.dmp log=import.log fromuser=export_user touser=import_user tables=(table_name1,table_name2)

    就可以仅导入import.dmp中的table_name1、table_name2两张表。

    导出命令一样,也加上tables=(table_name1,table_name2)即可。

    技巧(3)    如何导入、导出某个dmp备份文件中特定分区表的部分数据?

    使用如下命令:

    imp username/password@oracle_db_sid file=import.dmp log=import.log fromuser=export_user touser=import_user tables=(table_name:partition1,table_name:partition1)

    就可以仅导入import.dmp中的table_name表的partition1和partition2两个分区里的数据。

    导出命令一样,也加上tables=(table_name:partition1,table_name:partition1)即可。

    技巧(4)    如何导出数据库中特定几个用户的所有数据

    使用如下命令:

    exp username_dba/password@oracle_db_sid file=export.dmp log=export.log owner=(username1,username2,……,usernameN)

    其实就是使用了KEYWORD=(value1,value2,...,valueN)格式,就可以仅导出username1到usernameN这些用户的数据了,当然这里使用的登录用户username_dba要求了登录的用户必须具有dba权限,才能导出其他用户的数据。

    技巧(5)    如何确保数据库在异构环境下导入导出不出现中文乱码

    大家可能对windows比较了解,但在linux、unix下,oracle安装后,一般不设置NLS_LANG环境变量,或者设置了它的值为AMERICAN_AMERICA.ZHS16GBK,这时我们就需要注意,因为这个环境变量会引起不必要的语言字符集转换,所以我们在linux、unix下,导入、导出dmp,进行数据库备份恢复时,一定要在导出脚本前定义NLS_LANG环境变量,并保证它生效,可以用 echo $NLS_LANG检查是否生效。常用方法为在脚本前增加声明环境变量的脚本命令:

    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

    imp user/*** fromuser=user file=table.dmp touser=user log=1.log

  • 相关阅读:
    Codeforces 950E Data Center Maintenance 强连通分量
    Codeforces Round #469 Div. 2 A B C D E
    Codeforces Round #391 A B C D E
    bzoj 4569 [Scoi2016]萌萌哒 并查集 + ST表
    Codeforces 940F Machine Learning 带修改莫队
    How to read the SQL Server Database Transaction Log
    Mysql 主从复制触发器问题
    Git出现 SSL certificate的处理方法
    mac磁盘启动
    发件人地址重写的几种方法记录
  • 原文地址:https://www.cnblogs.com/xiaoTT/p/2579513.html
Copyright © 2011-2022 走看看