当我启动 Oracle 实例时,sqlplus
数据文件的路径存储在控制文件中,控制文件名存储在control_files
初始化参数中。初始化参数是从默认位置上找到的文件 ( init.ora
, spfile.ora
) 中读取的,或者它们的位置可以在启动时传递到数据库实例(启动脚本中的参数)sqlplus startup pfile=filename
。spfile
因此数据库所需的所有文件都可以位于任意位置,并且这些位置可以在启动时与数据库实例通信。但是密码文件呢?从文档中我们知道Linux中密码文件的默认位置是$ORACLE_HOME/dbs/orapw${ORACLE_SID}
. 如果是集群,我们可以通过以下方式告诉集群软件我们存储密码文件的位置srvctl modify database -db <db_unique_name> -pwfile <password_file_path>
。但本例中密码文件的名称可以是任意的。
- 我可以将密码文件放置在任意位置,并在使用 启动实例时将此位置传递给数据库吗
sqlplus
? sqlplus
那么Oracle如何知道在哪里可以找到密码文件,特别是如果使用或rman
而不是通过集群软件启动数据库呢?- 我可以查询数据库来找出密码文件的位置吗?
sqlplus
或使用该密码文件。rman
它们并不完全独立于网格基础设施,它们之间存在某种集成。还有其他示例:启动或停止以及实例化sqlplus
或rman
更新 GI 中集群资源的目标和状态。sqlplus
或者通过使用 spfile 的新位置更新数据库的 srvctl 配置来创建 spfile 。如果没有 GI,密码文件的位置由实例的名称和 的值$ORACLE_BASE_CONFIG
(如果是只读 Oracle 主目录)或预先确定$ORACLE_HOME
。select file_name from x$kzsrpwfile;
即使这是可能的,你为什么要这样做呢?
有了 Oracle 数据库,您将有足够多的事情需要担心,而不必担心系统默认设置,而这些默认设置可能最好不要管。
您(或您的继任者)在愚蠢的早晨的灾难恢复情况中遇到的“意外”越少越好。
此外,只有 DBA(和服务器工程师)才应该位于数据库服务器附近,那么DBMS 选择将自己的文件放在哪里又有什么关系呢?
考虑一下:如果您使用透明数据加密 (TDE),并且选择将包含凭证的钱包文件放在非标准的位置,并且无论出于何种原因,该文件都没有得到备份?如果你的服务器发出“轰隆!”的声音,你就会失去一切。