2.4 执行手动直接升级
在手动升级期间,必须执行在DBUA中执行的步骤。在这种数据库直接升级过程中,用户必须负责(并控制)升级过程的每个步骤。
在升级前,应使用Pre-Upgrade Information Tool来分析数据库。前文曾提到,在和Oracle Database 12c软件一起安装的SQL脚本中提供了该工具,需要针对升级的数据库运行该工具。在要升级的数据库中以拥有SYSDBA权限的用户身份运行该文件。结果将显示应该在升级之前解决的潜在问题。
如果在升级前再无需要解决的问题,应关闭数据库,并在继续升级之前执行脱机备份。这确保无论数据库升级产生多么严重的问题,都能恢复到启动升级过程前的旧数据库状态。数据库升级过程的自动化版本包含一个选项,允许使用RMAN备份当前数据库。
一旦获得在需要时可还原的备份,就可以开始进行升级了。该过程非常详细,并基于脚本。因此,应根据环境和版本来查阅Oracle安装和升级文档。具体步骤如下:
(1)将配置文件(init.ora、spfile.ora、密码文件)从原位置复制到新的Oracle软件主目录。默认情况下,在UNIX平台上可在/dbs子目录中找到配置文件,而在Windows平台上则可在\database目录中找到配置文件。
(2)从配置文件中删除废弃的和不建议使用的初始参数,这些参数会在Pre-Upgrade Information Tool中标识。所有初始参数至少升级为Pre-Upgrade Information Tool报告中指定的最小值。在参数文件中使用完整的路径名。
(3)如果正在升级群集数据库,则设置CLUSTER_DATABASE初始参数为FALSE。升级后,必须将该初始参数重新设置为TRUE。
(4)关闭实例。
(5)如果正使用Windows,则应停止与实例相关联的服务,并使用如下命令在命令提示符中删除Oracle服务:
NET STOP OracleService<service_name> ORADIM –DELETE –SID <instance_name>
接下来使用ORADIM命令创建新的Oracle Database 12c服务,如下所示(表2-1展示了此命令的变量):
C:\> ORADIM -NEW -SID <SID> -INTPWD <PASSWORD> -MAXUSERS <USERS>
-STARTMODE AUTO -PFILE <ORACLE_HOME>\<DATABASE>\INIT<SID>.ORA
表2-1 ORADIM命令的变量
(6)如果你的操作系统是UNIX或Linux,应确保环境变量ORACLE_HOME和PATH指向新版本的12.1目录,将ORACLE_SID设置为已有数据库的SID,文件/etc/oratab指向新的Oracle Database 12c主目录。另外,设置ORACLE_HOME的任何服务器端或客户端脚本也都必须改变为指向新Oracle软件主目录。
(7)作为Oracle Database 12c软件的拥有者登录到系统。
(8)将目录改为Oracle软件主目录下的$ORACLE_HOME/rdbms/admin子目录。
(9)作为具有SYSDBA权限的用户连接到SQL*Plus。
(10)提交STARTUP UPGRADE命令。
(11)使用SPOOL命令记录下面各步骤的结果。
(12)在12c环境中运行Perl脚本catctl.pl,将SQL脚本catupgrd.sql指定为参数之一。catctl.pl脚本也允许并行升级,以缩短升级时间。该脚本自动确定必须运行哪些升级脚本,运行这些脚本后关闭数据库。
SQL> $ORACLE_HOME/perl/bin/perl catctl.pl catupgrd.sql
(13)运行Perl脚本后关闭数据库。接着按如下方式重启数据库。升级过程到此结束。
SQL> startup
运行升级后工具utlu121s.sql,看一下是否存在任何升级问题。修正这些问题后,再次运行该脚本,确保这些问题得以修正。
(14)收集修正的对象统计信息,以尽量减少对象重编译时间:
SQL> exec dbms_stats.gather_fixed_objects_stats;
(15)运行utlrp.sql,编译所有需要重编译的PL/SQL或Java过程:
SQL> @utlrp.sql
(16)验证所有对象和类都是有效的:
SQL> @utluiobj.sql
注意:
升级后,切勿用较早版本的软件启动Oracle 12c数据库。