近期,在进行一个WINDOWS环境的oracle 11.2.0.1版本数据库迁移到LINUX环境的oracle 11.2.0.4版本并升级时,因为需要从oracle 11.2.0.1版本升级到oracle 11.2.0.4版本,使用手动运行catupgrd.sql脚本,此时报错:
SELECT TO_NUMBER('DATA_VAULT_OPTION_ON')FROM v$option
*
ERROR at line 1:
ORA-01722: invalid number
分析原因,为该数据库实例配置了Oracle Database Vault功能;需要关闭Oracle Database Vault功能后,重新执行升级操作。
但是在当前环境,是进行了迁移,原有的WINDOWS环境开启了Oracle Database Vault,所以数据库数据字典中Oracle Database Vault的配置;但是LINUX环境的ORACLE软件安装时没有选择Oracle Database Vault组件的,所以此时关闭是报错的。需要先开启、再关闭,再进行升级。
相关操作如下:
1、Oracle Database Vault 介绍:用来解决现有的极为棘手的安全问题,即防止内部的威胁,满足合规性要求以及实现职责划分。Oracle Database Vault 能防止 DBA 查看应用程序数据,解决了必须保护涉及合作伙伴、员工和顾客的敏感业务信息或隐私数据的客户最为担心的问题。Oracle Database Vault 可防止高权限的应用程序 DBA 访问其他的应用程序、执行其权限之外的任务。Oracle Database Vault 可以轻松快捷地保护现有应用程序,且不影响应用程序的功能。
2、参考官方文档,开启和关闭此功能的步骤如下:Disabling and Enabling Oracle Database Vault
Checking if Oracle Database Vault Is Enabled or Disabled
You can check if Oracle Database Vault is enabled or disabled by querying the V$OPTION
data dictionary view. Any user can query this view. If Oracle Database Vault is enabled, the query returns TRUE
. Otherwise, it returns FALSE
.
Remember that the PARAMETER
column value is case sensitive. For example:
SELECT * FROM V$OPTION WHERE PARAMETER = 'Oracle Database Vault';
If Oracle Database Vault is enabled, the following output appears:
PARAMETER VALUE ----------------------------- ----------------------- Oracle Database Vault TRUE
3、先开启Enable Oracle Database Vault
Enable the Oracle Database Vault option as follows:
-
UNIX: Run the following commands. The
make
command enables both Oracle Database Vault (dv_on
) and Oracle Label Security (lbac_on
). You must enable Oracle Label Security before you can use Database Vault.cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk dv_on lbac_on cd $ORACLE_HOME/bin relink all 4、再关闭Oracle Database Vault
-
Disable the Oracle Database Vault option.
UNIX: Run the following commands: -
cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk dv_off cd $ORACLE_HOME/bin relink all
For Oracle RAC installations, run these commands on all nodes
-
5、重新运行升级脚本,可以正常运行完成升级
-
# 查看是否开启了OracleDatabase Vault功能:
SQL> col parameter for a30
SQL> col value for a20
SQL> SELECT * FROM V$OPTION WHEREPARAMETER = 'Oracle Database Vault';
PARAMETER VALUE
--------------------------------------------------
Oracle Database Vault TRUE# 关闭数据库实例
SQL> shutdown immediate
SQL> exit$ lsnrctl stop
# 编译ins_rdbms.mk
[oracle@oracle ~]$ cd $ORACLE_HOME/rdbms/lib/
[oracle@oracle lib]$ make -f ins_rdbms.mk dv_off
/usr/bin/ar d/U01/app/oracle/product/11.2.3/db_1/rdbms/lib/libknlopt.a kzvidv.o
/usr/bin/arcr/U01/app/oracle/product/11.2.3/db_1/rdbms/lib/libknlopt.a/U01/app/oracle/product/11.2.3/db_1/rdbms/lib/kzvndv.o# 执行relink
[oracle@oracle lib]$ cd $ORACLE_HOME/bin
[oracle@oracle bin]$ relink all
writing relink log to:/U01/app/oracle/product/11.2.3/db_1/install/relink.log# 启动数据库实例
$ sqlplus / as sysdba
SQL> startup upgrade# 检查 Oracle DatabaseVault状态
SQL> SELECT * FROM V$OPTION WHERE PARAMETER= 'Oracle Database Vault';
PARAMETER VALUE
------------------------------ ----------
Oracle Database Vault FALSE