2

我有三个 Oracle 11g 数据库:开发、测试和生产。假设三个系统上的日志目录不同:

dev  => \var\log\oracle\
test => e:\logging\
prod => g:\logs\logging\

我将这些目录与 utl_file 一起使用。

我在哪里保存这些设置?是否有某种“ora_config.ini”用于存储这些值并使用 PL/SQL 轻松读取它们?

4

1 回答 1

2

至少从 Oracle 9i 开始,Oracle 就有了directory对象。请参阅http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5007.htm

您应该在每个系统上创建一个具有相同名称的目录对象,并在调用utl_file.

例如,在“开发”上:

create directory logging_dir as '/var/log/oracle';

在“测试”上:

create directory logging_dir as 'e:\logging';

在“产品”上:

create directory logging_dir as 'g:\logs\logging';

而且您的 PL/SQL 代码在所有环境中都是相同的,例如:

f := utl_file.fopen('LOGGING_DIR', 'filename.log', 'W');

DBA 应该创建目录对象并向需要使用它们的数据库用户或角色授予权限。

不要将创建目录对象的系统特权授予任何数据库用户,因为这会通过允许 Oracle 以 OS 用户“oracle”的身份读取或可能写入文件系统上的任何位置而造成安全漏洞。

于 2013-10-21T13:02:23.540 回答