Bootstrap

linux exp parfile用法,逻辑备份与恢复-使用EXP进行逻辑备份

导入/导出(IMP/EXP)是Oracle最古老的两个命令行工具,通过导出(EXP)工具可以将Oracle数据库中的数据提取出来,在恢复时可以将数据导入(IMP)进行恢复。

但是需要注意的是,使用EXP备份的数据进行全库恢复时,需要重新创建数据库,导入备份的数据,恢复的过程可能会极为漫长。

逻辑导出(EXP)的使用方法在命令行通过exp –help命令可以直接得到:

C:>exp -help

Export: Release 10.2.0.1.0 - Production on 星期四 2月 1 11:21:14 2007

Copyright © 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 模式导出的模板名

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

帮助部分详细介绍了EXP的使用方法,以上帮助内容来自Oracle 10gR2。接下来简要介绍几个关于EXP的注意事项及特殊用法:

1、EXP导出与字符集

在前面的章节中已经详细地介绍过,导出客户端的字符集的设置会影响导出数据,所以应该设置导出客户端字符集和数据库相一致。在Windows的命令行可以如下设置:

C:>set nls_lang=AMERICAN_AMERICA.ZHS16GBK

在Linux/UNIX上Bash下通常可以如下设置:

[oracle@jumper oracle]$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

数据库端使用的字符集可以通过如下查询获得:

SQL> select * from NLS_DATABASE_PARAMETERS where parameter=‘NLS_CHARACTERSET’;

PARAMETER VALUE

NLS_CHARACTERSET ZHS16GBK

2、带查询子句的部分导出

从Oracle 8i开始,EXP工具支持使用查询子句对特定表的部分数据执行导出,这个功能是通过EXP的query参数来实现的,在使用过程中可能最常见的错误是:

LRM-00112: multiple values not allowed for parameter ‘query’

EXP-00019: failed to process parameters, type ‘EXP HELP=Y’ for help

EXP-00000: Export terminated unsuccessfully

这通常是因为Query子句包含特殊字符导致的,由于特殊字符在命令行通常需要转义,所以导出的语法结构通常与众不同。

在Windows上,通常可以使用如下方式指定Query子句:

exp … query=‘where col=1000’

exp … query=‘where col=’‘1000’’’

exp … query=‘where col"

exp … query=“where col < 1000”

exp … query="‘where col < 1000’"

以下是两个简单的范例:

C:>exp eygle/eygle@dana file=test.dmp tables=tquery query=“where object_id < 1000”

Export: Release 10.2.0.1.0 - Production on Thu Feb 1 11:49:52 2007

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path …

. . exporting table TQUERY 949 rows exported

Export terminated successfully without warnings.

C:>exp eygle/eygle@dana file=test.dmp tables=tquery query=‘where object_id “

Export: Release 10.2.0.1.0 - Production on Thu Feb 1 11:47:43 2007

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path …

. . exporting table TQUERY 949 rows exported

Export terminated successfully without warnings.

在Linux/UNIX的Bash下,通常可以如下指定query参数:

exp … query=“where col < 1000”

exp … query=“where col < ‘1000’”

以下是一个简单的举例:

[oracle@danaly ~]$ exp eygle/eygle file=test.dmp tables=tquery query=“where object_id < 1000”

Export: Release 10.2.0.1.0 - Production on Thu Feb 1 11:47:54 2007

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path …

. . exporting table TQUERY 949 rows exported

Export terminated successfully without warnings.

3、参数文件的使用

对于类似以上的复杂处理,可以通过参数PARFILE来指定一个参数文件,具体的参数写在参数文件中,这样就可以避免复杂的转义等操作:

[oracle@danaly ~]$ cat parfile.lst

userid=eygle/eygle

file=test.dmp

tables=tquery

query=“where object_id < 1000”

[oracle@danaly ~]$ exp parfile=parfile.lst

Export: Release 10.2.0.1.0 - Production on Thu Feb 1 11:52:30 2007

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path …

. . exporting table TQUERY 949 rows exported

Export terminated successfully without warnings.

4、使用通配符进行模糊导出

有时候,我们希望按条件导出部分表,EXP工具支持模糊查找,通配符可以在tables参数中使用,例如:

[oracle@jumper oracle]$ exp eygle/eygle tables=e% file=a.dmp

Export: Release 9.2.0.4.0 - Production on Mon Mar 26 14:59:14 2007

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path …

. . exporting table EYGLE 9 rows exported

. . exporting table EYGLE_ACCESS_LOG_20061016

Export terminated successfully without warnings.

这样,以字母E开头的表都被导出了。

5、按日期区分文件名称的导出

很多时候,在导出备份时,我们希望在文件名中加入日期变量,以区分不同日期的导出文件,也可以防止覆盖。

在导出文件名中引入时间有很多不同的做法,本文主要介绍以下两种方法:

(1)通过数据库查询获取日期。

通过数据库查询可以获得需要的日期格式,在Windows上可以编写两个文件用于完成备份,一个是可执行的批处理文件,名称为startbak.bat,可以包含如下内容:

echo off

set oracle_sid=eygle

sqlplus eygle/eygle @expbydt.sql

第二个文件是expbydt.sql脚本:

column today new_val dt

select to_char( sysdate, ‘ddmmyyyy’ ) today from dual;

host exp userid=eygle/eygle file=exp_eygle_&dt…dmp log=exp_eygle_&dt…log

exit

准备好了这两个文件之后,就可以通过命令行运行startbak.bat来执行逻辑备份了:

D:\backup>startbak.bat

D:\backup>echo off

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

TODAY

08022007

Export: Release 10.2.0.1.0 - Production on 星期四 2月 8 15:55:07 2007

Copyright © 1982, 2005, Oracle. All rights reserved.

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的用户…

. 正在导出 pre-schema 过程对象和操作

。。。。

即将导出 EYGLE 的对象…

. 即将导出 EYGLE 的表通过常规路径…

. . 正在导出表 EYGLE导出了 1 行

. . 正在导出表 EYGLE_BLOB导出了 8 行

. . 正在导出表 TEST导出了 15 行

. 正在导出同义词

……

. 正在导出统计信息

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

检查一下导出后的文件名称,如果备份计划无误,现在就可以通过Windows上的定时任务来定时执行这个任务了。

D:\backup>dir

2007-02-08 15:54 163 expbydt.sql

2007-02-08 15:55 1,699,840 exp_eygle_08022007.dmp

2007-02-08 15:55 1,091 exp_eygle_08022007.log

2007-02-08 15:51 64 startbak.bat

(2)通过操作系统获取日期。

时间变量也可以直接通过操作系统获得,在Windows上,我们可以通过如下命令获得:

D:\backup>echo %date:~0,10%

2007-02-08

当然,在Windows上的时间格式和区域设置有关,如果以上命令输出的日期格式存在问题,那么可以调整一下区域设置的日期。

可以通过一个名为expbdt.bat的批处理文件来执行导出操作:

echo off

set oracle_sid=eygle

exp userid=eygle/eygle full=y file=d:\backup\exp_eygle_%date:~0,10%.dmp log=d:\backup\exp_eygle_%date:~0,10%.log

执行的结果和上面的方法类似:

D:\backup>expbdt.bat

D:\backup>echo off

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, OLAP and Data Mining options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出整个数据库…

. 正在导出表空间定义

. 正在导出 pre-schema 过程对象和操作

. 正在导出簇定义

. 即将导出 SYSTEM 的表通过常规路径…

. . 正在导出表 DEF_AQCALL导出了 0 行

. . 正在导出表 DEF_AQERROR导出了 0 行

. 正在导出默认值和系统审计选项

. 正在导出统计信息

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

导出的输出如下:

D:\backup>dir

2007-02-08 16:46 134 expbdt.bat

2007-02-08 16:47 11,440,128 exp_eygle_2007-02-08.dmp

2007-02-08 16:47 29,646 exp_eygle_2007-02-08.log

在Linux/UNIX上的时间定义就显得更为简单:

exp eygle/eygle file=eygle_date +%Y%M%d

导出文件格式如下:

[oracle@jumper oracle]$ ls -l *.dmp

-rw-r–r-- 1 oracle dba 32768 Feb 8 16:41 eygle_20074008.dmp

;