如何在oracle home中创建目录

时间:2015-02-25 16:05:58

标签: oracle oracle11g directory

我需要在oracle安装文件夹中创建一个oracle目录。就我而言,这条路径是D:\app\Administrator\product\11.2.0\dbhome_1。我尝试了create directory ora_dir as '\',但这引用了D:\。 有没有办法创建指向oracle_home的目录?

问候。

2 个答案:

答案 0 :(得分:4)

如果您已经从一个过程动态执行此操作,则可以通过Java调用获取ORACLE_HOME环境变量(因为它是在实例启动时设置的),但是您需要一个单独的函数:

create or replace function getenv(name varchar2) return varchar2
as language java
name 'java.lang.System.getenv(java.lang.String) return java.lang.String';
/

create or replace procedure p42 as
begin
  execute immediate q'[CREATE or replace DIRECTORY DIRECTORY_DIR AS ']'
    || getenv('ORACLE_HOME') || q'[']';
end;
/

假设两个编译都正常,则在执行时,将使用环境变量的路径创建目录:

exec p42;

PL/SQL procedure successfully completed.

select directory_path
from all_directories
where directory_name = 'DIRECTORY_DIR';

DIRECTORY_PATH
----------------------------------------
/dboracle/orabase/product/11.2.0

如果您的程序在一个软件包中,那么该函数也可以在那里,如果您愿意,也可以私有。并且您不需要任何额外的权限来使用Java调用,只需create procedure,在这种情况下您已经拥有了。{/ p>

不幸的是,这在Windows中并不像ORACLE_HOME is set in the registry, not the environment那样有效;可能get information from the registry但您可能还有多个Oracle主目录,因此您必须确定要使用的注册表项。

还有(如Aramillo发现的)[无证件]内置DBMS_SYSTEM package可以提供相同的信息;你可以这样做:

create or replace procedure p42 as
  l_oracle_home varchar2(100);
begin
  dbms_system.get_env('ORACLE_HOME', l_oracle_home);
  execute immediate q'[CREATE or replace DIRECTORY DIRECTORY_DIR AS ']'
    || l_oracle_home || q'[']';
end;
/

但是您需要在该软件包上授予执行权限,并且它的未记录状态可能会让您暂停;一些功能似乎仅限于SYSDBA(注释159968.1)。

在寻找DBMS_SYSTEM引用的My Oracle Support时,我也偶然发现了这个选项:

select nvl(substr(file_spec, 1, instr(file_spec, 'lib') -2),
  substr(file_spec, 1, instr(lower(file_spec), 'bin') -2)) as oracle_home
from dba_libraries
where library_name='DBMS_SUMADV_LIB';

...显然也适用于Windows,但您需要足够的权限才能查看数据字典条目。

答案 1 :(得分:0)

您需要提供完整路径:

CREATE DIRECTORY ORA_DIR AS 'D:\app\Administrator\product\11.2.0\dbhome_1';