数据泵可以像在传统的导出和导入实用程序中那样,使用转储文件和其他的日志文件,但是存在明显的不同。对于数据泵操作,可以使用3种类型的文件。
★ 转储文件。此文件存储表数据以及被装载或卸载的元数据。
★ 日志文件。此文件是标准文件,用于记录数据泵操作的消息和结果。
★ SQL文件。数据泵导入使用一个特殊的参数SQLFILE,把导入作业中要执行的所有DDL语句写入一个文件中。数据泵并不实际执行SQL,它仅仅是将DDL语句写入由SQLFILE参数指定的文件中。SQL文件只用于保存一个数据泵导入作业中SQLFILE命令的输出信息。
像在旧的导出/导入实用程序中一样,所有新日志文件(和SQL文件)将覆證具有相同名字的旧文件。如果已经存在一个有相同名字的旧转储文件,将产生错误。
与传统的导出和导入实用程序不同,使用目录和目录对象存储数据泵文件。
使用目录对象
数据泵作业在服务器上(而不是在启动作业的客户机上)创建其所有的转储文件.Oracle后台进程代表Oracle的拥有者(通常为用户oracle),负责为所有转储文件设置I/O.这意味着从安全的角度讲,你不能让用户在服务器上指定绝对文件路径。
除此之外,还存在安全措施问题,例如,如果给予了你在系统任何地方写转储文件的权利,你可能会覆盖服务器文件.同样,你将能够读取服务器能够访问的所有文件,即使你没有被授予这样的权限。为了避免这些类型的问题,数据泵使用目录对象。
注意 除非先创建了目录对象,否则你的数据泵导出和导入作业不能运行.之后,你还必须确保用户有关于该文件系统的必要文件以及目录访问权限:
目录对象(directory object)被称为是数据泵映射到一个特定操作系统目录中的对象。例如,一个目录对象dpump_dirl可以指向服务器上的/u01/app/oracle/admin/export目录。然后,通过简单使用dpump_dirl目录对象名,可以访问该目录。当你创建一个新的ORACLE Database 10g版本2以上的数据库,或者而数据库升级到Oracle Database 10g版本2以上时,Oracle会创建一个默认的目录对象DATA_PUMP_DIR.该默认目录对象指向名为dpdump的目录,而默认数据泵目录由Oracle在以下位置之一自动创建:
★ ORACLE_BASE/admin/SID
★ ORACLE_HOME/admin/SID
如果已经定义了ORACLE_BASE目录,则Oracle使用此位置;否则,Oracle将在ORACLE_HOME目录下创建默认目录。数据泵蒋把所有转储文件、SQL文件和日志文件写到默认DATA_PUMP_DIR对象所在的目录中。要想了解默认DATA_PUMP_DIR目录对象所在的位置,可以仙用以下基于DBA_DIRECTORIES视图的査询:
SELECT * FROM dba_directories;
只有拥有SYS和SYSTEM权限的用户才能够使用默认目录对象DATA_PUMP_DIR。因此,SYSTEM用户可以启动数据泵导出作业,而不用提供目录名。
用户SYSTEM运行的数据泵导出
expdp system/sammyy1
但是,在非授权用户能够使用数据泵导出或导入前,DBA必须创建一个目录对象或授予使用现有 目录的权限。除了DBA,任何有CREATE ANY DIRECTORY权限的用户都能够创建目录对象。以下说明如何创建目录对象:
CREATE DIRECTORY dpump_dir1 AS '/u01/finance/oradata/dump_dir';
为了使用某个特定的目录,用户必须拥有对该目录对象的访问权限。例如,为了让数据库代表用户salapati在新的目录对象dpump_dir1中读写文件,需要授予用户以下权限:
GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO salapati;
此命令将允许Oracle数据库代表用户在dpump_dirl目录对象中读写文件,但是不给予用户关于该目录的任何权限。为进行数据泵导出作业,需要拥有对所有文件的写权限。在导入作业中,需要对导出转储文件的读访问权,还需要对目录的写权限以便写日志文件。获得某目录对象的读/写权限后:
★ 只能通过Oracle读/写映射到该目录对象上的文件;
★ Oracle数据库必须拥有在该目录上读/写文件的权限。