我有三个 Oracle 11g 数据库:开发、测试和生产。假设三个系统上的日志目录不同:
dev => \var\log\oracle\
test => e:\logging\
prod => g:\logs\logging\
我将这些目录与 utl_file 一起使用。
我在哪里保存这些设置?是否有某种“ora_config.ini”用于存储这些值并使用 PL/SQL 轻松读取它们?
至少从 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”的身份读取或可能写入文件系统上的任何位置而造成安全漏洞。