Oracle 使用RMAN 将 DB 从10g 直接 Restore 到11g 示例

随着Oracle 版本的升级,RMAN 也得到增强,在Oracle11g中的RMAN 支持不同操作系统和不同DB 之前的使用,关于RMAN 的兼容性,参考:

Oracle RMAN 兼容性 及 不同版本和不同平台之间使用 常见问题说明

http://blog.youkuaiyun.com/tianlesoftware/article/details/7232602

 

这篇Blog 演示一个linux 下10g 恢复到11g中的示例。

 

Target 端:

OS: Oracle Linux 6.1 64位

DB: 11.2.0.3

 

Source 端:

OS:Oracle Linux 6.1 64位

DB: 10.2.0.5

 

注意:

Oracle 10.2.0.1 不能直接升级到11gR2,至少需要先升级到10.2.0.2 以后才可以升级到11gR2,关于Oracle 升级路线图参考我的Blog:

Oracle9i/10g/11g 数据库 升级路线图(upgrade roadmap)

http://blog.youkuaiyun.com/tianlesoftware/article/details/6729409

 

简单的来说就是2个步骤:

1.     将10g 数据库 还原11g上

2.     升级还原的10g数据库到11g。

 

具体操作步骤如下。

 

一.在Source 库用RMAN 备份数据库

 

1.1 在Source 库上执行utlu112i.sql脚本

 

在Source 备份之前,需要执行一下utlu112i.sql 脚本,如果不执行,那么在升级时执行  @?/rdbms/admin/catupgrd.sql 脚本时会报如下错误:

 

DOC>  The following error is generated if the pre-upgrade tool has not been

DOC>  run in the old ORACLE_HOME home prior to upgrading a pre-11.2 database:

DOC>

DOC>  SELECT TO_NUMBER('MUST_HAVE_RUN_PRE-UPGRADE_TOOL_FOR_TIMEZONE')

DOC>                       *

DOC>     ERROR at line 1:

DOC>     ORA-01722: invalid number

DOC>

DOC>    o Action:

DOC>       Shutdown database ("alter systemcheckpoint" and then "shutdown abort").

DOC>       Revert to the original oracle home andstart the database.

DOC>       Run pre-upgrade tool against thedatabase.

DOC>       Review and take appropriate actionsbased on the pre-upgrade

DOC>       output before opening the datatabase inthe new software version.

DOC>

 

将11g $ORACLE_HOME/rdbms/admin 下的utlu112i.sql脚本copy到10g的$ORACLE_HOME/rdbms/admin 下,并在10g上执行,这个脚本可以检查升级前的一些信息。如果不满足条件,会列出。

 

SQL> spool upgrade_info.log

SQL> @?/rdbms/admin/utlu112i.sql

Oracle Database 11.2 Pre-UpgradeInformation Tool 03-01-2012 19:53:57

Script Version: 11.2.0.3.0 Build: 001

.

**********************************************************************

Database:

**********************************************************************

--> name:          ANQING

--> version:       10.2.0.5.0

--> compatible:    10.2.0.5.0

--> blocksize:     8192

--> platform:      Linux x86 64-bit

--> timezone file: V4

.

**********************************************************************

Tablespaces: [make adjustments in thecurrent environment]

**********************************************************************

--> SYSTEM tablespace is adequate forthe upgrade.

.... minimum required size: 682 MB

--> UNDOTBS1 tablespace is adequate forthe upgrade.

.... minimum required size: 400 MB

--> SYSAUX tablespace is adequate forthe upgrade.

.... minimum required size: 454 MB

--> TEMP tablespace is adequate for theupgrade.

.... minimum required size: 60 MB

.

**********************************************************************

Flashback: OFF

**********************************************************************

**********************************************************************

Update Parameters: [Update Oracle Database11.2 init.ora or spfile]

Note: Pre-upgrade tool was run on a lowerversion 64-bit database.

**********************************************************************

--> If Target Oracle is 32-Bit, referhere for Update Parameters:

-- No update parameter changes are required.

.

 

--> If Target Oracle is 64-Bit, referhere for Update Parameters:

WARNING: --> "sga_target"needs to be increased to at least 596 MB

.

**********************************************************************

Renamed Parameters: [Update Oracle Database11.2 init.ora or spfile]

**********************************************************************

-- No renamed parameters found. No changesare required.

.

**********************************************************************

Obsolete/Deprecated Parameters: [UpdateOracle Database 11.2 init.ora or spfile]

**********************************************************************

--> background_dump_dest         11.1       DEPRECATED   replaced by "diagnostic_dest"

--> user_dump_dest               11.1       DEPRECATED   replaced by "diagnostic_dest"

.

 

**********************************************************************

Components: [The following databasecomponents will be upgraded or installed]

**********************************************************************

--> Oracle Catalog Views         [upgrade]  VALID

--> Oracle Packages and Types    [upgrade] VALID

--> JServer JAVA Virtual Machine[upgrade]  VALID

--> Oracle XDK for Java          [upgrade]  VALID

--> Oracle Workspace Manager     [upgrade] VALID

--> OLAP Analytic Workspace      [upgrade] VALID

--> OLAP Catalog                 [upgrade]  VALID

--> EM Repository                [upgrade]  VALID

--> Oracle Text                  [upgrade]  VALID

--> Oracle XML Database          [upgrade]  VALID

--> Oracle Java Packages         [upgrade]  VALID

--> Oracle interMedia            [upgrade]  VALID

--> Spatial                      [upgrade]  VALID

--> Data Mining                  [upgrade]  VALID

--> Expression Filter            [upgrade]  VALID

--> Rule Manager                 [upgrade]  VALID

--> Oracle OLAP API              [upgrade]  VALID

.

**********************************************************************

Miscellaneous Warnings

**********************************************************************

WARNING: --> Database is using atimezone file older than version 14.

.... After the release migration, it isrecommended that DBMS_DST package

.... be used to upgrade the 10.2.0.5.0database timezone version

.... to the latest version which comes withthe new release.

WARNING: --> EM Database ControlRepository exists in the database.

.... Direct downgrade of EM DatabaseControl is not supported. Refer to the

.... Upgrade Guide for instructions to savethe EM data prior to upgrade.

WARNING: --> Your recycle bin is turnedon and currently contains no objects.

.... Because it is REQUIRED that therecycle bin be empty prior to upgrading

.... and your recycle bin is turned on, youmay need to execute the command:

       PURGE DBA_RECYCLEBIN

.... prior to executing your upgrade toconfirm the recycle bin is empty.

.

**********************************************************************

Recommendations

**********************************************************************

Oracle recommends gathering dictionarystatistics prior to

upgrading the database.

To gather dictionary statistics execute thefollowing command

while connected as SYSDBA:

 

   EXECUTE dbms_stats.gather_dictionary_stats;

 

**********************************************************************

Oracle recommends reviewing any definedevents prior to upgrading.

 

To view existing non-default events executethe following commands

while connected AS SYSDBA:

 Events:

   SELECT (translate(value,chr(13)||chr(10),' ')) FROM sys.v$parameter2

     WHERE  UPPER(name) ='EVENT'AND  isdefault='FALSE'

 

 Trace Events:

   SELECT (translate(value,chr(13)||chr(10),' ')) from sys.v$parameter2

     WHERE UPPER(name) = '_TRACE_EVENTS' AND isdefault='FALSE'

 

Changes will need to be made in theinit.ora or spfile.

 

**********************************************************************

SQL>

 

如果直接在11g上执行这个脚本,那么会报如下错误:

SQL> @?/rdbms/admin/utlu112i.sql

ERROR:

ORA-04023: Object SYS.STANDARD could not bevalidated or authorized

 

MOS 对这个问题的说明:

ORA-04023 On SYS.STANDARD When RunningUTLU111I.SQL or UTLU112I.SQL [ID 984511.1]

 

在网上搜到这么一段:

WARNING: –> Database is using an oldtimezone file version.
…. Patch the 10.2.0.1.0 database to timezone file version 4
…. BEFORE upgrading the database.  Re-run utlu111i.sql after
…. patching the database to record the new timezone file version.

 

To find time zone file version on sourcedatabase (10g) run
SQL> select * from v$timezone_file;
       If time zone file version is lessthan 4 then apply time zone patch  5632264 manually for 10.2.0.1database。

--之前我们说10.2.0.1 不能直接升级到11gR2,通过这段文字,这个不能升级的原因可能就是与Time zone 相关。10.2.0.5的Time zone 值是4,满足条件。对于timezone 值小于4的,要打Patch 5632264。

 

手头没有10.2.0.1的库,暂时不能查询,之前也遇到过一个time zone的问题。

 

Oracle TTSORA-39322: Cannot use transportable tablespace with different timezone version 说明

http://blog.youkuaiyun.com/tianlesoftware/article/details/7298547

 

1.2 备份Source库

备份脚本参考:

Linux平台下RMAN 全备 和 增量备份shell 脚本

http://blog.youkuaiyun.com/tianlesoftware/article/details/5740630

 

Nocatalog下的RMAN 增量备份shell脚本

http://blog.youkuaiyun.com/tianlesoftware/article/details/6164931

 

 

二. 将Source库的备份集copy到Target库的相同位置

 

rac2:/u01/backup> scp  * 192.168.3.201:/u01/backup

oracle@192.168.3.201's password:

anqing_lev0_0jn4qd0c_1_1_20120301                                 100%  361MB 12.0MB/s   00:30   

anqing_lev0_0kn4qd0c_1_1_20120301                                 100%  174MB 10.2MB/s   00:17   

anqing_spfile_0qn4qd2v_1_1_20120301                               100%   96KB 96.0KB/s   00:00   

arch_0nn4qd2q_1_1_20120301                                       100%   15MB  15.5MB/s  00:01   

arch_0on4qd2q_1_1_20120301                                       100%  355KB 355.0KB/s   00:00   

ctl_file_0pn4qd2t_1_1_20120301                                    100%6944KB   6.8MB/s   00:00  

 

 

三.将10g备份restore 到11g库上

 

这个涉及RMAN 兼容性问题,参考我的blog:

Oracle RMAN 兼容性 及 不同版本和不同平台之间使用 常见问题说明

http://blog.youkuaiyun.com/tianlesoftware/article/details/7232602

 

Oracle 11gR2 Upgrade Companion [ID785351.1]

 

restore步骤也可以参考Blog,大致相同:

Oracle 单实例 从32位 迁移到 64位 方法(二)--使用 RMANRestore 示例

http://blog.youkuaiyun.com/tianlesoftware/article/details/7261970

 

1.1   还原控制文件

我们的RMAN 备份信息存储在控制文件里,所以要先还原控制文件,才可以使用RMAN, 其次,我们这里使用的是Source和target 的datafile 目录相同,所以不用修改pfile 等参数。 如果不同,参考上面的迁移文档。

 

RMAN> shutdown immediate

database closed

database dismounted

Oracle instance shut down

 

RMAN> startup nomount;

connected to target database (not started)

Oracle instance started

 

Total System Global Area    1402982400 bytes

 

Fixed Size                     2228304 bytes

Variable Size               1124077488 bytes

Database Buffers             268435456 bytes

Redo Buffers                   8241152 bytes

 

RMAN> restore controlfile from '/u01/backup/ctl_file_0fn4pobv_1_1_20120301';

 

Starting restore at 01-MAR-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=19 device type=DISK

 

channel ORA_DISK_1: restoring control file

channel ORA_DISK_1: restore complete,elapsed time: 00:00:02

output filename=/u02/app/oracle/oradata/anqing/control01.ctl

output filename=/u02/app/oracle/fast_recovery_area/anqing/control02.ctl

Finished restore at 01-MAR-12

 

1.2   Restore 数据库

 

RMAN> set dbid=707730149

executing command: SET DBID

--这里要注意一个问题,就是这个dbid值,因为我们的RMAN 备份集是从其他的数据库上copy 过来的,备份集中的记录的是Source 的DBID值,所以这里我们也要指定dbid 等于Source 的DBID值。 RMAN 连接时会显示该值,通过视图也可以查看。

 

RMAN> alter database mount;

database mounted

--如果不指定dbid,而使用默认的target 的dbid值,那么restore时会报错,如:

RMAN> restore database;

RMAN-03002: failure of restore command at03/01/2012 16:13:44

RMAN-12010: automatic channel allocationinitialization failed

RMAN-06189: current DBID 706107904 does notmatch target mounted database (707730149)

 

指定Source 的dbid 之后,就可以正常的进行restore database 操作了:

 

RMAN> restore database;

 

Starting restore at 01-MAR-12

Starting implicit crosscheck backup at01-MAR-12

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=19 device type=DISK

Crosschecked 12 objects

Finished implicit crosscheck backup at01-MAR-12

 

Starting implicit crosscheck copy at01-MAR-12

using channel ORA_DISK_1

Finished implicit crosscheck copy at01-MAR-12

 

searching for all files in the recoveryarea

cataloging files...

no files cataloged

 

using channel ORA_DISK_1

 

channel ORA_DISK_1: starting datafilebackup set restore

channel ORA_DISK_1: specifying datafile(s)to restore from backup set

channel ORA_DISK_1: restoring datafile00002 to /u02/app/oracle/oradata/anqing/undotbs01.dbf

channel ORA_DISK_1: restoring datafile00003 to /u02/app/oracle/oradata/anqing/sysaux01.dbf

channel ORA_DISK_1: reading from backuppiece /u01/backup/anqing_lev0_0an4po9q_1_1_20120301

channel ORA_DISK_1: piecehandle=/u01/backup/anqing_lev0_0an4po9q_1_1_20120301 tag=ANQING_LEV0

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete,elapsed time: 00:00:15

channel ORA_DISK_1: starting datafilebackup set restore

channel ORA_DISK_1: specifying datafile(s)to restore from backup set

channel ORA_DISK_1: restoring datafile00001 to /u02/app/oracle/oradata/anqing/system01.dbf

channel ORA_DISK_1: restoring datafile00004 to /u02/app/oracle/oradata/anqing/users01.dbf

channel ORA_DISK_1: reading from backuppiece /u01/backup/anqing_lev0_09n4po9q_1_1_20120301

channel ORA_DISK_1: piecehandle=/u01/backup/anqing_lev0_09n4po9q_1_1_20120301 tag=ANQING_LEV0

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete,elapsed time: 00:00:26

Finished restore at 01-MAR-12

 

1.3   Recoverdatabase 操作:

 

如果直接进行recover 操作,那么在最后会遇到类似如下的信息:

  RMAN-06054:media recoveryrequesting unknown archived log for thread 1 with sequence 7 and starting SCNof 832585

       这里是提醒恢复到一个未知的scn号。在alter database mount之后,通过set until scn或者set until time命令设置恢复到的scn号或时间。就可以避免这个错误。

 

所以在执行recover 之前,我们指定一个sequence:

去source 库查看:

SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /u02/archivelog

Oldest online log sequence     7

Next log sequence to archive   9

Current log sequence           9

 

这里当前是9,所以我们recover 到9,在Target 库进行recover 操作:

 

RMAN> run {

2> set until sequence 9;

3> recover database;

4> }

 

executing command: SET until clause

 

Starting recover at 01-MAR-12

using channel ORA_DISK_1

 

starting media recovery

 

channel ORA_DISK_1: starting archived logrestore to default destination

channel ORA_DISK_1: restoring archived log

archived log thread=1 sequence=7

channel ORA_DISK_1: reading from backuppiece /u01/backup/arch_0nn4qd2q_1_1_20120301

channel ORA_DISK_1: piecehandle=/u01/backup/arch_0nn4qd2q_1_1_20120301 tag=ARC_BAK

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete,elapsed time: 00:00:01

archived log filename=/u02/archivelog/1_7_776788394.arc thread=1 sequence=7

channel ORA_DISK_1: starting archived logrestore to default destination

channel ORA_DISK_1: restoring archived log

archived log thread=1 sequence=8

channel ORA_DISK_1: reading from backuppiece /u01/backup/arch_0on4qd2q_1_1_20120301

channel ORA_DISK_1: piecehandle=/u01/backup/arch_0on4qd2q_1_1_20120301 tag=ARC_BAK

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete,elapsed time: 00:00:01

archived log filename=/u02/archivelog/1_8_776788394.arc thread=1 sequence=8

media recovery complete, elapsed time:00:00:02

Finished recover at 01-MAR-12

 

注意这里不open db。

 

1.4 重建TEMP 表空间

--这一步很重要,做恢复,迁移,重建控制文件,都需要做这一步操作。

 

SQL> alter tablespace temp add tempfile'/u02/app/oracle/oradata/anqing/temp01.dbf' size 100m reuse autoextend on next10m maxsize 1000m;

 

也可以通过中转TMP 表空间进行替换,具体参考:

Oracle Temp 临时表空间

http://blog.youkuaiyun.com/tianlesoftware/article/details/4697417

 

 

四.升级 Instance 从10.2.0.5 到11.2.0.3

 

官方文档:

http://docs.oracle.com/cd/E11882_01/server.112/e17222/upgrade.htm#CACGGHJC

 

这个步骤11g的升级步骤相同,参考:

Oracle11.2.0.1 升级到11.2.0.3 示例

http://blog.youkuaiyun.com/tianlesoftware/article/details/6833591

 

 

4.1  用resetlogs upgrade 模式open db

SQL> alter database open resetlogs upgrade;

Database altered.

 

4.2 upgrade模式下运行脚本:catupgrd.sql

 

SQL> spool upgrade.log 

SQL> @?/rdbms/admin/catupgrd.sql

PL/SQL procedure successfully completed.

 

SQL>

SQL>

SQL>/*****************************************************************************/

SQL> /* Step 10 - SHUTDOWN THEDATABASE..!!!!!

SQL> */

SQL>/*****************************************************************************/

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

--脚本执行完毕后,自动关闭了数据库

SQL>

SQL>

SQL>

SQL> DOC

DOC>#######################################################################

DOC>#######################################################################

DOC>

DOC>  The above sql script is the final step of the upgrade. Please

DOC>  review any errors in the spool log file. If there are any errors in

DOC>  the spool file, consult the Oracle Database Upgrade Guide for

DOC>  troubleshooting recommendations.

DOC>

DOC>  Next restart for normal operation, and then run utlrp.sql to

DOC>  recompile any invalid application objects.

DOC>

DOC>  If the source database had an older time zone version prior to

DOC>  upgrade, then please run the DBMS_DST package.  DBMS_DST will upgrade

DOC>  TIMESTAMP WITH TIME ZONE data to use the latest time zone file shipped

DOC>  with Oracle.

DOC>

DOC>#######################################################################

DOC>#######################################################################

DOC>#

SQL>

SQL> Rem Set errorlogging off

SQL> SET ERRORLOGGING OFF;

SQL>

SQL> REM END OF CATUPGRD.SQL

SQL>

SQL> REM bug 12337546 - Exit currentsqlplus session at end of catupgrd.sql.

SQL> REM                This forces user to start a newsqlplus session in order

SQL> REM                to connect to the upgraded db.

SQL> exit

Disconnected from Oracle Database 11gEnterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Miningand Real Application Testing options

 

 

注意:

1.我们备份之前的一个操作,必须先utlu112i.sql脚本, 然后执行这个脚本,否则就会出现如下错误。

SELECT TO_NUMBER('MUST_HAVE_RUN_PRE-UPGRADE_TOOL_FOR_TIMEZONE')

                 *

ERROR at line 1:

ORA-01722: invalid number

 

2.执行这个脚本会产生大量的归档文件,50M的online redo log,切换时间在2分钟左右,所以要增加onlineredo group,从而保证足够的切换时间,不能让其出现Checkpoint not complete。 

在脚本运行期间还可能会调用之前的归档文件,所以也不要删除之前的归档。

 

3.这个脚本运行了整个2个小时,之前直接从11.2.0.1升级到11.2.0.3运行了80分钟。而在Oracle10g下,运行该脚本在40分钟左右。

 

导致执行占用这么长时间的原因如下:

1.     使用的是虚拟机

2.     之前没有注意到归档的问题,后面才看到checkpoint not complete,导致等待时间。

3.     运行脚本之前忘记修改java_pool_size 和 shared_pool_size.  增加这2个值,可以减少运行时间。

SQL>alter system setjava_pool_size=512M;
SQL>alter system set shared_pool_size=800M;

 

The upgrade scriptcreates and alters certain data dictionary tables. It also upgrades orinstallsthe following database components in the new Oracle Database11g Release 2(11.2) database:

(1)       OracleDatabase Catalog Views

(2)       OracleDatabase Packages andTypes

(3)       JServerJAVA Virtual Machine

(4)       OracleDatabase Java Packages

(5)       OracleXDK

(6)       OracleReal ApplicationClusters

(7)       OracleWorkspace Manager

(8)       OracleMultimedia

(9)       OracleXML Database

(10)    OLAP AnalyticWorkspace

(11)    Oracle OLAP API

(12)    OLAP Catalog

(13)    Oracle Text

(14)    Spatial

(15)    Oracle DataMining

(16)    Oracle LabelSecurity

(17)    MessagingGateway

(18)    OracleExpression Filter

(19)    Oracle RulesManager

(20)    OracleEnterprise Manager Repository

(21)    Oracle DatabaseVault

(22)    OracleApplication Express

 

4.3 执行utlu112s.sql脚本

这个脚本显示升级过程的一个摘要。不需要在upgrade 模式下。

 

SQL> @?/rdbms/admin/utlu112s.sql

.

Oracle Database 11.2 Post-Upgrade StatusTool           03-02-2012 10:12:32

.

Component                               Current      Version     Elapsed Time

Name                                    Status       Number      HH:MM:SS

.

Oracle Server

.  ORA-01187: cannot read from file because it failed verification tests

.  ORA-01110: data file 201:"/u02/app/oracle/oradata/anqing/temp01.dbf"

.  ORA-00942: table or view does not exist

.   ORA-00942: table or view does not exist

.  ORA-01187: cannot read from file because it failed verification tests

.  ORA-01110: data file 201:"/u02/app/oracle/oradata/anqing/temp01.dbf"

.  ORA-06512: at "SYS.DBMS_REPORT", line 841

.  ORA-06512: at "SYS.PRVT_REPORT_TAGS", line 25

.  ORA-06512: at line 1

.  ORA-01187: cannot read from file because it failed verification tests

.  ORA-01110: data file 201:"/u02/app/oracle/oradata/anqing/temp01.dbf"

.  ORA-06512: at "SYS.DBMS_REPORT", line 841

.  ORA-06512: at "SYS.PRVT_REPORT_REGISTRY", line 33

.  ORA-06512: at line 1

.  ORA-01187: cannot read from file because it failed verification tests

.  ORA-01110: data file 201:"/u02/app/oracle/oradata/anqing/temp01.dbf"

.  ORA-06512: at line 8

.  ORA-01187: cannot read from file because it failed verification tests

.  ORA-01110: data file 201:"/u02/app/oracle/oradata/anqing/temp01.dbf"

.  ORA-06512: at "SYS.DBMS_METADATA_UTIL", line 2435

.  ORA-06512: at line 1

.                                       INVALID      11.2.0.3.0  00:28:07

JServer JAVA Virtual Machine

.                                        VALID      11.2.0.3.0  00:19:25

Oracle Workspace Manager

.                                        VALID      11.2.0.3.0  00:01:04

OLAP Analytic Workspace

.  ORA-01187: cannot read from file because it failed verification tests

.  ORA-01110: data file 201:"/u02/app/oracle/oradata/anqing/temp01.dbf"

.  ORA-06512: at "SYS.DBMS_LOB", line 724

.  ORA-06512: at "SYS.DBMS_AW_BUILD", line 72

.  ORA-06512: at line 1

.                                      INVALID      11.2.0.3.0  00:00:28

OLAP Catalog

.                                        VALID      11.2.0.3.0  00:01:49

Oracle OLAP API

.                                        VALID      11.2.0.3.0  00:01:00

Oracle Enterprise Manager

.                                        VALID      11.2.0.3.0  00:15:51

Oracle XDK

.                                        VALID      11.2.0.3.0  00:03:52

Oracle Text

.                                         VALID     11.2.0.3.0  00:01:26

Oracle XML Database

.                                      INVALID      11.2.0.3.0  00:19:46

Oracle Database Java Packages

.                                        VALID      11.2.0.3.0  00:00:45

Oracle Multimedia

.                                      INVALID      11.2.0.3.0  00:07:18

Spatial

.                                        VALID      11.2.0.3.0  00:09:31

Oracle Expression Filter

.                                        VALID      11.2.0.3.0  00:00:23

Oracle Rules Manager

.                                        VALID      11.2.0.3.0  00:00:19

Gathering Statistics

.                                                               00:05:02

Total Upgrade Time: 01:56:22


PL/SQL procedure successfully completed.

 

这里列举了整个upgrade 脚本及每个组件的执行时间。总共用时2个小时。 但是这里报了一个与temp 表空间相关的错误。 因为我在升级过程中对这个表空间进行了offline 操作,这里可能有影响,这里攒不研究这个问题。

 

 

4.4 执行catuppst.sql脚本,不需要在upgrade 模式下执行


SQL> @?/rdbms/admin/catuppst.sql

 

TIMESTAMP

--------------------------------------------------------------------------------

COMP_TIMESTAMP POSTUP_BGN 2012-03-0123:25:22

 

PL/SQL procedure successfully completed.

 

This script will migrate the Baseline dataon a pre-11g database to the 11g database.

--这个脚本用来迁移一些Baseline 数据到11g数据库中。

…..

 

这个脚本运行2分钟左右。

 

4.5 编译无效对象

 

SQL> select count(*) from dba_invalid_objects;

 COUNT(*)

----------

     5875

sql> select distinct object_name  from dba_invalid_objects;

 

 

SQL> @?/rdbms/admin/utlrp.sql

 

TIMESTAMP

--------------------------------------------------------------------------------

COMP_TIMESTAMP UTLRP_BGN  2012-03-02 09:36:56

 

DOC>  The following PL/SQL block invokes UTL_RECOMP to recompile invalid

DOC>  objects in the database. Recompilation time is proportional to the

DOC>  number of invalid objects in the database, so this command may take

DOC>  a long time to execute on a database with a large number of invalid

DOC>  objects.

DOC>

DOC>  Use the following queries to track recompilation progress:

DOC>

DOC>  1. Query returning the number of invalid objects remaining. This

DOC>     number should decrease with time.

DOC>         SELECT COUNT(*) FROM obj$ WHERE statusIN (4, 5, 6);

DOC>

DOC>  2. Query returning the number of objects compiled so far. This number

DOC>     should increase with time.

DOC>         SELECT COUNT(*) FROMUTL_RECOMP_COMPILED;

--这2个SQL 可以查看脚本执行的状态。

DOC>  This script automatically chooses serial or parallel recompilation

DOC>  based on the number of CPUs available (parameter cpu_count) multiplied

DOC>  by the number of threads per CPU (parameter parallel_threads_per_cpu).

DOC>  On RAC, this number is added across all RAC nodes.

DOC>

DOC>  UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel

DOC>  recompilation. Jobs are created without instance affinity so that they

DOC>  can migrate across RAC nodes. Use the following queries to verify

DOC>  whether UTL_RECOMP jobs are being created and run correctly:

DOC>

DOC>  1. Query showing jobs created by UTL_RECOMP

DOC>         SELECT job_name FROMdba_scheduler_jobs

DOC>            WHERE job_name like'UTL_RECOMP_SLAVE_%';

DOC>

DOC>  2. Query showing UTL_RECOMP jobs that are running

DOC>         SELECT job_name FROM dba_scheduler_running_jobs

DOC>            WHERE job_name like'UTL_RECOMP_SLAVE_%';

DOC>#

 

       该脚本运行需要花30+分种。 都很费时间啊。

 

SQL> select count(*) fromdba_invalid_objects;

 

 COUNT(*)

----------

       67


脚本执行完毕之后还有67个无效对象。使用如下SQL 查看了一下:

sql> select distinct object_name  from dba_invalid_objects;

 

都是和OLAP 组件相关,关于该组件,这里不讨论。

 

 

4.6 检查组件状态

 

SQL> col comp_name for a40

SQL> set wrap off

SQL> select comp_name,version, statusfrom dba_registry;

 

COMP_NAME                                VERSION                        STATUS

---------------------------------------------------------------------- --------

Oracle Enterprise Manager                11.2.0.3.0                     VALID

OLAP Catalog                             11.2.0.3.0                     VALID

Spatial                                 11.2.0.3.0                    VALID

Oracle Multimedia                        11.2.0.3.0                     INVALID

Oracle XML Database                      11.2.0.3.0                     INVALID

Oracle Text                              11.2.0.3.0                     VALID

Oracle Data Mining                       11.2.0.3.0                     VALID

Oracle Expression Filter                 11.2.0.3.0                     VALID

Oracle Rules Manager                     11.2.0.3.0                     VALID

Oracle Workspace Manager                 11.2.0.3.0                     VALID

Oracle Database Catalog Views            11.2.0.3.0                     VALID

 

COMP_NAME                                VERSION                        STATUS

---------------------------------------------------------------------- --------

Oracle Database Packages and Types       11.2.0.3.0                     INVALID

JServer JAVA Virtual Machine             11.2.0.3.0                     VALID

Oracle XDK                               11.2.0.3.0                     VALID

Oracle Database Java Packages            11.2.0.3.0                     VALID

OLAP Analytic Workspace                  11.2.0.3.0                     INVALID

Oracle OLAP API                          11.2.0.3.0                     VALID

 

17 rows selected.

 

到这里,我们需要重建OLAP. 这里不在演示, 在之前的Blog里有详细的重建OLAP 组建的过程,参考如下Blog的第12小节:

Oracle 单实例 从32位 迁移到 64位 方法(一)--直接 copydatafiles

http://blog.youkuaiyun.com/tianlesoftware/article/details/7258654

 

MOS 有篇文档提供了重建OLAP组件的方法:

How To Remove Or To Reinstall TheOLAPOption To 10g And 11g [ID 332351.1]

 

至此,restore 过程结束,但是还有一些组件是无效的,需要重建,这里就不整理,DBA 本就是一个拼人品的工作,这次Dave人品稍稍差了一点,虽然这里有一些无效组件,但不影响DB的使用,  而且OLAP 本身就是一个可选的组件,只不过在安装DB时默认安装上了,其实如果用不到OLAP,这个组件都可以不装。

关于DB 组件的重建,会在近期整理出相关的Blog。

 


4.7 如果在升级过程中遇到问题,可以重新执行升级脚本,步骤如下:

1.Shut down the database as follows:

SQL>SHUTDOWNIMMEDIATE

 

2.Restart thedatabasein UPGRADE mode:

   SQL> STARTUPUPGRADE

 

3.Rerun catupgrd.sql: --升级DB

   SQL> SPOOLupgrade.log

   SQL>@catupgrd.sql

Note:

You canrerunthe catupgrd.sql script as many times as necessary. The firsttimeyou run the script, there should be no error messages returned. If yourerunthe script, then the ORA-00001 messageisdisplayed. You can safely ignore this message.

--脚本执行结束会自动shutdown immediate db,所以下面的操作在normal 状态执行即可。

 

4.Rerun utlu112s.sql: --报告升级的过程的摘要

   SQL>@utlu112s.sql

 

5.迁移10g的Baseline 到11g

SQL> @?/rdbms/admin/catuppst.sql

 

6.编译无效对象:

SQL> @?/rdbms/admin/utlrp.sql

 

相关的一个问题:

ORA-04023: Object SYS.STANDARD could not bevalidated or authorized during Upgrade [ID 1343500.1]

 

 

 

小结:

将10g Restore 到11g 的2个关键内容:

1.     必须在10g库上先执行@?/rdbms/admin/utlu112i.sql脚本,然后在备份,否则Restore之后的升级将失败。

2.     10g的版本必须大于10.2.0.2.

<think> 我们正在讨论Oracle 11g中RMAN的连接方法。根据引用[1],RMAN连接数据库的基本步骤包括Before you begin, About this task, Precedure, Result, Example, What to do next, Reference。引用[2]和[3]提到了RMAN在备份恢复中的使用,引用[4]提到了在DG部署中使用RMAN时可能遇到的错误。 根据用户需求,我们需要详细说明Oracle 11g中RMAN的连接方法。RMAN连接数据库有两种主要方式:本地连接和远程连接(通过网络连接)。 1. 本地连接(无密码验证,使用操作系统认证): 在数据库服务器上,以oracle用户身份登录,然后启动RMAN并连接到目标数据库(即需要备份恢复的数据库)。 命令如下: rman target / 这里,'/'表示使用操作系统认证,即当前操作系统用户(必须是dba组用户)无需提供用户名和密码即可连接到数据库。 2. 本地连接(使用数据库用户验证): rman target sys/sys_password 3. 远程连接(通过网络连接): 如果需要从远程客户端连接,则需要提供完整的连接字符串(TNS别名): rman target sys/sys_password@orcl 其中,orcl是网络服务名(在tnsnames.ora中配置)。 4. 连接辅助数据库(例如在Data Guard配置中连接备库): rman target sys/sys_password@primary auxiliary sys/sys_password@standby 但是,在引用[4]中提到了一个错误:RMAN-04006: error from auxiliary database: ORA-12528。这通常是因为辅助数据库(备库)没有启动到正确的状态(例如处于MOUNT状态,而监听器要求OPEN状态?)。但实际上,在备库处于MOUNT状态时,可以通过监听连接,但需要配置监听器,将实例状态设置为READY(或BLOCKED)状态允许连接。通常,我们需要在备库的监听器中设置INSTANCE_STATUS为READY(或者确保静态注册)来允许连接。 5. 使用恢复目录(Recovery Catalog): 如果需要使用恢复目录(一个存储RMAN备份元数据的独立数据库),则连接时需要指定恢复目录: rman target sys/sys_password@orcl catalog rman/rman_password@rcat 其中,rcat是恢复目录数据库的网络服务名。 6. 在RMAN命令提示符下连接: 也可以先启动RMAN,然后在RMAN提示符下连接: $ rman RMAN> connect target sys/sys_password@orcl 注意:在连接时,目标数据库必须处于启动状态(至少处于NOMOUNT状态),因为RMAN需要连接到目标数据库的控制文件(或恢复目录)来获取元数据。 引用[3]中提到了在恢复使用RMAN连接来恢复spfile的例子: RMAN> restore spfile to'/u01/app/oracle/product/11.2.0.4/db_1/dbs/spfileprb.ora' from '/u01/prb/rmanbk/fulldb_PRB_04rdg8d5_1_1'; 这个命令需要在连接到目标数据库后执行。 此外,引用[2]提到RMAN有三种用户接口:命令行、GUI(集成在OEM)、API(第三方备份软件)。 接下来,我们将按照步骤说明连接方法,并给出示例。 步骤: 1. 确保Oracle环境变量设置正确(如ORACLE_SID, ORACLE_HOME, PATH等)。 2. 打开终端(Linux/Unix)或命令提示符(Windows)。 3. 根据连接类型输入相应的RMAN连接命令。 示例1:本地连接(操作系统认证) $ export ORACLE_SID=orcl # 设置环境变量 $ rman target / 示例2:远程连接(使用TNS别名) $ rman target sys/password@orcl 示例3:连接目标数据库和恢复目录 $ rman target sys/password@orcl catalog rman/password@rcat 示例4:在RMAN提示符下连接 $ rman RMAN> connect target sys/password@orcl 连接成功后,RMAN会显示类似以下信息: connected to target database: ORCL (DBID=1234567890) 注意事项: - 使用操作系统认证要求当前操作系统用户属于dba组(Unix/Linux)或ORA_DBA组(Windows)。 - 远程连接需要确保网络配置(tnsnames.ora, listener.ora)正确,且监听器运行。 - 如果使用密码文件认证,需要确保密码文件存在且远程登录被允许(REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE或SHARED)。 - 在Data Guard环境中连接辅助数据库时,可能会遇到监听器拒绝连接的问题(如引用[4]的错误),需要检查监听器配置和数据库状态。 对于引用[4]中提到的错误(RMAN-04006: ORA-12528),解决方法是: - 确保辅助数据库实例已经启动(至少到NOMOUNT状态)。 - 在辅助数据库的监听器配置中,静态注册实例并设置INSTANCE_STATUS为READY。例如,在listener.ora中添加: SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = orcl) (ORACLE_HOME = /u01/app/oracle/product/11.2.0.4/db_1) (GLOBAL_DBNAME = orcl) ) ) - 然后重新加载监听器:lsnrctl reload。 以上就是在Oracle 11g中使用RMAN连接数据库的方法。 根据要求,我们需要生成相关问题。 </think> ### Oracle 11g中RMAN连接方法详解 在Oracle 11g中,RMAN(Recovery Manager)是数据库备份恢复的核心工具,以下是其连接方法的完整指南: --- #### 一、基础连接方式 1. **本地连接(操作系统认证)** 直接连接本地数据库,无需密码(需操作系统dba权限): ```bash rman target / ``` [^1] 2. **本地连接(密码认证)** 使用SYS用户连接: ```bash rman target sys/oracle@orcl as sysdba ``` 3. **远程连接** 通过TNS别名连接远程数据库: ```bash rman target sys/oracle@remote_db ``` 需在`tnsnames.ora`配置远程服务名: ```conf REMOTE_DB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = ORCL)) ) ``` --- #### 二、连接恢复目录(Recovery Catalog) 当使用中央元数据存储库时: ```bash rman target sys/oracle@orcl catalog rman/rmanpass@rcat_db ``` - **恢复目录数据库**需预先创建: ```sql CREATE USER rman IDENTIFIED BY rmanpass; GRANT recovery_catalog_owner TO rman; ``` ```bash rman catalog rman/rmanpass@rcat_db RMAN> CREATE CATALOG; ``` --- #### 三、Data Guard环境连接辅助数据库 在DG配置中连接备库(需解决引用[4]的ORA-12528错误): ```bash rman target sys/primary_pwd@primary_db auxiliary sys/standby_pwd@standby_db ``` **解决ORA-12528错误**: 1. 检查备库监听状态: ```bash lsnrctl status ``` 2. 在备库`listener.ora`添加静态注册: ```conf SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = ORCL) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) (GLOBAL_DBNAME = ORCL_STDBY) ) ) ``` 3. 重载监听: ```bash lsnrctl reload ``` [^4] --- #### 四、连接实践示例 1. **基础备份操作**: ```bash $ rman target / RMAN> BACKUP DATABASE PLUS ARCHIVELOG; ``` 2. **异机恢复(引用[3]方法)**: ```bash rman target / RMAN> RESTORE SPFILE FROM '/backup/fulldb_xxx_1_1'; RMAN> STARTUP NOMOUNT; RMAN> RESTORE CONTROLFILE FROM '/backup/ctl_xxx.bkp'; ``` [^3] --- #### 五、连接故障排查 | **错误代码** | **原因及解决方案** | |-------------------|-------------------------------------------| | ORA-12514 | TNS监听未配置服务,检查`listener.ora` | | ORA-01017 | 用户名/密码错误,检查密码文件 | | RMAN-04006 [^4] | 辅助实例未就绪,配置静态监听 | | ORA-12154 | `tnsnames.ora`配置错误或路径不正确 | > **最佳实践**: > 使用`tnsping remote_db`测试网络连通性,确保`ORACLE_HOME`和`TNS_ADMIN`环境变量正确设置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值