具体实施:
1 查看数据库是否已经完全备份, 如果未做备份, 则不要做升级
2 研究升级的可行性问题, 确认以下问题
数据库是否能够升级?
升级的要求有哪些?
应用程序是否支持新版本的数据库?
做预迁移查看应用是否能够满足需求
查找资料(官方文档), 查看能否升级, 高于 10.2.0.2 的版本可以直接升级到 11gR2 版本
以上问题确认可行后才可升级
3 安装高版本的数据库到新的安装目录, 本例中为 / oracle/u02/app/oracle 目录
注: oracle11g 的升级为全新安装, 从低版本 (9i 或 10g) 升级到 11g 或者从 11g 低版本升级到 11g 高版本都是全新安装
4 启动原来的数据库, 创建 pfile 文件(/tmp/a.txt)
注: pfile 文件为数据库的参数文件, 记录数据库的 pgasga 控制文件位置等信息在启动数据库时用到
此处创建 pfile 文件的目的是用新版本的数据库软件启动原来的数据库
oracle 用户登录系统, 链接数据库
sqlplus / as sysdba; 注: oracle 用户执行此命令链接到数据库
SQL> startup 注: 启动数据库, 如果数据库已经启动则会报错
SQL> create pfile=/tmp/a.txt from spfile; 注: 创建新的参数文件 / tmp/a.txt
5 跑预升级脚本(建议脚本), 该脚本的作用是检查数据库升级时有哪些参数需要修改
SQL> spool /tmp/test.txt 注: 打开 spool, 将该命令之后执行的 sql 语句及结果存放在 / tmp/test.txt 文件中
- SQL> @/oracle/u02/app/oracle/product/10.2/db_1/rdbms/admin/utlu112i.sql
- SQL> spool off;
6 查看 / tmp/test.txt 文件, 根据提示修改 / tmp/a.txt 文件, 修改表空间大小, 清空回收站, 收集统计信息
修改 / tmp/a.txt 文件:
删除原实例名开头的所有行
删除. background_dump_dest 开头的行
删除. user_dump_dest 开头的行
删除. core_dump_dest 开头的行
添加. diagnostic_dest=/oracle/u02/app/oracle
按照 / tmp/a.txt 文件中的建议加大 sga_target 和 pga_aggregate_target 参数大小
修改. compatible 的值:.compatible=11.2.0.0.0
修改. audit_file_dest 的路径:.audit_file_dest=/oracle/u02/app/oracle/admin/fsdb/adump
修改表空间的大小
SQL> select file_name,tablespace_name,bytes/1024/1024 from dba_data_files; 查看各个表空间数据文件的大小
SQL> select file_name,tablespace_name,bytes/1024/1024 from dba_temp_files; 查看 temp 表空间的数据文件大小
SQL> alter database datafile /oradata/fsdb/sysaux01.dbf resize 500M; 修改 sysaux 表空间数据文件大小为 500M
SQL> alter database tempfile /oradata/fsdb/temp01.dbf resize 400M; 修改 temp 表空间数据文件大小为 400M
清空回收站:
- SQL> purge dba_recyclebin;
- SQL> purge user_recyclebin;
收集统计信息:
SQL> execute dbms_stats.gather_dictionary_stats;
具体修改为多大要根据 / tmp/test.txt 文件中的建议修改
7 关闭应用, 关闭原来的数据库
SQL> shutdown immediate;
8oracle 用户复制 oracle10g 的 ORACLE_BASE 目录下的 admin 文件夹到 11g 下的 ORACLE_BASE 下
cp -r /oracle/u01/app/oracle/admin /oracle/u02/app/oracle
9oracle 用户修改 oracle 用户的环境变量, 将 ORACLE_HOME 和 ORACLE_BASE 修改到 11g 的安装目录下
vi /home/oracle/.bash_profile 注: 编辑 oracle 用户的环境变量
export ORACLE_BASE=/oracle/u02/app/oracle
export ORACLE_HOME=/oracle/u02/app/oracle/product/10.2/db_1 注: 后面两行为修改后的内容
10 使用 root 用户修改 / etc/oratab 文件和 / etc/oraInst.loc 文件, 将相关的路径修改为 11g 的路径
vi /etc/oratab 注: 修改 / etc/oratab 文件, 该文件与 oracle 数据库是否开机启动相关
fsdb:/oracle/u02/app/oracle/product/10.2/db_1:N 注: 对该行做出修改, 将路径改为 11g 的路径
vi /etc/oraInst.loc 注: 修改 / etc/oraInst.loc 文件, 该文件控制 oraInventory 的存放路径
inventory_loc=/oracle/u02/app/oracle/oraInventory 注: 将 oraInventory 存放路径修改为 11g 的路径
11 使用 / tmp/a.txt 参数文件启动数据库到升级模式, 创建新的 spfile 文件, 跑升级脚本完成后数据库自动关闭
oracle 用户登录到空实例 sqlplus / as sysdba
SQL> startup upgrade pfile=/tmp/a.txt; 注: 使用 / tmp/a.txt 参数文件启动数据库到升级模式
SQL> create spfile from pfile=/tmp/a.txt; 注: 创建新的 spfile 文件, 方便以后启动数据库
SQL> @?/rdbms/admin/catupgrd.sql 注: 执行升级脚本, 完成数据库的升级
12 重建 oraInventory 目录
oracle 用户到 $ORACLE_HOME/oui/bin 目录下, 执行以下命令;
./runInstaller -slient -attachHome ORACLE_HOME="/oracle/u02/app/oracle/product/10.2/db_1" ORACLE_HOME_NAME="oracleHome";
注: ORACLE_HOME 为 11g 软件的 ORACLE_HOME,ORACLE_HOME_NAME 可以任意指定, 不会有什么影响
执行完成后重启数据库, 查看数据库版本, 查看数据库是否正常
13 确认正常无误后删除 10g 数据库的安装目录
来源: http://www.bubuko.com/infodetail-2538049.html