Oracle Directory文件夹的知识
在上一章介绍expdp/impdp时曾使用过DIRECTORY这个概念,以下再简单说明下DIRECTORY的点点滴滴。
MOS上对DIRECTORY的解释(266875.1):
(1)、基于服务端 vs 基于client
DIRECTORY变量指出了expdp导出数据泵或impdp导入数据泵将dump文件、log文件以及SQL文件(仅适用于impdp)写到什么路径。
由于导出数据泵和导入数据泵都是基于服务端的,不是基于client的,因此输出文件的路径都是相对于服务端文件夹的路径。数据泵要求将文件夹路径作为一个文件夹对象。一个文件夹对象将文件系统的一个文件夹路径映射为一个名称。
(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
ORA-29283: invalid file operation
(3)、怎样查询可用的文件夹?
能够使用例如以下SQL查询具有READ和WRITE权限的文件夹:
SET lines 80
COL grantee FORMAT a20
COL privilege FORMAT a10
SELECT directory_name, grantee, privilege
FROM user_tab_privs t, all_directories d
WHERE t.table_name(+)=d.directory_name
ORDER BY 1,2,3;
DIRECTORY_NAME GRANTEE PRIVILEGE
------------------------------ -------------------- ----------
DATA_PUMP_DIR EXP_FULL_DATABASE READ
DATA_PUMP_DIR EXP_FULL_DATABASE WRITE
DATA_PUMP_DIR IMP_FULL_DATABASE READ
DATA_PUMP_DIR IMP_FULL_DATABASE WRITE
MY_DIR SCOTT READ
MY_DIR SCOTT WRITE
MY_DIR SYSTEM READ
MY_DIR SYSTEM WRITE
MY_LOGDIR SCOTT READ
MY_LOGDIR SCOTT WRITE
MY_LOGDIR SYSTEM READ
MY_LOGDIR SYSTEM WRITE
...
(4)、须要的操作系统权限。
对文件夹对象的READ或WRITE权限只表示Oracle将会替你读或写这个文件。你并没有訪问Oracle以外文件的权限,除非你具备合适的操作系统权限。
(5)、数据泵怎样决定文件的路径
5.1 假设文件夹对象是文件标示符的一部分,那么文件夹对象指定的路径就须要使用。在文件夹MY_DIR创建dump文件的演示样例:
> expdp scott/tiger DUMPFILE=my_dir:expdp_s.dmp NOLOGFILE=Y
5.2 假设文件夹对象不代表一个文件,那么就须要使用DIRECTORY变量命名的文件夹对象。文件夹MY_DIR中创建dump文件。文件夹MY_DIR_LOG中创建日志文件的演示样例:
> expdp scott/tiger DIRECTORY=my_dir DUMPFILE=expdp_s.dmp \
LOGFILE=my_logdir:expdp_s.log
5.3 假设没有明白文件夹对象,也没有以DIRECTORY变量命名的文件夹对象。那么环境变量DATA_PUMP_DIR将会使用。环境变量是在在执行导出和导入数据泵应用的client系统中使用操作系统命令定义的,分配给基于client环境变量的取值必须和基于服务端的文件夹对象一致,且必须首先在server端建立。
文件夹MY_DIR中创建dump文件和MY_DIR_LOG中创建日志文件的演示样例:
在使用expdp的client机器上,设定环境变量:
-- On windows, place all expdp parameters on one single line:
C:\> set DATA_PUMP_DIR=MY_DIR
C:\> expdp scott/tiger@my_db_alias DUMPFILE=expdp_s.dmp
LOGFILE=my_logdir:expdp_s.log
注意环境变量DATA_DUMP_DIR相应的文件夹名称是大写和小写敏感的。
设定错误的DATA_PUMP_DIR环境变量会报错。比如:DATA_PUMP_DIR=My_Dir:
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name My_Dir is invalid
5.4 假设之前三种情况都没有创建文件夹对象,作为一个具有权限的用户(比如具有EXP_FULL_DATABASE或IMP_FULL_DATABASE角色),那么数据泵试图使用默认的基于server端的文件夹对象,DATA_PUMP_DIR。理解数据泵不会创建DATA_PUMP_DIR文件夹对象是很重要的。仅当授权用户未使用不论什么之前提到的机制创建的文件夹对象时。才会尝试使用DATA_PUMP_DIR。
这个默认的文件夹对象必须首先由DBA创建。不要将这个和同名的基于client的环境变量相混淆。
首先,清空DATA_PUMP_DIR环境变量:
C:\> set DATA_PUMP_DIR=
创建DATA_PUMP_DIR的文件夹:
CONNECT SYSTEM/MANAGER
CREATE OR REPLACE DIRECTORY data_pump_dir AS 'D:\DataPump';
GRANT read, write ON DIRECTORY data_pump_dir TO scott;
-- On windows, place all expdp parameters on one single line:
C:\> expdp system/manager@my_db_alias DUMPFILE=expdp_s.dmp
LOGFILE=expdp_s.log SCHEMAS=scott
假设SCOTT用户不是授权用户,不能使用默认的DATA_PUMP_DIR。
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39145: directory object parameter must be specified and non-null
用户SCOTT的解决方法:如上面5.3。SCOTT能够环境变量设置DATA_PUMP_DIR为MY_DIR:
-- On windows, place all expdp parameters on one single line:
C:\> set DATA_PUMP_DIR=MY_DIR
C:\> expdp scott/tiger@my_db_alias DUMPFILE=expdp_s.dmp
LOGFILE=expdp_s.log SCHEMAS=scott
或者这样的特定场景下。用户SCOTT也能够有文件夹DATA_PUMP_DIR的读和写权限:
-- On windows, place all expdp parameters on one single line:
C:\> set DATA_PUMP_DIR=DATA_PUMP_DIR
C:\> expdp scott/tiger@my_db_alias DUMPFILE=expdp_s.dmp
LOGFILE=expdp_s.log SCHEMAS=scott
实验:
创建文件夹:CREATE DIRECTORY UTL_FILE_DIR AS '/oracle/backup';
向用文件夹对象标识的文件写内容:
2 fhandle utl_file.file_type;
3 begin
4 fhandle := utl_file.fopen('UTL_FILE_DIR', 'example.txt', 'w');
5 utl_file.put_line(fhandle, 'test write one');
6 utl_file.put_line(fhandle, 'test write two');
7 utl_file.fclose(fhandle);
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> !
ora10g@vm-vmw4131-t$ more /oracle/backup/example.txt
test write one
test write two
2 fhandle utl_file.file_type;
3 fp_buffer varchar2(4000);
4 begin
5 fhandle := utl_file.fopen('UTL_FILE_DIR', 'example.txt', 'R');
6 utl_file.get_line(fhandle, fp_buffer);
7 dbms_output.put_line(fp_buffer);
8 utl_file.get_line(fhandle, fp_buffer);
9 dbms_output.put_line(fp_buffer);
10 utl_file.fclose(fhandle);
11 end;
12 /
PL/SQL procedure successfully completed.
SQL> /
PL/SQL procedure successfully completed.
此时没有不论什么输出。设置serveroutput:
set serveroutput on
SQL> /
test write one
test write two
PL/SQL procedure successfully completed.
打印文件内容。
Oracle Directory文件夹的知识的更多相关文章
- 本地 oracle 安装文件夹满触发 ORA-7445 [_memmove()+64] 导致Instance Crashed 的事故
近期处理了一个问题,原因是因为命中ORA-600 [kole_t2u], [34] - description, bugs 导致 在udump 文件夹下大量转储 出cdmp 文件, 然后这些 cdmp ...
- Android res资源文件夹的知识积累
Android的开发框架耦合性还是比较低的,逻辑和布局被原生分开了.在Eclipse一般代码写在src文件夹下,资源等写在res文件夹下. drawable文件夹:该文件夹有很多变种,主要是为了适配A ...
- File类、文件过滤器、递归、文件及文件夹的操作方法
一.File Io概述: 当需要把内存中的数据存储到持久化设备上这个动作称为输出(写)Output操作. 当把持久设备上的数据读取到内存中的这个动作称为输入(读)Input操作. 因此我们把这种输入和 ...
- 文件和文件夹不存在的时候,FileSystemWatcher 监听不到文件的改变?如果递归地监听就可以了
当你需要监视文件或文件夹的改变的时候,使用 FileSystemWatcher 便可以完成.不过,FileSystemWatcher 对文件夹的监视要求文件夹必须存在,否则会产生错误“无效路径”. 那 ...
- Android Studio:layout-sw600dp文件夹中创建activity_main.xml
1.右键res文件夹,新建Android resource directory文件夹 2.在resource type中选择layout 3.将Directory name命名为layout-sw6 ...
- oracle 库文件解决的方法 bad ELF interpreter: No such file or directory
今天是2014-05-27,今天遇到一个lib问题,再次记录一下.这是一个案例,更是一种解决该问题的方法过程. 当我们在使用sqlplus 登陆unix数据库的时候,有可能出现类似:xxxxxx ba ...
- oracle 10g/11g 命令对照,日志文件夹对照
oracle 10g/11g 命令对照,日志文件夹对照 oracle 11g 中不再建议使用的命令 Deprecated Command Replacement Commands crs_st ...
- Linux cp一个文件夹时提示cp: omitting directory `test/'
将一个文件夹test 复制到地址/opt/tmp下,提示出错: cp: omitting directory `test/' 原因: test 目录下还有目录,不能直接进行拷贝. 我们先找下cp 的命 ...
- Winform 基础知识 之文件夹操作
using System.IO; /// <summary> /// 删除文件夹下所有文件 /// </summary> /// <param name="di ...
随机推荐
- Redis,MemCached,MongoDB 概述
调研项目主要有Redis. MemCached. MongoDB,以及Amazon的DynamoDB Redis 是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key- ...
- 关于oracle dblink的知识。
create database link WZGLconnect to MMCSG_GX(用户名)using '(description=(address_list=(address=(host=xx ...
- GUI按键绑定到键盘和打印组件
首先说明一点 按键绑定到键盘和设置快捷键是不一样的 按键绑定键盘是按键有了和button一样的功能,没有焦点时也能使用(WHEN_IN_FOCUSED_WINDOW),甚至有时候单独作为一个事件(有自 ...
- XMLHttpRequest state以及readystate的对应值
status状态值长整形标准http状态码,定义如下: Number Description 100 Continue101 Switching PRotocols200 OK201 Create ...
- php的header()函数前有echo输出情况分析
php的header()方法一般被用来告知浏览器做一些什么样的操作,比如跳转,刷新等等:而调用header方法前,如果使用echo输出一些内容,会发生什么情况呢?会对header函数有影响吗?我们实验 ...
- Solr Update备注
参考资料: http://wiki.apache.org/solr/ExtractingRequestHandler#Sending_documents_to_Solr /update 标准的upda ...
- IOS编程教程(八):在你的应用程序添加启动画面
IOS编程教程(八):在你的应用程序添加启动画面 虽然你可能认为你需要编写闪屏的代码,苹果已经可以非常轻松地把它做在Xcode中.不需要任何编码.你只需要做的是设置一些配置. 什么是闪屏 对于那些 ...
- Qt自定义带游标的slider,在滑块正上方显示当前值(类似于进度条,用一个额外的QLabel冒充QSilder的一部分,然后move就行了)
首先自定义QSlider的子类MyCustomSlider,如下所示. mycustomslider.h #ifndef MYCUSTOMSLIDER_H #define MYCUSTOMSLIDER ...
- 二叉查找树:Python实现
#coding:utf8 #author:HaxtraZ class BST(object): """二叉查找树的简单实现""" def _ ...
- curl_easy_setopt-curl库的关键函数之一
函数原型:#include <curl/curl.h>CURLcodecurl_easy_setopt(CURL *handle, CURLoption option, parameter ...