事情來(lái)源于對目標庫創(chuàng )建catalog,由ORA-00257可知,目標庫歸檔已滿(mǎn),于是清理歸檔。
引用
$ rman catalog mcdbra/mcdbra@drb200
Recovery Manager: Release 10.2.0.4.0 - Production on Sun Jun 13 09:35:28 2010
Copyright (c) 1982, 2007, Oracle. All rights reserved.
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04004: error from recovery catalog database: ORA-00257: archiver error. Connect internal only, until freed.
歸檔清理完成之后,再次創(chuàng )建catalog時(shí),出現ORA-00018
引用
RMAN> create catalog;
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-06004: ORACLE error from recovery catalog database: ORA-00018: maximum number of sessions exceeded
查看目標庫session參數,此參數為Oracle創(chuàng )建時(shí)默認參數,默認為(1.1 * PROCESSES) + 5。和processes一樣
不可動(dòng)態(tài)修改。 引用
SQL> show parameter sessions
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sessions integer 170
于是進(jìn)一步查看其alert日志
引用
Sun Jun 13 08:08:35 2010
Errors in file /ora10g/app/admin/mcstar/bdump/mcstar_j000_11612.trc:
ORA-00604: error occurred at recursive SQL level 1
ORA-00018: maximum number of sessions exceeded
Sun Jun 13 08:08:50 2010
knllgobjinfo: MISSING Streams multi-version data dictionary!!!
knlldmm: gdbnm=MCSTAR
knlldmm: objn=61897
knlldmm: objv=1
knlldmm: scn=10782945184381
knllgobjinfo: MISSING Streams multi-version data dictionary!!!
knlldmm: gdbnm=MCSTAR
knlldmm: objn=61902
knlldmm: objv=1
knlldmm: scn=10782945186624
knllgobjinfo: MISSING Streams multi-version data dictionary!!!
knlldmm: gdbnm=MCSTAR
knlldmm: objn=61905
knlldmm: objv=1
knlldmm: scn=10782945187855
于是abort oracle,open oracle時(shí)錯誤出現:
引用
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 318767104 bytes
Fixed Size 1260624 bytes
Variable Size 251659184 bytes
Database Buffers 50331648 bytes
Redo Buffers 15515648 bytes
Database mounted.
ORA-38760: This database instance failed to turn on flashback database
考慮到該目標庫為測試庫,暫時(shí)關(guān)閉閃回影響不大,再次嘗試打開(kāi)數據庫,錯誤依然,事情不妙!
引用
SQL> alter database flashback off;
Database altered.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-38760: This database instance failed to turn on flashback database
再次嘗試將數據庫置為閃回模式時(shí),報數據庫需要recover,此錯誤很正常,因為我以abort模式關(guān)閉Oracle,于是手工recover database;事情走向越來(lái)越不妙,繞了一圈又錯誤依舊!
引用
SQL> alter database flashback on;
alter database flashback on
*
ERROR at line 1:
ORA-38706: Cannot turn on FLASHBACK DATABASE logging.
ORA-38714: Instance recovery required.
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-38760: This database instance failed to turn on flashback database
進(jìn)一步嘗試將數據庫置為非歸檔模式,提示有保證的restore points。
引用
SQL> alter database noarchivelog;
alter database noarchivelog
*
ERROR at line 1:
ORA-38781: cannot disable media recovery - have guaranteed restore points
于是嘗試閃回點(diǎn)刪除
引用
SQL> select name from v$restore_point;
NAME
--------------------------------------------------------------------------------
STANDBY_20100517105118_1_1
STANDBY_20100518091959_1_1
STANDBY_20100520075557_1_1
STANDBY_20100520122225_1_1
SQL> drop restore point STANDBY_20100517105118_1_1;
drop restore point STANDBY_20100517105118_1_1
*
ERROR at line 1:
ORA-38701: Flashback database log 64 seq 64 thread 1:
"/Tbackup/MCSTAR/flashback/o1_mf_5z3sy2o2_.flb"
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
檢查操作系統閃回日志,可以看到此閃回日志不存在。
引用
[ora10g@mcprod udump]$ ls -l /Tbackup/MCSTAR/flashback/o1_mf_60tv013y_.flb
ls: /Tbackup/MCSTAR/flashback/o1_mf_60tv013y_.flb: No such file or directory
事情到這一步,只能拿出終極手段,重建controlfile,從理論上來(lái)講,重建controlfile時(shí)只要Oracle redolog保持完整,可以不用resetlogs打開(kāi)數據庫,即數據不會(huì )丟失。重建過(guò)程中,數據庫閃回功能將自動(dòng)關(guān)閉
引用
SQL> alter database backup controlfile to trace;
Database altered.
使用以下腳本重建控制文件,需要注意的是需要手動(dòng)添加tempfile
引用
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "MCSTAR" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 4674
LOGFILE
GROUP 4 '/oradata/mcstar/mcstar/redo04.log' SIZE 500M,
GROUP 5 '/oradata/mcstar/mcstar/redo05.log' SIZE 500M,
GROUP 6 '/oradata/mcstar/mcstar/redo06.log' SIZE 500M
-- STANDBY LOGFILE
-- GROUP 1 '/oradata/mcstar/mcstar/std01.log' SIZE 500M,
-- GROUP 2 '/oradata/mcstar/mcstar/std02.log' SIZE 500M,
-- GROUP 3 '/oradata/mcstar/mcstar/std03.log' SIZE 500M
DATAFILE
'/oradata/mcstar/mcstar/system01.dbf',
'/oradata/mcstar/mcstar/undotbs01.dbf',
'/oradata/mcstar/mcstar/sysaux01.dbf',
'/oradata/mcstar/mcstar/users01.dbf',
'/oradata/mcstar/mcstar/company.dbf',
'/oradata/mcstar/mcstar/streams.dbf',
'/oradata/mcstar/mcstar/zhou01.dbf',
'/oradata/mcstar/mcstar/mcdbra01.dbf'
CHARACTER SET ZHS16GBK
;
RECOVER DATABASE;
ALTER TABLESPACE TEMP ADD TEMPFILE '/oradata/mcstar/mcstar/temp01.dbf' REUSE;
當然了,Oracle 10g已經(jīng)做到足夠人性化,在重建控制文件完成后會(huì )在alert日志,提示創(chuàng )建tempfile
引用
Sun Jun 13 08:28:31 2010
*********************************************************************
WARNING: The following temporary tablespaces contain no files.
This condition can occur when a backup controlfile has
been restored. It may be necessary to add files to these
tablespaces. That can be done using the SQL statement:
ALTER TABLESPACE <tablespace_name> ADD TEMPFILE
Alternatively, if these temporary tablespaces are no longer
needed, then they can be dropped.
Empty temporary tablespace: TEMP
*********************************************************************
重建控制文件之后,順利將數據打開(kāi),可以看到閃回自動(dòng)關(guān)閉
引用
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
NO