Oracle数据库导出、导入dmp文件

目标

实现Oracle数据库备份,导出、导入dmp文件。这里Oracle数据库源和目标库都是相同的版本。

exp/imp方式

这种方式可以在客户端或服务端机器上执行,受网速影响,速度相对较慢。

  • 导出
    export NLS_LANG=’AMERICAN_AMERICA.AL32UTF8’ #当存在exp-00091报错时,需要此命令设定本地字符集与数据库字符集一致。
    exp olduser/[email protected]/orcl owner=olduser rows=y indexes=n compress=y file=exp.dmp log=exp.log

  • 导入
    imp newuser/[email protected]/orcl file=exp.dmp log=imp.log fromuser=olduser touser=newuser ignore=y

以上,为“指定用户”模式,exp/imp还支持全库模式(full=y)、指定表模式(tables=(table1, table2),可通过query=\” where filed1 like ‘00%’\”指定表中的记录范围)。
当导出时,compress=y对dmp文件进行压缩,以减小文件大小;若采用全库模式,则不需要指定owner、tables等参数,且必须为dba权限才行。
当导入时,若目标库已经存在表,则可能会报错,导致导入中断,此时可通过ignore=y来忽略错误信息,并继续。

expdp/impdp数据泵方式

这种方式是完全在服务端进行的操作,因为无网络开销,所以运行速度是最快的。导出完毕后,将dmp文件从服务端下载下来即可。

  • 导出
    expdp olduser/[email protected]/orcl directory=DATA_PUMP_DIR dumpfile=expdb.dmp logfile=expdb.log SCHEMAS=olduser
    其中,directory=DATA_PUMP_DIR,表示导出到10.0.1.1/orcl数据库的DATA_PUMP_DIR目录下;SCHEMAS=olduser,指定了导出的是olduser用户下的数据对象。

  • 导入
    impdp newuser/[email protected]/orcl directory=DATA_PUMP_DIR dumpfile=expdb.dmp EXCLUDE=USER
    其中,directory=DATA_PUMP_DIR,表示从10.0.1.2/orcl 数据库的DATA_PUMP_DIR 目录下,读取文件名为expdb.dmp的dmp文件。
    在导入前,需要将expdb.dmp文件从10.0.1.1复制到 10.0.1.2的指定目录下。

DATA_PUMP_DIR目录,是通过如下ddl语句创建的:

create or replace directory DATA_PUMP_DIR  as '/home/oracle/dpdump/';

相关内容

  • 关于scp命令
    若希望在服务器之间复制文件,可通过scp命令。
    例如:
scp -P22 oracle@10.0.1.1:/oracle/admin/olduser/dpdump/expdb.dmp  /home/oracle/dbbackup/
  • 关于exp-00091错误
    出现EXP-00091之后,我们采用的解决方案如下:
    首先,查看数据库中的NLS_CHARACTERSET的值;
    然后,根据第一步查出来的NLS_CHARACTERSET(即ZHS16GBK)来设定
    windows环境:cmd > set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    linux环境:Shell > export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
--通过如下SQL可查询数据库字符集:
select userenv('language') from dual;
--如:SIMPLIFIED CHINESE_CHINA.AL32UTF8

select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
PARAMETER          VALUE 
-----------------  ----------
NLS_CHARACTERSET   ZHS16GBK 

你可能感兴趣的:(Oracle,Linux)