我有三个Oracle 11g数据库:开发,测试和生产。假设三个系统上的日志记录目录不同:
dev => \var\log\oracle\
test => e:\logging\
prod => g:\logs\logging\
我正在使用这些目录和utl_file。
我在哪里保留这些设置?是否存在某种'ora_config.ini',我存储这些值并使用PL / SQL轻松读取它们?
答案 0 :(得分:2)
至少从Oracle 9i开始,Oracle有一个directory
对象。见http://docs.oracle.com/cd/B12037_01/server.101/b10759/statements_5007.htm
您应该在每个系统上创建一个具有相同名称的目录对象,并在调用utl_file
时按名称引用该目录。
例如,在“dev”:
create directory logging_dir as '/var/log/oracle';
关于“测试”:
create directory logging_dir as 'e:\logging';
关于“prod”:
create directory logging_dir as 'g:\logs\logging';
您的PL / SQL代码在所有环境中都是相同的,例如:
f := utl_file.fopen('LOGGING_DIR', 'filename.log', 'W');
DBA应该创建目录对象并向需要使用它们的数据库用户或角色授予权限。
不要授予系统权限,只为任何数据库用户创建目录对象,因为这会通过允许Oracle读取或可能在文件系统上的任何位置写入操作系统用户“oracle”来创建安全漏洞