日期:2014-05-16  浏览次数:20445 次

Oracle Directory目录的知识

在上一章介绍expdp/impdp时曾使用过DIRECTORY这个概念,下面再简单说明下DIRECTORY的点点滴滴。

MOS上对DIRECTORY的解释(266875.1):

(1)、基于服务端 vs 基于客户端

DIRECTORY变量指出了expdp导出数据泵或impdp导入数据泵将dump文件、log文件以及SQL文件(仅适用于impdp)写到什么路径。

因为导出数据泵和导入数据泵都是基于服务端的,不是基于客户端的,因此输出文件的路径都是相对于服务端目录的路径。数据泵要求将目录路径作为一个目录对象。一个目录对象将文件系统的一个目录路径映射为一个名称。

(2)、如何创建一个目录对象?

为了创建目录,必须具有DBA角色或者赋予了CREATE ANY DIRECTORY权限。

示例:

Window平台

CONNECT system/manager  
CREATE OR REPLACE DIRECTORY my_dir as 'D:\DataPump';  
CREATE OR REPLACE DIRECTORY my_logdir as 'E:\logs';  
GRANT read, write ON DIRECTORY my_dir TO scott;  
GRANT read, write ON DIRECTORY my_logdir TO scott;

Unix平台

CONNECT system/manager  
GRANT CREATE ANY DIRECTORY TO scott;  
CONNECT scott/tiger  
CREATE OR REPLACE DIRECTORY my_dir as '/usr/DataPump';  
CREATE OR REPLACE DIRECTORY my_logdir as '/usr/logs'; 

如果普通用户被赋予了CREATE ANY DIRECTORY权限,那么用户就自动具备目录的READ和WRITE权限

注意:CREATE DIRECTORY语句不会创建磁盘的真实目录,如果目录是无效的,数据泵作业会报错:

ORA-39002: invalid operation 
ORA-39070: Unable to open the log file. 
ORA-29283: invalid file operation 
ORA-06512: at "SYS.UTL_FILE", line 475