######################################################################################
# [
######################################################################################
參見
################################
# [
# 有備份
################################
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
數據庫已經打開
SQL> archive log list
數據庫日志模式 存檔模式
自動存檔 啟用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
下一個存檔日志序列
當前日志序列
SQL> select us#
US# NAME STATUS$
已選擇
SQL> select SEGMENT_NAME
SEGMENT_NAME STATUS
SYSTEM ONLINE
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
已選擇
RMAN> backup format
啟動 backup 於
使用通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
在備份集中包含當前的 SPFILE
備份集中包括當前控制文件
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
通道 ORA_DISK_
通道 ORA_DISK_
段 handle=C:\NOARCH_
通道 ORA_DISK_
完成 backup 於
RMAN>
RMAN>
RMAN> copy current controlfile to
啟動 copy 於
使用通道 ORA_DISK_
通道 ORA_DISK_
輸出文件名=C:\CURRCONT
完成 copy 於
RMAN> exit
恢復管理器完成
SQL> create table arch (status varchar(
表已創建
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> commit;
提交完成
SQL> insert into arch select * from arch;
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> commit;
提交完成
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> commit;
提交完成
SQL> select GROUP#
GROUP# SEQUENCE# ARC STATUS
SQL> shutdown
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
~~~~~~~~~~~~~~~~~~~~~~~~
模擬刪除UNDOTBS
這時其他文件都是一致性的
只需要UNDOTBS
~~~~~~~~~~~~~~~~~~~~~~~~
刪除UNDOTBS
還原一個UNDOTBS
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
ORA
ORA
SQL> recover database ;
完成介質恢復
SQL> alter database open;
數據庫已更改
SQL> select count(*)
COUNT(*) ST
################################
# [
# 回滾數據文件丟失
# 數據庫沒有活動事務
################################
略
也能完全恢復
~~~~~~~~~~~~~~~~~~~~~~
雖然是abort
將數據寫到數據文件中
在在線日志中可以拿到了
不需要進行回滾
~~~~~~~~~~~~~~~~~~~~~~
################################
# [
# 回滾數據文件丟失
# 數據庫有活動事務
################################
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
數據庫已經打開
SQL> archive log list
數據庫日志模式 存檔模式
自動存檔 啟用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
下一個存檔日志序列
當前日志序列
RMAN> backup format
啟動 backup 於
使用通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
在備份集中包含當前的 SPFILE
備份集中包括當前控制文件
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
通道 ORA_DISK_
通道 ORA_DISK_
段 handle=C:\NOARCH_
通道 ORA_DISK_
完成 backup 於
RMAN>
RMAN>
RMAN> copy current controlfile to
啟動 copy 於
使用通道 ORA_DISK_
通道 ORA_DISK_
輸出文件名=C:\CURRCONT
完成 copy 於
RMAN> exit
恢復管理器完成
SQL> create table arch (status varchar(
表已創建
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> commit;
提交完成
SQL> insert into arch select * from arch;
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> commit;
提交完成
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
提交完成
SQL> select GROUP#
GROUP# SEQUENCE# ARC STATUS
SQL> shutdown abort
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
~~~~~~~~~~~~~~~~~~~~~~~~
模擬刪除UNDOTBS
這時其他文件都是一致性的
只需要UNDOTBS
~~~~~~~~~~~~~~~~~~~~~~~~
刪除UNDOTBS
還原一個UNDOTBS
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
ORA
ORA
SQL> recover database ;
完成介質恢復
SQL> alter database open;
數據庫已更改
SQL> select count(*)
COUNT(*) ST
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在前滾後後滾時要讀自己回滾段裡的數據
而自己的數據文件已經損壞了
所以在mount前將初始化參數
rollback_segments=(system)
_corrupted_rollback_segments=(rbs
而
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
################################
# [
# 回滾數據文件丟失
# 數據庫有活動事務
################################
SQL> create table arch (status varchar(
表已創建
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> commit;
提交完成
SQL> insert into arch select * from arch;
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> commit;
提交完成
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> shutdown abort
ORACLE 例程已經關閉
SQL>
丟失undo文件
SQL> startup mount;
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
SQL> alter database datafile
數據庫已更改
SQL> alter database open;
數據庫已更改
SQL> select US#
US# NAME TS# STATUS$ FLAGS
SQL> select count(*) from arch;
select count(*) from arch
*
ERROR 位於第
ORA
ORA
SQL> shutdown
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
SQL>
編輯INITtestdb_undo
*
*
*
_allow_resetlogs_corruption=true
_corrupted_rollback_segments=(_SYSSMU
_offline_rollback_segments=true
SQL> startup pfile=
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
SQL> alter database open;
數據庫已更改
SQL> select count(*) from arch;
COUNT(*)
再創建新的undo表空間
drop 壞的undo tablespace
最好做一個整庫的導出
################################
# [
# 回滾數據文件丟失
# 該回撤段數據文件的所有歷史日志
# 數據庫有活動事務
################################
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
數據庫已經打開
SQL> show parameter undo
NAME TYPE VALUE
undo_management string AUTO
undo_retention integer
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS
SQL> alter tablespace UNDOTBS
DBF
表空間已更改
SQL>
SQL>
SQL> create table arch (status varchar(
表已創建
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> commit;
提交完成
SQL> insert into arch select * from arch;
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> commit;
提交完成
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> SHUTDOWN ABORT
ORACLE 例程已經關閉
刪除UNDOTBS
SQL> STARTUP
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
ORA
ORA
SQL> ALTER DATABASE CREATE DATAFILE
數據庫已更改
SQL> RECOVER DATABASE;
完成介質恢復
SQL> ALTER DATABASE OPEN;
數據庫已更改
SQL> COL NAME FORMAT A
SQL> SELECT NAME
NAME STATUS
C:\ORACLE\ORADATA\TESTDB\SYSTEM
C:\ORACLE\ORADATA\TESTDB\UNDOTBS
C:\ORACLE\ORADATA\TESTDB\INDX
C:\ORACLE\ORADATA\TESTDB\TOOLS
C:\ORACLE\ORADATA\TESTDB\USERS
C:\ORACLE\ORADATA\TESTDB\UNDOTBS
已選擇
################################
# [
# 損壞
################################
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
數據庫已經打開
SQL> create table arch (status varchar(
表已創建
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> commit;
提交完成
SQL> insert into arch select * from arch;
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> commit;
提交完成
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> commit;
提交完成
SQL> select GROUP#
GROUP# SEQUENCE# ARC STATUS
SQL>
SQL>
SQL>
SQL> select GROUP#
GROUP# SEQUENCE# ARC STATUS
SQL> select us#
US# NAME STATUS$
已選擇
SQL> select SEGMENT_NAME
SEGMENT_NAME STATUS
SYSTEM ONLINE
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
已選擇
SQL> show parameter undo
NAME TYPE VALUE
undo_management string AUTO
undo_retention integer
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS
~~~~~~~~~~~~~~~~~~~~~
這裡模擬回撤數據文件損壞
~~~~~~~~~~~~~~~~~~~~~
用ultraedit破壞UNDOTBS
SQL> shutdown
ORA
SQL> startup
ORA
ORA
SQL> exit
從Oracle
With the Partitioning
JServer Release
C:\Documents and Settings\lifeng
SQL*Plus: Release
Copyright (c)
已連接
SQL> startup
ORA
SQL> shutdown
ORA
SQL> shutdown abort
ORACLE 例程已經關閉
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
數據庫已經打開
SQL> select SEGMENT_NAME
SEGMENT_NAME STATUS
SYSTEM ONLINE
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
SQL> select us#
US# NAME STATUS$
已選擇
~~~~~~~~~~~~~~~~~~~~~
這裡我們注意能夠打開數據庫
但是這裡狀態是需要恢復
~~~~~~~~~~~~~~~~~~~~~~
SQL> create pfile=
文件已創建
SQL> create undo tablespace UNDOTBS
表空間已創建
SQL> select count(*)
COUNT(*) ST
SQL> insert into arch select
insert into arch select
*
ERROR 位於第
ORA
SQL> shutdown
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
編輯c:\undopfile
將設置*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> startup pfile=
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
數據庫已經打開
SQL> insert into arch select
已創建
SQL> select
RBS SLOT SEQ LMODE REQUEST
SQL> select SEGMENT_NAME
SEGMENT_NAME TABLESPACE_NAME STATUS
SYSTEM SYSTEM ONLINE
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
SEGMENT_NAME TABLESPACE_NAME STATUS
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
_SYSSMU
SQL> select US#
US# NAME TS# STATUS$ FLAGS
US# NAME TS# STATUS$ FLAGS
已選擇
這些非online的回撤段也需要在初始化參數中強制_corrupted_rollback_segments
且_offline_rollback_segments=true
這裡跟
編輯INITtestdb_undo
*
*
*
_allow_resetlogs_corruption=true
_corrupted_rollback_segments=(_SYSSMU
_offline_rollback_segments=true
然後打開數據庫
看看TOM的例子
sys@ORA
Database closed
Database dismounted
ORACLE instance shut down
sys@ORA
Disconnected from Oracle
With the Partitioning
JServer Release
[ora
control
users
control
xdb
control
undotbs
[ora
[ora
SQL*Plus: Release
Copyright (c)
idle> connect / as sysdba
Connected to an idle instance
idle> startup
ORACLE instance started
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
Database mounted
ORA
ORA
idle> show parameter undo
NAME TYPE VALUE
undo_management string AUTO
undo_retention integer
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS
idle> alter system set undo_management = manual scope=spfile;
System altered
Note: disabling the undo tablespace here
segments
idle> shutdown
ORA
Database dismounted
ORACLE instance shut down
idle> exit
Disconnected from Oracle
With the Partitioning
JServer Release
[ora
sqlplus /nolog
SQL*Plus: Release
Copyright (c)
idle> connect / as sysdba;
Connected to an idle instance
idle> startup
ORACLE instance started
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
Database mounted
ORA
ORA
Note: we still have to get rid of that thing
idle> alter database datafile
Database altered
idle> alter database open;
Database altered
idle> drop tablespace undotbs
Tablespace dropped
idle> create UNDO tablespace undotbs
Tablespace created
idle> alter system set undo_management = auto scope=spfile;
System altered
Now
bounce
idle> shutdown
Database closed
Database dismounted
ORACLE instance shut down
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
From:http://tw.wingwit.com/Article/program/Oracle/201311/17338.html