ID 1201253.1andr0id是什么意思思

Oracle从10g升级到11g详细步骤旧版本:10.2.0.4
数据库新版本:11.2.0.2
OS 版本: Solaris 10
参考文档:Complete Checklist for Manual Upgrades to 11gR2 [ID ]
第一部分 - 安装11gR2软件
这里对的就不详细说明了,可以参考相应的文档。
这里需要注意的是:如果你想在11gr2上打上最新的PSU或CPU,可以先在软件级别上打上PSU或CPU,这样就不用跑两次catbundle.sql,减少停机时间。
第二部分 - 初步检查
1. 在升级之前,确保所有的组件和对象都是valid:
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version from dba_registry order by comp_& --针对组件
select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from dba_objects where status='INVALID' order by owner,object_ --针对对象
如果有invalid的对象,运行utlrp.sql重新编译对象。
2. 确保sys和system下没有重复的对象:
select object_name, object_type from dba_objects where object_name||object_type in (select object_name||object_type& from dba_objects where wner = 'SYS') and wner = 'SYSTEM';
上面这条语句只能返回以下4条记录:
OBJECT_NAME&&&&&&&&&&&&&&&&&&&&&&&&&&&&& OBJECT_TYPE
---------------------------------------- ---------------
DBMS_REPCAT_AUTH&&&&&&&&&&&&&&&&&&&&&&&& PACKAGE BODY
DBMS_REPCAT_AUTH&&&&&&&&&&&&&&&&&&&&&&&& PACKAGE
AQ$_SCHEDULES_PRIMARY&&&&&&&&&&&&&&&&&&& INDEX
AQ$_SCHEDULES&&&&&&&&&&&&&&&&&&&&&&&&&&&
如果有其它记录返回,则必须根据下面这篇文档把重复记录删除:
How to Clean Up Duplicate Objects Owned by SYS and SYSTEM Schema [ID ]
第三部分 - 升级前工作
从11gR2的 Home下拷贝以下文件至一个临时文件夹:
$ORACLE_HOME/rdbms/admin/utlu112i.sql
登陆数据库,运行:
$&sqlplus&'/&as&sysdba'&
SQL&&spool&upgrade_info.log
SQL&&@utlu112i.sql
SQL&&spool&off
生成的upgrade_info.log里的内容很重要,后续步骤要根据该文件的内容做相应的修改,因此一定要保留下来。
从下面这篇文档里可以下载到脚本dbupgdiag.sql:
Script. to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) [ID ]
运行这个脚本:
cd &location of the script&
$ sqlplus / as sysdba
sql& alter session set nls_language='American';
sql& @dbupgdiag.sql
如果该脚本报告有invalid对象,运行以下命令重编译无效对象:
$&cd&$ORACLE_HOME/rdbms/admin
$&sqlplus&"/&as&sysdba"
SQL&&@utlrp.sql
从10.2开始,CONNECT角色的权限变少了,所以如果你是从10.2之前升级到的话,升级之后,需要重新授予缺少的权限,但是如果是从10.2及之后升级到11g的话,就不需要重新赋权限了,本例是从10.2.0.4升级到11g的,因此不需要该步骤。
生成重建dblink的脚本,以防万一数据库需要降级。和Step 4一样,本例是从10.2.0.4升级到11g的,因此不需要该步骤。
检查Timezone版本,主要参考:
Actions For DST Updates When Upgrading To Or Applying The 11.2.0.2 Patchset [ID ]
注意:11g的软件里已经自带了版本1-14的Timezone。
先检查一下当前timezone版本:
SQL&&conn&/&as&sysdba
Connected.
SQL&SELECT&version&FROM&v$timezone_
根据当前timezone的版本,又分三种情况:
1)等于14:这已经是11g需要的版本了,所以升级前后都不需要做任何事,这种情况很罕见。
2)高于14:升级前,必须得给11g软件打上该timezone版本的DST补丁,这种情况也很罕见。
3)低于14:大多数都是这种情况,在升级前不需要在11g软件层面打补丁,在升级后需要再数据库层面将Timezone升级至14,具体看后面的步骤
检查国家字符集是否是UTF8或AL16UTF16:
select value from NLS_DATABASE_PARAMETERS where parameter = 'NLS_NCHAR_CHARACTERSET';
如果是,则什么都不用做;如果不是,那你就惨了,跟着下面长长的这篇文档一步一步做吧:
The National Character Set ( NLS_NCHAR_CHARACTERSET ) in Oracle 9i,
and 11g [ID ]
收集统计信息,以减少停机时间:
$&sqlplus&"/as&sysdba"
SQL&&EXEC&DBMS_STATS.GATHER_DICTIONARY_STATS;
如果你有开启Vault,那么你需要先在11gR2软件下禁用Vault,等升级结束后,再启用Vault,否则会在升级过程中报错。
备份Enterprise Manager Database Control ,因为本例并没有使用EM,所以不需要该步骤。
配置网络ACL's,在本例中不需要配置。
使用以下语句生产分析数据字典的脚本 (as sysdba):
Set&verify&off
Set&space&0
Set&line&120
Set&heading&off
Set&feedback&off
Set&pages&1000
Spool&analyze.sql
SELECT&'Analyze&cluster&"'||cluster_name||'"&validate&structure&'
FROM&dba_clusters
WHERE&owner='SYS'
SELECT&'Analyze&table&"'||table_name||'"&validate&structure&'
FROM&dba_tables
WHERE&owner='SYS'
AND&partitioned='NO'
AND&(iot_type='IOT'&OR&iot_type&is&NULL)
SELECT&'Analyze&table&"'||table_name||'"&validate&structure&cascade&into&invalid_'
FROM&dba_tables
WHERE&owner='SYS'
AND&partitioned='YES';
生成的脚本名称是:analyze.sql
现在运行该脚本:
$&sqlplus&"/&as&sysdba"
SQL&&@$ORACLE_HOME/rdbms/admin/utlvalid.sql
SQL&&@analyze.sql
确保所有的snapshot都已被成功刷新,且replication已被关闭:
SELECT&DISTINCT(TRUNC(last_refresh))
FROM&dba_snapshot_refresh_
确保当前没有文件需要介质:
SELECT&*&FROM&v$recover_
上面语句没有返回结果才是正确的。
确保当前没有文件运行在模式下:
SELECT&*&FROM&v$backup&WHERE&status&!=&'NOT&ACTIVE';
上面语句没有返回结果才是正确的。
解决分布式事务。
先查询是否还有分布式事务:
SQL&&select&*&from&dba_2pc_&
如果有返回结果,则:
SQL&&SELECT&local_tran_id
&&&&&FROM&dba_2pc_
SQL&&EXECUTE&dbms_transaction.purge_lost_db_entry('');
SQL&&COMMIT;
检查是否有Standby数据库存在:
SELECT&SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1)
FROM&v$parameter
WHERE&name&LIKE&'log_archive_dest%'&AND&UPPER(value)&LIKE&'SERVICE%';
如果有返回结果,则在升级之前,要保证Standby和Primary是处于同步的状态。
禁用所有的batch和cron jobs
确保用户SYS和SYSTEM的默认表空间都是SYSTEM:
SQL&&SELECT&username,&default_tablespace
&&&&&FROM&dba_users
&&&&&WHERE&username&in&('SYS','SYSTEM');&
如果不是,则要用以下语句修改为SYSTEM:
SQL&&ALTER&user&SYS&default&tablespace&SYSTEM;
SQL&&ALTER&user&SYSTEM&default&tablespace&SYSTEM;
确保AUD$表建在SYS用户下和SYSTEM表空间下:
SQL&&SELECT owner,tablespace_name
&&&&&FROM&dba_tables
&&&&&WHERE&table_name='AUD$';
如果不是,则要做相应的修改。
检查是否有外部认证的SSL用户:
SQL&&SELECT&name&FROM&sys.user$
&&&&&WHERE&ext_username&IS&NOT&NULL
&&&&&AND&password&=&'GLOBAL';
如果有,则在升级之后记得要做Step 34。
记下数据文件、联机日志文件和控制文件的位置:
SQL&&SELECT&name&FROM&v$
SQL&&SELECT&file_name&FROM&dba_data_
SQL&&SELECT&group#,&member&FROM&v$
且备份listener.ora, tnsnames.ora, sqlnet.ora等文件。
停止listener:
$&lsnrctl&stop
停止其它可执行程序,如dbconsole, isqlplus等
$&emctl&stop&dbconsole
$&isqlplusctl&stop
关闭数据库:
$&sqlplus&"/as&sysdba"
SQL&&shutdown&
接着对全库做个冷备。
以10g的pfile为模板,并根据Step 2生成的upgrade_info.log里的建议,为11g创建一个新的pfile。
如果数据库原本是运行在archive模式下,最好先改为noarchive,这样可以减少升级停机时间,升级成功后再重新改回archive模式。
该步骤是针对Windows系统的,本例略过。
第四部分 - 升级
升级前的检查步骤基本上已经完成了,在跑升级脚本之前,需要把相关参数改为指向新的11g软件:
$&export&ORACLE_HOME=&location&of&Oracle&11.2&
$&export&PATH=$ORACLE_HOME/bin:$PATH
$&export&ORACLE_BASE=&Oracle_Base&set&during&installation&
接着修改oratab中的内容,使其指向新的11g Home目录:
Sample&/etc/oratab
#orcl:/opt/oracle/product/10.2/db_1:N
orcl:/opt/oracle/product/11.2/db_1:N
前面所有的一切准备,都是为了这一步能成功执行,先把数据库起到upgrade状态:
$&cd&$ORACLE_HOME/rdbms/admin
$&sqlplus&"/&as&sysdba"
SQL&&startup&UPGRADE
接着开始跑升级脚本:
SQL&&set&echo&on
SQL&&SPOOL&upgrade.log
SQL&&@catupgrd.sql
SQL&&spool&off
这个脚本大概持续1.5个小时,脚本的最后会自动关闭数据库。升级脚本跑完之后,再跑下面这个脚本,检查数据库状态:
$&sqlplus&"/as&sysdba"
SQL&&STARTUP
SQL&&@utlu112s.sql
如果该报告中包含错误,请查阅相关文档解决,直到没有错误之后,再跑下面的脚本:
SQL&&@catuppst.sql
前面的升级脚本是运行在upgrade模式下,该脚本主要是在open模式下做些升级动作,不需要花很多时间。
接着重新编译一下无效对象:
SQL&&@utlrp.sql
最后,再跑一下Step 3中的dbupgdiag.sql,确保数据库是好的。
第五部分 - 升级后工作
修改listener.ora,使listener执行新的11g Home,然后重新启动listener:
lsnrctl&start
再次检查Step 28中设置的环境变量确实是指向了新的11g Home。
Timezone数据库层面的升级。
注意:该步骤是否执行是和Step 6中的检查结果相关的,只有当Timezone的版本小于14时,才需要执行该步骤。
主要参考:Updating the RDBMS DST version in 11gR2 (11.2.0.1 and up) using DBMS_DST [ID ]
1)Timezone升级前的准备工作:
先检查一下当前的timezone版本:
conn / as sysdba
SELECT version FROM v$timezone_
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME&&&&&&&&&&&&&&&&& VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION&&&&&&&& 4
DST_SECONDARY_TT_VERSION&&&&&& 0
DST_UPGRADE_STATE&&&&&&&&&&&&& NONE
然后开始准备工作:
alter session set "_with_subquery"=
exec DBMS_DST.BEGIN_PREPARE(14);
接着检查准备状态:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME&&&&&&&&&&&&&&&&& VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION&&&&&&&& 4
DST_SECONDARY_TT_VERSION&&&&&& 14
DST_UPGRADE_STATE&&&&&&&&&&&&& PREPARE
-- truncate logging tables if they exist.
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_
TRUNCATE TABLE sys.dst$error_
-- log affected data
set serveroutput on
DBMS_DST.FIND_AFFECTED_TABLES
(affected_tables =& 'sys.dst$affected_tables',
log_errors =& TRUE,
log_errors_table =& 'sys.dst$error_table');
下面的语句都不能有返回结果:
SELECT * FROM sys.dst$affected_
SELECT * FROM sys.dst$error_
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1883';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1878';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER not in ('1878','1883');
-- end prepare window, the rows above will stay in those tables.
EXEC DBMS_DST.END_PREPARE;
-- check if this is ended
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME&&&&&&&&&&&&&&&&& VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION&&&&&&&& 4
DST_SECONDARY_TT_VERSION&&&&&& 0
DST_UPGRADE_STATE&&&&&&&&&&&&& NONE
2)真正开始升级Timezone
conn / as sysdba
set serveroutput on
purge dba_
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_
TRUNCATE TABLE sys.dst$error_
alter session set "_with_subquery"=
EXEC DBMS_DST.BEGIN_UPGRADE(14);
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME&&&&&&&&&&&&&&&&& VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION&&&&&&&& 14
DST_SECONDARY_TT_VERSION&&&&&& 4
DST_UPGRADE_STATE&&&&&&&&&&&&& UPGRADE
下面这条语句应该没有返回结果:
SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS='YES';
重启数据库:
shutdown immediate
升级相关的table:
alter session set "_with_subquery"=
set serveroutput on
VAR numfail number
DBMS_DST.UPGRADE_DATABASE(:numfail,
parallel =& TRUE,
log_errors =& TRUE,
log_errors_table =& 'SYS.DST$ERROR_TABLE',
log_triggers_table =& 'SYS.DST$TRIGGER_TABLE',
error_on_overlap_time =& FALSE,
error_on_nonexisting_time =& FALSE);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail);
如果没有错误,则结束升级:
VAR fail number
DBMS_DST.END_UPGRADE(:fail);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :fail);
最后一次检查:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
典型输出是:
PROPERTY_NAME&&&&&&&&&&&&&&&&& VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION&&&&&&&& 14
DST_SECONDARY_TT_VERSION&&&&&& 0
DST_UPGRADE_STATE&&&&&&&&&&&&& NONE
SELECT * FROM v$timezone_
FILENAME&&&&&&&&&&&&&&& VERSION
-------------------- ----------
timezlrg_14.dat&&&&&&&&&&&&& 14
该步骤可省略。
升级外部认证SSL用户。
由于本例是从10.2升级到11g,所以可忽略该步骤。
如果在Step 9中,你关闭了Vault,则必须在此步骤重新启用。
- Enabling and Disabling Oracle Database Vault in UNIX
创建spfile:
SQL&&create&spfile&from&
锁住系统用户,可忽略。
升级Oracle Text,可忽略。
升级Oracle Clusterware,可忽略。
配置EM,可忽略。
最后,记得修改compatible参数:
SQL& ALTER SYSTEM SET COMPATIBLE = &11.2.0& SCOPE=SPFILE;
阅读(...) 评论()查看:12548|回复:0
高级工程师
Oracle从10g升级到11g详细步骤
数据库旧版本:10.2.0.4
数据库新版本:11.2.0.2
OS 版本: Solaris 10
参考文档:Complete Checklist for Manual Upgrades to 11gR2 [ID ]
第一部分 - 安装11gR2软件
安装就不详细说明了,可以参考相应的文档。
这里需要注意的是:如果你想在11gr2上打上最新的PSU或CPU,可以先在软件级别上打上PSU或CPU,这样就不用跑两次catbundle.sql,减少停机时间。
第二部分 - 初步检查
1. 在升级之前,确保所有的组件和对象都是valid:
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version from dba_registry order by comp_ --针对组件
select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type from dba_objects where status='INVALID' order by owner,object_ --针对对象
如果有invalid的对象,运行utlrp.sql重新编译对象。
2. 确保sys和system下没有重复的对象:
select object_name, object_type from dba_objects where object_name||object_type in (select object_name||object_type from dba_objects where wner = 'SYS') and wner = 'SYSTEM';
上面这条语句只能返回以下4条记录:
OBJECT_NAME OBJECT_TYPE
---------------------------------------- ---------------
DBMS_REPCAT_AUTH PACKAGE BODY
DBMS_REPCAT_AUTH PACKAGE
AQ$_SCHEDULES_PRIMARY INDEX
AQ$_SCHEDULESTABLE
如果有其它记录返回,则必须根据下面这篇文档把重复记录删除:
How to Clean Up Duplicate Objects Owned by SYS and SYSTEM Schema [ID ]
第三部分 - 升级前工作
从11gR2的OracleHome下拷贝以下文件至一个临时文件夹:
$ORACLE_HOME/rdbms/admin/utlu112i.sql
登陆数据库,运行:
$ sqlplus '/ as sysdba'
SQL& spool upgrade_info.log
SQL& @utlu112i.sql
SQL& spool off
生成的upgrade_info.log里的内容很重要,后续步骤要根据该文件的内容做相应的修改,因此一定要保留下来。
从下面这篇文档里可以下载到脚本dbupgdiag.sql:
Script. to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql) [ID ]
运行这个脚本:
cd &location of the script&
$ sqlplus / as sysdba
sql& alter session set nls_language='American';
sql& @dbupgdiag.sql
如果该脚本报告有invalid对象,运行以下命令重编译无效对象:
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus &/ as sysdba&
SQL& @utlrp.sql
从10.2开始,CONNECT角色的权限变少了,所以如果你是从10.2之前升级到11g的话,升级之后,需要重新授予缺少的权限,但是如果是从10.2及之后升级到11g的话,就不需要重新赋权限了,本例是从10.2.0.4升级到11g的,因此不需要该步骤。
生成重建dblink的脚本,以防万一数据库需要降级。和Step 4一样,本例是从10.2.0.4升级到11g的,因此不需要该步骤。
检查Timezone版本,主要参考:
Actions For DST Updates When Upgrading To Or Applying The 11.2.0.2 Patchset [ID ]
注意:11g的软件里已经自带了版本1-14的Timezone。
先检查一下当前timezone版本:
SQL& conn / as sysdba
Connected.
SQL&SELECT version FROM v$timezone_
根据当前timezone的版本,又分三种情况:
1)等于14:这已经是11g需要的版本了,所以升级前后都不需要做任何事,这种情况很罕见。
2)高于14:升级前,必须得给11g软件打上该timezone版本的DST补丁,这种情况也很罕见。
3)低于14:大多数都是这种情况,在升级前不需要在11g软件层面打补丁,在升级后需要再数据库层面将Timezone升级至14,具体看后面的步骤
检查国家字符集是否是UTF8或AL16UTF16:
select value from NLS_DATABASE_PARAMETERS where parameter = 'NLS_NCHAR_CHARACTERSET';
如果是,则什么都不用做;如果不是,那你就惨了,跟着下面长长的这篇文档一步一步做吧:
The National Character Set ( NLS_NCHAR_CHARACTERSET ) in Oracle 9i,10g and 11g [ID ]
收集统计信息,以减少停机时间:
$ sqlplus &/as sysdba&
SQL& EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;
如果你有开启Vault,那么你需要先在11gR2软件下禁用Vault,等升级结束后,再启用Vault,否则会在升级过程中报错。
备份Enterprise Manager Database ControlData,因为本例并没有使用EM,所以不需要该步骤。
配置网络ACL's,在本例中不需要配置。
使用以下语句生产分析数据字典的脚本 (as sysdba):
Set verify off
Set space 0
Set line 120
Set heading off
Set feedback off
Set pages 1000
Spool analyze.sql
SELECT 'Analyze cluster &'||cluster_name||'& valida'
FROM dba_clusters
WHERE wner='SYS'
SELECT 'Analyze table &'||table_name||'& valida'
FROM dba_tables
WHERE wner='SYS'
AND partitioned='NO'
AND (iot_type='IOT' OR iot_type is NULL)
SELECT 'Analyze table &'||table_name||'& validate structure cascade into invalid_'
FROM dba_tables
WHERE wner='SYS'
AND partitioned='YES';
生成的脚本名称是:analyze.sql
现在运行该脚本:
$ sqlplus &/ as sysdba&
SQL& @$ORACLE_HOME/rdbms/admin/utlvalid.sql
SQL& @analyze.sql
确保所有的snapshot都已被成功刷新,且replication已被关闭:
SELECT DISTINCT(TRUNC(last_refresh))
FROM dba_snapshot_refresh_
确保当前没有文件需要介质恢复:
SELECT * FROM v$recover_
上面语句没有返回结果才是正确的。
确保当前没有文件运行在备份模式下:
SELECT * FROM v$backup WHERE status != 'NOT ACTIVE';
上面语句没有返回结果才是正确的。
解决分布式事务。
先查询是否还有分布式事务:
SQL& select * from dba_2pc_
如果有返回结果,则:
SQL& SELECT local_tran_id
FROM dba_2pc_
SQL& EXECUTE dbms_transaction.purge_lost_db_entry('');
SQL& COMMIT;
检查是否有Standby数据库存在:
SELECT SUBSTR(value,INSTR(value,'=',INSTR(UPPER(value),'SERVICE'))+1)
FROM v$parameter
WHERE name LIKE 'log_archive_dest%' AND UPPER(value) LIKE 'SERVICE%';
如果有返回结果,则在升级之前,要保证Standby和Primary是处于同步的状态。
禁用所有的batch和cron jobs
确保用户SYS和SYSTEM的默认表空间都是SYSTEM:
SQL& SELECT username, default_tablespace
FROM dba_users
WHERE username in ('SYS','SYSTEM');
如果不是,则要用以下语句修改为SYSTEM:
SQL& ALTER user SYS default tablespace SYSTEM;
SQL& ALTER user SYSTEM default tablespace SYSTEM;
确保AUD$表建在SYS用户下和SYSTEM表空间下:
SQL& SELECT owner,tablespace_name
FROM dba_tables
WHERE table_name='AUD$';
如果不是,则要做相应的修改。
检查是否有外部认证的SSL用户:
SQL& SELECT name FROM sys.user$
WHERE ext_username IS NOT NULL
AND password = 'GLOBAL';
如果有,则在升级之后记得要做Step 34。
记下数据文件、联机日志文件和控制文件的位置:
SQL& SELECT name FROM v$
SQL& SELECT file_name FROM dba_data_
SQL& SELECT group#, member FROM v$
且备份listener.ora, tnsnames.ora, sqlnet.ora等文件。
停止listener:
$ lsnrctl stop
停止其它可执行程序,如dbconsole, isqlplus等
$ emctl stop dbconsole
$ isqlplusctl stop
关闭数据库:
$ sqlplus &/as sysdba&
接着对全库做个冷备。
以10g的pfile为模板,并根据Step 2生成的upgrade_info.log里的建议,为11g创建一个新的pfile。
如果数据库原本是运行在archive模式下,最好先改为noarchive,这样可以减少升级停机时间,升级成功后再重新改回archive模式。
该步骤是针对Windows系统的,本例略过。
第四部分 - 升级
升级前的检查步骤基本上已经完成了,在跑升级脚本之前,需要把相关参数改为指向新的11g软件:
$ export ORACLE_HOME=&location of Oracle 11.2&
$ export PATH=$ORACLE_HOME/bin:$PATH
$ export ORACLE_BASE=&Oracle_Base set during installation&
接着修改oratab中的内容,使其指向新的11g Home目录:
Sample /etc/oratab
#orcl:/opt/oracle/product/10.2/db_1:N
orcl:/opt/oracle/product/11.2/db_1:N
前面所有的一切准备,都是为了这一步能成功执行,先把数据库起到upgrade状态:
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus &/ as sysdba&
SQL& startup UPGRADE
接着开始跑升级脚本:
SQL& set echo on
SQL& SPOOL upgrade.log
SQL& @catupgrd.sql
SQL& spool off
这个脚本大概持续1.5个小时,脚本的最后会自动关闭数据库。升级脚本跑完之后,再跑下面这个脚本,检查数据库状态:
$ sqlplus &/as sysdba&
SQL& STARTUP
SQL& @utlu112s.sql
如果该报告中包含错误,请查阅相关文档解决,直到没有错误之后,再跑下面的脚本:
SQL& @catuppst.sql
前面的升级脚本是运行在upgrade模式下,该脚本主要是在open模式下做些升级动作,不需要花很多时间。
接着重新编译一下无效对象:
SQL& @utlrp.sql
最后,再跑一下Step 3中的dbupgdiag.sql,确保数据库是好的。
第五部分 - 升级后工作
修改listener.ora,使listener执行新的11g Home,然后重新启动listener:
lsnrctl start
再次检查Step 28中设置的环境变量确实是指向了新的11g Home。
Timezone数据库层面的升级。
注意:该步骤是否执行是和Step 6中的检查结果相关的,只有当Timezone的版本小于14时,才需要执行该步骤。
主要参考:Updating the RDBMS DST version in 11gR2 (11.2.0.1 and up) using DBMS_DST [ID ]
1)Timezone升级前的准备工作:
先检查一下当前的timezone版本:
conn / as sysdba
SELECT version FROM v$timezone_
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE 'DST_%' ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
然后开始准备工作:
alter session set &_with_subquery&=
exec DBMS_DST.BEGIN_PREPARE(14);
接着检查准备状态:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 14
DST_UPGRADE_STATE PREPARE
-- truncate logging tables if they exist.
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_
TRUNCATE TABLE sys.dst$error_
-- log affected data
set serveroutput on
DBMS_DST.FIND_AFFECTED_TABLES
(affected_tables =& 'sys.dst$affected_tables',
log_errors =& TRUE,
log_errors_table =& 'sys.dst$error_table');
下面的语句都不能有返回结果:
SELECT * FROM sys.dst$affected_
SELECT * FROM sys.dst$error_
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1883';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER= '1878';
SELECT * FROM sys.dst$error_table where ERROR_NUMBER not in ('1878','1883');
-- end prepare window, the rows above will stay in those tables.
EXEC DBMS_DST.END_PREPARE;
-- check if this is ended
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 4
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
2)真正开始升级Timezone
conn / as sysdba
set serveroutput on
purge dba_
TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;
TRUNCATE TABLE sys.dst$affected_
TRUNCATE TABLE sys.dst$error_
alter session set &_with_subquery&=
EXEC DBMS_DST.BEGIN_UPGRADE(14);
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
一个典型的输出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 14
DST_SECONDARY_TT_VERSION 4
DST_UPGRADE_STATE UPGRADE
下面这条语句应该没有返回结果:
SELECT OWNER, TABLE_NAME, UPGRADE_IN_PROGRESS FROM ALL_TSTZ_TABLES where UPGRADE_IN_PROGRESS='YES';
重启数据库:
shutdown immediate
升级相关的table:
alter session set &_with_subquery&=
set serveroutput on
VAR numfail number
DBMS_DST.UPGRADE_DATABASE(:numfail,
parallel =& TRUE,
log_errors =& TRUE,
log_errors_table =& 'SYS.DST$ERROR_TABLE',
log_triggers_table =& 'SYS.DST$TRIGGER_TABLE',
error_on_overlap_time =& FALSE,
error_on_nonexisting_time =& FALSE);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail);
如果没有错误,则结束升级:
VAR fail number
DBMS_DST.END_UPGRADE(:fail);
DBMS_OUTPUT.PUT_LINE('Failures:'|| :fail);
最后一次检查:
SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME LIKE 'DST_%'
ORDER BY PROPERTY_NAME;
典型输出是:
PROPERTY_NAME VALUE
------------------------------ ------------------------------
DST_PRIMARY_TT_VERSION 14
DST_SECONDARY_TT_VERSION 0
DST_UPGRADE_STATE NONE
SELECT * FROM v$timezone_
FILENAME VERSION
-------------------- ----------
timezlrg_14.dat 14
该步骤可省略。
升级外部认证SSL用户。
由于本例是从10.2升级到11g,所以可忽略该步骤。
如果在Step 9中,你关闭了Vault,则必须在此步骤重新启用。
Note - Enabling and Disabling Oracle Database Vault in UNIX
创建spfile:
锁住系统用户,可忽略。
升级Oracle Text,可忽略。
升级Oracle Clusterware,可忽略。
配置EM,可忽略。
最后,记得修改compatible参数:
SQL& ALTER SYSTEM SET COMPATIBLE = ’11.2.0’ SCOPE=SPFILE;
本帖最后由 苍岚 于
13:58 编辑

我要回帖

更多关于 cmit id是什么意思 的文章

 

随机推荐