Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3319644
  • 博文数量: 631
  • 博客积分: 10716
  • 博客等级: 上将
  • 技术积分: 8397
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-01 22:35
文章分类

全部博文(631)

文章存档

2020年(2)

2019年(22)

2018年(4)

2017年(37)

2016年(22)

2015年(1)

2013年(12)

2012年(20)

2011年(19)

2010年(20)

2009年(282)

2008年(190)

分类: Oracle

2009-01-16 13:46:21

expdp/impdp的使用

Oracle10g中,提供了全新的数据导入导出工具

通过API调用,把传统的exp/imp类交互模式的操作
转变成为数据库内部的job任务

从而实现了任务的可中止与重启动

当然,重启动还依赖于另外一个数据结构
MT(master table),
任务主表
该表用于记录导出/导入任务的进度.

以下是一些测试和说明.

1. 主要参数说明

我们先看一下Oracle的帮助说明:

代码:

C:>expdp -help

Export: Release 10.1.0.2.0 - Production on 星期三, 19 5, 2004 23:27

Copyright (c) 2003, Oracle.  All rights reserved.

数据泵导出实用程序提供了一种用于在 Oracle 数据库之间传输

数据对象的机制。该实用程序可以使用以下命令进行调用:

   示例: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

您可以控制导出的运行方式。具体方法是: 'expdp' 命令后输入

各种参数。要指定各参数, 请使用关键字:

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

   示例: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott

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

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

 

2.执行过程中终止导出

首先启动expdp执行导出操作
注意,这里可以指定一个job_name,这个名称将是你数据库中创建的MT表的名称,如果忽略,Oracle会自动命名


$ expdp eygle/eygle directory=dpdata dumpfile=full.dmp full=y job_name=expfull

Export: Release 10.1.0.2.0 - 64bit Production on Monday, 26 April, 2004 19:45

Copyright (c) 2003, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production

With the Partitioning, OLAP and Data Mining options

FLASHBACK automatically enabled to preserve database integrity.

Starting "EYGLE"."EXPFULL":  



ok,
在此,你可以通过ctrl + c,退出当前交互模式
退出之后,导出操作不会停止
这不同于Oracle以前的exp
以前的exp,如果退出交互模式,就会出错终止导出任务
10g,由于expdp是数据库内部定义的任务
已经与客户端无关.

退出交互之后,会进入export的命令行模式
此时支持status等察看命令.


如果此时,想要停止该任务
可以发出stop_job命令,确认后停止

 

expdp与传统exp的速度比较

 

测试环境:

System Configuration: Sun Microsystems sun4u Sun Enterprise 450 (4 X UltraSPARC-II 296MHz)
System clock frequency: 99 MHz
Memory size: 2048 Megabytes

数据量:
单表测试,1363292行记录,116.6 MB左右数据

 

1.使用并行 expdp

花费时间:
Tue Apr 27 10:21:54 CST 2004 - Tue Apr 27 10:21:10 CST 2004 = 43

$ cat bak.sh
date
expdp eygle/eygle dumpfile=big_big_table.dmp directory=dpdata tables=big_big_table job_name=exptab parallel=4
date
$ ./bak.sh
Tue Apr 27 10:21:10 CST 2004

Export: Release 10.1.0.2.0 - 64bit Production on Tuesday, 27 April, 2004 10:21

Copyright (c) 2003, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting "EYGLE"."EXPTAB": eygle/******** dumpfile=big_big_table.dmp directory=dpdata tables=big_big_table job_name=exptab parallel=4
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 248 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "EYGLE"."BIG_BIG_TABLE" 116.6 MB 1363292 rows
Master table "EYGLE"."EXPTAB" successfully loaded/unloaded
******************************************************************************
Dump file set for EYGLE.EXPTAB is:
/opt/oracle/dpdata/big_big_table.dmp
Job "EYGLE"."EXPTAB" successfully completed at 10:21

Tue Apr 27 10:21:54 CST 2004

2.使用正常 expdp

花费时间:
Tue Apr 27 10:23:36 CST 2004 - Tue Apr 27 10:23:02 CST 2004 = 34


看来并行的差异需要更大的数据量的测试

$ cat bak2.sh
date
expdp eygle/eygle dumpfile=big_big_table2.dmp directory=dpdata tables=big_big_table job_name=exptab
date

$ ./bak2.sh
Tue Apr 27 10:23:02 CST 2004

Export: Release 10.1.0.2.0 - 64bit Production on Tuesday, 27 April, 2004 10:23

Copyright (c) 2003, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting "EYGLE"."EXPTAB": eygle/******** dumpfile=big_big_table2.dmp directory=dpdata tables=big_big_table job_name=exptab
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 248 MB
Processing object type TABLE_EXPORT/TABLE/TABLE
. . exported "EYGLE"."BIG_BIG_TABLE" 116.6 MB 1363292 rows
Master table "EYGLE"."EXPTAB" successfully loaded/unloaded
******************************************************************************
Dump file set for EYGLE.EXPTAB is:
/opt/oracle/dpdata/big_big_table2.dmp
Job "EYGLE"."EXPTAB" successfully completed at 10:23

Tue Apr 27 10:23:36 CST 2004

 

3.常规路径exp

花费时间:Tue Apr 27 10:27:00 CST 2004 - Tue Apr 27 10:24:54 CST 2004 = 2:06

这是花费时间最长的.
126/34 = 370.58823529411764705882352941176%

expdp
明显快于exp

$ cat bak3.sh
date
exp eygle/eygle file=big_big_table3.dmp tables=big_big_table
date

$ ./bak3.sh
Tue Apr 27 10:24:54 CST 2004

Export: Release 10.1.0.2.0 - Production on Tue Apr 27 10:24:54 2004

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


Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Conventional Path ...
. . exporting table BIG_BIG_TABLE 1363292 rows exported
Export terminated successfully without warnings.
Tue Apr 27 10:27:00 CST 2004

 

4.直接路径exp


花费时间:
Tue Apr 27 10:52:09 CST 2004 - Tue Apr 27 10:50:58 CST 2004 = 1.11
71/34 = 208.82352941176470588235294117647%

直接路径导出快于常规路径导出,但是仍然不敌expdp

$ cat bak4.sh
date
exp eygle/eygle file=big_big_table3.dmp tables=big_big_table direct=y
date

$ ./bak4.sh
Tue Apr 27 10:50:58 CST 2004

Export: Release 10.1.0.2.0 - Production on Tue Apr 27 10:50:58 2004

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


Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

About to export specified tables via Direct Path ...
. . exporting table BIG_BIG_TABLE 1363292 rows exported
Export terminated successfully without warnings.
Tue Apr 27 10:52:09 CST 2004

5.文件大小

传统方式exp文件要大于expdp的文件大小
大约大出10M左右.

$ ls -al
total 741566
drwxr-xr-x 2 oracle dba 512 Apr 27 10:50 .
drwxr-xr-x 23 oracle dba 1024 Apr 26 22:53 ..
-rwxr-xr-x 1 oracle dba 120 Apr 27 10:21 bak.sh
-rwxr-xr-x 1 oracle dba 111 Apr 27 10:22 bak2.sh
-rwxr-xr-x 1 oracle dba 71 Apr 27 10:24 bak3.sh
-rwxr-xr-x 1 oracle dba 80 Apr 27 10:50 bak4.sh
-rw-r----- 1 oracle dba 122413056 Apr 27 10:21 big_big_table.dmp
-rw-r----- 1 oracle dba 122417152 Apr 27 10:23 big_big_table2.dmp
-rw-r--r-- 1 oracle dba 134604800 Apr 27 10:52 big_big_table3.dmp
-rw-r--r-- 1 oracle dba 965 Apr 27 10:23 export.log

以上测试结果仅供参考.

以下是导入测试:

6. 使用imp

花费时间: Tue Apr 27 11:15:11 CST 2004 - Tue Apr 27 11:08:24 CST 2004 = 6:47s

$ cat rev2.sh
date
imp eygle/eygle file=big_big_table3.dmp tables=big_big_table
date

$ ./rev2.sh
Tue Apr 27 11:08:24 CST 2004

Import: Release 10.1.0.2.0 - Production on Tue Apr 27 11:08:24 2004

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


Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options

Export file created by EXPORT:V10.01.00 via direct path
import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
. importing EYGLE's objects into EYGLE
. . importing table "BIG_BIG_TABLE" 1363292 rows imported
Import terminated successfully without warnings.
Tue Apr 27 11:15:11 CST 2004
$

7. 使用impdp

花费时间: Tue Apr 27 11:07:06 CST 2004 - Tue Apr 27 11:06:40 CST 2004 = 26s
imp相比这个速度实在是惊人.
407/26 = 1565.3846153846153846153846153846%
无怪乎Oracleimpdp才是data pump真正杰出的地方(really stands out)

$ ./rev.sh
Tue Apr 27 11:06:40 CST 2004

Import: Release 10.1.0.2.0 - 64bit Production on Tuesday, 27 April, 2004 11:06

Copyright (c) 2003, Oracle. All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Master table "EYGLE"."IMPTAB" successfully loaded/unloaded
Starting "EYGLE"."IMPTAB": eygle/******** dumpfile=big_big_table.dmp tables=big_big_table directory=dpdata job_name=imptab
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA
. . imported "EYGLE"."BIG_BIG_TABLE" 116.6 MB 1363292 rows
Job "EYGLE"."IMPTAB" successfully completed at 11:07

Tue Apr 27 11:07:06 CST 2004


10g新特征----多个默认的临时表空间支持 - prada_gu

 

10g,可以创建多个临时表空间,并把它们组成一个临时表空间组,这样应用数据用于排序时可以使用组里的多个临时表空间,一个临时表空间组至少有一个临时表空间,其最大个数没有限制,组的名字不能和其中某个表空间的名字相同.
临时表空间组是在创建临时表空间时隐式创建的,同时如果组中的临时表空间全部移去了,那么这个组也将消失.
使用临时表空间组,我们将可以将一个表空间从一个组移动另一个组,或是从一个组中删除,或是往组里添加新的表空间;
使用临时表空间组,有如下的优点:
a
避免当临时表空间不足时所引起的结果排序的问题;
b
当一个用户同时有多个会话时,可以使得它们使用不同的临时表空间
c
使得并行的服务器在单节点上,能使用多个临时表空间
语法如下:
1
创建临时表空间组
sql>create temporary tablespace LMTEMP1 tempfile 'D:\ORACLE10\ORCL\temp1_01.dbf' size 50M tablespace group GROUP1;
此时组group1还没有,当最初运行此语句时,创建了临时表空间组group1,其内包括一个临时表空间lmtemp1;
2
往组里添加表空间:
sql>create temporary tablespace lmtemp2 tempfile 'D:\ORACLE10\ORCL\temp1_02.dbf' size 2M tablespace group group1;
3
查询视图dba_tablespace_groups就可以得到当前临时表空间组的信息:
sql> select * from dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP1 LMTEMP1
GROUP1 LMTEMP2
4
移动临时表空间
SQL> alter tablespace LMTEMP1 tablespace group GROUP2 ;
SQL> select * from dba_tablespace_groups;

GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
GROUP2 LMTEMP1
GROUP1 LMTEMP2
5
删除临时表空间
SQL> drop tablespace lmtemp1 including contents and datafiles;
如果一个组里的所有表空间被删除,则此组也将被隐式删除.
6
把临时表空间组指定给用户
SQL> alter user scott temporary tablespace GROUP1;
这样这个用户就将可以同时使用这个组里的多个临时表空间了
7
在数据库级设置临时表空间
SQL> alter database default temporary tablespace GROUP1;
Database altered.
8
检查用户使用哪个临时表空间
SQL> select username, session_num, tablespace from v$sort_usage;

 

10g新特性,flashback系列之一 —— flashback database – piner

前言

flashback
是我对10g一直比较感兴趣的东西,现在,我决定将其系统的整理出来,在以后的时间里,我将每天推出一个新的flashback的功能(不包括周末

Oracle 10g
flashback有了强劲的改进,从普通的falshback query发展到了多种形式,主要表现在如下几个主要方面。通过Oracle 10g,你甚至可以不需要从备份恢复,完成恢复工作。
1
Oracle Flashback Database
这个特性允许你通过SQL语句FLASHBACK DATABSE语句,让数据库前滚到当前的前一个时间点或者SCN,而不需要做时间点的恢复。
2
Oracle Flashback Table
这个特性允许你利用SQL语句FLASHBACK TABLE语句,确保回滚到表的前一个时间点。
3
Oracle Flashback Drop
Oracle 10g
开始提供一个类似垃圾站的功能,来恢复不小心被drop的表
4
Oracle Flashback Version Query
利用保存的回滚信息,你可以看到特定的表在时间段内的任何修改,如电影的回放一样,你将了解表在该期间的任何变化
5
Oracle Flashback Transaction Query
这个特性将确保您检查数据库的任何改变在一个事务级别。你可以利用它来诊断问题,性能分析和审计事务

正好是一周的时间。。。。。

由于时间仓促,难免错误多多,欢迎大家讨论并提宝贵意见

 

Flashback database

闪回数据库可以迅速的时数据库回到误操作或人为错误的前一个时间点,如实际中的撤消操作,将可以不利用备份就快速的实现时间点的恢复(有后悔药可以吃了 )。实际上,Oracle为了实现这一个功能,创建了另外一组日志,就是Flashback Logs(前滚日志),记录数据库的前滚操作。如果希望能闪回数据库,需要设置如下参数:
DB_RECOVER_FILE_DEST
DB_RECOVER_FILE_DEST_SIZE
这两个参数来确定Flashback日志的存放地点与该恢复区的大小。在创建数据库的时候,Oracle将自动创建恢复区(需要注意,该恢复区可不仅仅是为了flashback log,还可以用来归档,备份与恢复),但是默认是关闭Flashback database功能。如果想要利用这一功能,DBA就必须正确的配置该日志区的大小,如一个数据库的数据库,每天有10%的块发生改变,那么一天(24小时)的Flash Recovery Area就是1/10个数据库大小。DBA也可以动态的改变其大小以满足不同的需求。
另外一个参数DB_FLASHBACK_RETENTION_TARGET参数允许您设定闪回数据的保存时间,单位是分。默认是一天(24*60
如果想启动FLASHBACK DATABASE的功能,您必须在MOUNT模式下,执行alter database flashback on命令。或者是alter tablespace tsname flashback on,数据库将采集falshback log,如果需要关系该功能,则修改OnOFF
如果想执行flashback database命令,你可以在两种方式下执行:RMANSQLPLUS
SQL >flashback database to time to_date(xxx);
SQL >flashback database to time TO_TIMESTAMP (xxx);
SQL >flashback database to scn xxx
SQL >flashback database to sequence xxx thread 1
SQL>flashback database to timestamp(sysdate-1/24)
我们下面看看具体的例子说明
SQL> startup mount
ORACLE instance started.
Total System Global Area 113246208 bytes
Fixed Size 787708 bytes
Variable Size 87030532 bytes
Database Buffers 25165824 bytes
Redo Buffers 262144 bytes
Database mounted.
SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
ORA-38707: Media recovery is not enabled.
可以看到,flashback还必须要归档的保证
SQL> alter database archivelog;
Database altered.
SQL> alter database flashback on;
Database altered.
SQL> alter database open;
Database altered.
SQL> archive log list
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 13
Next log sequence to archive 15
Current log sequence 15
经过以上步骤,我们确保了flashback database的功能,我们还可以发现,10g的自动归档是不需要手工干预的,只要开启了归档,就是自动归档了,归档区也在DB_RECOVERY_FILE_DEST参数指定的地点。

通过如下的查询
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered.
SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME
2 FROM V$FLASHBACK_DATABASE_LOG;

OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
1135440 2004-04-06 15:20:57
我们可以知道,可以前滚恢复到的最早的SCN与时间点是多少,如果没有确保flashback database,该视图将没有查询结果。

我们创建三个一样的表
SQL> create table t1 as select * from dba_objects;
Table created.
SQL> create table t2 as select * from t1;
Table created.
SQL> create table t3 as select * from t1;
Table created.
SQL> set time on;
SQL> select sysdate from dual;
SYSDATE
-------------------
2004-04-06 15:29:33
我们确定了一个时间点
现在,我们分别truncate一个表与drop一个表,模拟误操作。
15:30:10 SQL> truncate table t2;
Table truncated.
15:30:43 SQL> drop table t3;
Table dropped.
没有备份,我们利用flashback来恢复数据库到2004-04-06 15:29:33时间点。
15:39:02 SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
15:39:31 SQL> startup mount exclusive
ORACLE instance started.
15:41:19 SQL> FLASHBACK DATABASE TO timestamp(to_date('2004-04-06 15:29:33','yyyy-mm-dd hh24:mi:ss'));
Flashback complete.
之后,我们可以用
ALTER DATABASE OPEN READ ONLY
来检查结果是否正确,如果满足结果,则可以用resetlog来正式启动数据库,注意,一旦resetlogs之后,将不能再flashbackresetlogs之前的时间点。
15:41:32 SQL> alter database open resetlogs;
Database altered.
我们现在查询那三个表
15:42:10 SQL> select count(*) from t1;
COUNT(*)
----------
47708
15:42:47 SQL> select count(*) from t2;
COUNT(*)
----------
47708
15:42:50 SQL> select count(*) from t3;
COUNT(*)
----------
47708
发现truncate的记录或者是drop的表都存在,现在数据库已经前滚到前一个时间点了。
15:44:56 SQL> SELECT OLDEST_FLASHBACK_SCN, OLDEST_FLASHBACK_TIME
15:45:05 2 FROM V$FLASHBACK_DATABASE_LOG;


OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI
-------------------- -------------------
1136169 2004-04-06 15:41:50
同时发现数据库的最早的flashback的时间与scn都回到resetlog的时间点了。

阅读(1146) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~