[測試
RMAN> backup tablespace users;
啟動 backup 於
分配的通道: ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
RMAN
RMAN
RMAN
RMAN
ORA
RMAN> backup database include current controlfile;
啟動 backup 於
使用通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
在備份集中包含當前的 SPFILE
備份集中包括當前控制文件
RMAN
RMAN
RMAN
RMAN
ORA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
如果是shutdown abort
此時在mount下表空間數據是不完整的
同樣也不能備份整個數據庫
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RMAN> restore tablespace users;
啟動 restore 於
使用通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
正將數據文件
通道 ORA_DISK_
段 handle=C:\ORACLE\ORA
LL
通道 ORA_DISK_
完成 restore 於
RMAN>
RMAN> recover tablespace users;
啟動 recover 於
使用通道 ORA_DISK_
正在開始介質的恢復
完成介質的恢復
完成 recover 於
RMAN> alter database open;
數據庫已打開
[測試
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
ORA
SQL> alter database open;
數據庫已更改
SQL> create table arch (status varchar(
表已創建
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select
已創建
SQL> commit;
提交完成
RMAN> backup database ;
啟動 backup 於
分配的通道: ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
在備份集中包含當前的 SPFILE
備份集中包括當前控制文件
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
通道 ORA_DISK_
通道 ORA_DISK_
段 handle=C:\ORACLE\ORA
通道 ORA_DISK_
完成 backup 於
RMAN> copy CURRENT CONTROLFILE TO
啟動 copy 於
使用通道 ORA_DISK_
通道 ORA_DISK_
輸出文件名=C:\CF
完成 copy 於
SQL> select count(*) from arch;
COUNT(*)
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> shutdown
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
模擬控制文件損壞c:\cf
還原備份的控制文件
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
SQL> recover database using backup controlfile;
ORA
ORA
ORA
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA
ORA
ORA
ORA
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA
ORA
OSD
O/S
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位於第
ORA
ORA
SQL> recover database using backup controlfile until cancel;
ORA
ORA
ORA
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消
SQL> alter database open resetlogs;
數據庫已更改
SQL> archive log list
數據庫日志模式 存檔模式
自動存檔 啟用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
下一個存檔日志序列
當前日志序列
SQL> select count(*)
COUNT(*) ST
~~~~~~~~~~~~~~~~~~
在線日志的數據丟失
使用trace可以不丟失數據
[測試
[測試
# 該文件的日志全部還保留在非當前在線日志和當前在線日志中
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
SQL> alter database noarchivelog;
數據庫已更改
C:\Documents and Settings\lifeng
恢復管理器: 版本
Copyright (c)
連接到目標數據庫: TESTDB (DBID=
正在使用目標數據庫控制文件替代恢復目錄
RMAN> backup format
啟動 backup 於
分配的通道: ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
在備份集中包含當前的 SPFILE
備份集中包括當前控制文件
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
通道 ORA_DISK_
通道 ORA_DISK_
段 handle=C:\NOARCH_
通道 ORA_DISK_
完成 backup 於
RMAN> copy CURRENT CONTROLFILE TO
啟動 copy 於
使用通道 ORA_DISK_
通道 ORA_DISK_
輸出文件名=C:\CF
完成 copy 於
SQL> archive log list
數據庫日志模式 非存檔模式
自動存檔 啟用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
當前日志序列
SQL> alter database open;
數據庫已更改
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 例程已經關閉
刪除user
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
RMAN> restore datafile
啟動 restore 於
分配的通道: ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
正將數據文件
通道 ORA_DISK_
段 handle=C:\NOARCH_
通道 ORA_DISK_
完成 restore 於
RMAN> recover datafile
啟動 recover 於
使用通道 ORA_DISK_
正在開始介質的恢復
完成介質的恢復
完成 recover 於
RMAN> alter database open;
數據庫已打開
SQL> select count(*)
COUNT(*) ST
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們看到非歸檔模式
還存在當前在線日志和者非當前在線日志中
實現完全恢復
日志組
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
那我們試試如果在線日志被覆蓋了的情況下是否可以完全恢復
[測試
# 該文件的日志部分由於日志輪轉被覆蓋了
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
SQL> alter database noarchivelog;
數據庫已更改
SQL> archive log list
數據庫日志模式 非存檔模式
自動存檔 啟用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
當前日志序列
C:\Documents and Settings\lifeng
恢復管理器: 版本
Copyright (c)
連接到目標數據庫: TESTDB (DBID=
正在使用目標數據庫控制文件替代恢復目錄
RMAN> backup format
啟動 backup 於
分配的通道: ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
在備份集中包含當前的 SPFILE
備份集中包括當前控制文件
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
輸入數據文件 fno=
通道 ORA_DISK_
通道 ORA_DISK_
段 handle=C:\NOARCH_
通道 ORA_DISK_
完成 backup 於
SQL> alter database open;
數據庫已更改
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> commit;
提交完成
SQL> alter system switch logfile;
系統已更改
SQL> insert into arch select * from arch;
已創建
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 例程已經關閉
刪除user
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
RMAN> restore datafile
啟動 restore 於
分配的通道: ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
通道 ORA_DISK_
正將數據文件
通道 ORA_DISK_
段 handle=C:\NOARCH_
通道 ORA_DISK_
完成 restore 於
RMAN> recover datafile
啟動 recover 於
使用通道 ORA_DISK_
正在開始介質的恢復
無法找到存檔日志
存檔日志線程 =
RMAN
RMAN
RMAN
RMAN
RMAN
RMAN> restore datafile
啟動 restore 於
使用通道 ORA_DISK_
正在略過數據文件
通道 ORA_DISK_
通道 ORA_DISK_
正將數據文件
正將數據文件
正將數據文件
正將數據文件
通道 ORA_DISK_
段 handle=C:\NOARCH_
通道 ORA_DISK_
完成 restore 於
RMAN> recover datafile
啟動 recover 於
使用通道 ORA_DISK_
正在開始介質的恢復
無法找到存檔日志
存檔日志線程 =
RMAN
RMAN
RMAN
RMAN
RMAN
~~~~~~~~~~~~~~~~~~~
還需要備份的控制文件
~~~~~~~~~~~~~~~~~~~
還原備份的控制文件
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
SQL> recover database using backup controlfile;
ORA
ORA
ORA
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA
ORA
OSD
O/S
ORA
ORA
OSD
O/S
SQL> recover database using backup controlfile until cancel;
ORA
ORA
ORA
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
介質恢復已取消
SQL> alter database open resetlogs;
數據庫已更改
SQL> select count(*)
select count(*)
*
ERROR 位於第
ORA
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
所以如果是非歸檔模式
當前在線日志和非當前在線日志中
能完全恢復
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#####################################################
# [測試
#####################################################
日志處理恢復測試實例
ALTER DATABASE CLEAR LOGFILE GROUP <group_number>;
This statement overcomes two situations where dropping redo logs is not possible:
SQL> insert into test select * from test;
已創建
SQL> select value from v$sesstat where STATISTIC#=
VALUE
SQL> insert into test select * from test;
已創建
SQL> select value from v$sesstat where STATISTIC#=
VALUE
SQL> ALTER DATABASE ADD LOGFILE GROUP
數據庫已更改
SQL> ALTER DATABASE ADD LOGFILE GROUP
數據庫已更改
SQL> ALTER DATABASE ADD LOGFILE GROUP
ALTER DATABASE ADD LOGFILE GROUP
\ORA
*
ERROR 位於第
ORA
SQL> l
SQL> ALTER DATABASE ADD LOGFILE GROUP
ALTER DATABASE ADD LOGFILE GROUP
\ORA
*
ERROR 位於第
ORA
SQL> alter database backup controlfile to trace;
數據庫已更改
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER
已選擇
SQL>
SQL> alter database drop logfile group
數據庫已更改
SQL> alter database drop logfile group
數據庫已更改
SQL> alter database drop logfile group
數據庫已更改
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER
SQL> ALTER DATABASE ADD LOGFILE GROUP
ALTER DATABASE ADD LOGFILE GROUP
*
ERROR 位於第
ORA
ORA
OSD
O/S
這裡我把原有的C:\ORA
SQL> ALTER DATABASE ADD LOGFILE GROUP
數據庫已更改
SQL> ALTER DATABASE ADD LOGFILE GROUP
ALTER DATABASE ADD LOGFILE GROUP
\ORA
*
ERROR 位於第
ORA
無法創建文件
ORA
OSD
SQL> ALTER DATABASE ADD LOGFILE GROUP
數據庫已更改
SQL> ALTER DATABASE ADD LOGFILE GROUP
數據庫已更改
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
SQL> alter database clear logfile group
數據庫已更改
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
注意如果這個非活動的日志組ARC狀態為NO
也就是說不能被歸檔
ALTER DATABASE CLEAR LOGFILE UNARCHIVED GROUP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
注意如果這時有個offline文件需要這個非
活動的日志組ARC狀態為NO的日志使這個文件
帶到online狀態
這個文件的UNRECOVERABLE DATAFILE參數才行
如
ALTER DATABASE CLEAR LOGFILE UNARCHIVED
GROUP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
有時執行ALTER DATABASE CLEAR LOGFILE 會出錯
原因是該日志磁盤IO損壞
該日志到新的路徑
或者ALTER DATABASE RENAME FILE
TO
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
SQL> alter system switch logfile;
系統已更改
SQL> /
系統已更改
SQL> /
系統已更改
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
#########################################################
# [測試
#########################################################
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER
已選擇
SQL> shutdown immediate
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
刪除C:\ORA
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
ORA
ORA
ORA
SQL> select count(*) from test;
select count(*) from test
*
ERROR 位於第
ORA
SQL> alter database clear logfile group
數據庫已更改
這時會自動增加
兩個日志文件
SQL> alter database open;
數據庫已更改
SQL> select GROUP#
GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
SQL> /
GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
刪除日志組
SQL> shutdown immediate
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
ORA
ORA
ORA
SQL> alter database clear logfile group
數據庫已更改
SQL> alter database open;
數據庫已更改
SQL>
SQL>
SQL>
SQL> select count(*) from test;
COUNT(*)
SQL> alter system switch logfile;
系統已更改
SQL> select GROUP#
GROUP# THREAD# SEQUENCE# MEMBERS STATUS ARC
此時用ultraedit把日志組
SQL> delete test;
delete test
*
ERROR 位於第
ORA
C:\>sqlplus
SQL*Plus: Release
Copyright (c)
已連接到空閒例程
SQL>
SQL>
SQL>
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
ORA
ORA
ORA
SQL> alter database clear logfile group
也可以用clear logfile清理後打開
SQL> alter database clear logfile group
數據庫已更改
SQL> alter database open;
數據庫已更改
SQL>
SQL>
SQL> select count(*) from test;
COUNT(*)
此時用ultraedit把日志組
SQL> conn /as sysdba
已連接
SQL> insert into test select rownum from dba_tables;
已創建
SQL> insert into test select rownum from dba_tables;
已創建
SQL> insert into test select rownum from dba_tables;
已創建
SQL> insert into test select rownum from test;
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
已創建
SQL> /
insert into test select rownum from test
*
ERROR 位於第
ORA
這時由於當前日志文件已經損壞
SQL> conn /as sysdba
已連接到空閒例程
SQL> startup
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
ORA
ORA
ORA
ORA
SQL> alter database clear logfile group
alter database clear logfile group
*
ERROR 位於第
ORA
ORA
ORA
SQL> alter database clear UNARCHIVED logfile group
alter database clear UNARCHIVED logfile group
*
ERROR 位於第
ORA
ORA
ORA
SQL> recover database;
ORA
ORA
ORA
SQL> recover database until cancel;
ORA
ORA
ORA
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
ORA
ORA
OSD
O/S
ORA
ORA
ORA
SQL> show parameter spfile
NAME TYPE VALUE
spfile string %ORACLE_HOME%\DATABASE\SPFILE
ORACLE_SID%
SQL> create pfile=
文件已創建
SQL> create pfile=
文件已創建
編輯c:\pfiletest
增加三個參數
_allow_resetlogs_corruption=true
_corrupted_rollback_segments=true
_offline_rollback_segments=true
SQL> shutdown immediate
ORA
已經卸載數據庫
ORACLE 例程已經關閉
SQL>
SQL>
SQL>
SQL> startup pfile=
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
ORA
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位於第
ORA
SQL>
SQL>
SQL> exit
從Oracle
With the Partitioning
JServer Release
C:\>sqlplus
SQL*Plus: Release
Copyright (c)
已連接到空閒例程
SQL> startup pfile=
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
數據庫已經打開
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> select count(*) from test;
COUNT(*)
###############################################
# [測試
# 使用noresetlogs
###############################################
參見控制文件恢復部分
###############################################
# [測試
###############################################
SQL> startup nomount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
SQL> CREATE CONTROLFILE REUSE DATABASE
控制文件已創建
SQL> alter database open resetlogs;
數據庫已更改
SQL> archive log list
數據庫日志模式 存檔模式
自動存檔 啟用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
下一個存檔日志序列
當前日志序列
SQL> shutdown
數據庫已經關閉
已經卸載數據庫
ORACLE 例程已經關閉
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
SQL> alter system archive log stop;
系統已更改
SQL> archive log list
數據庫日志模式 存檔模式
自動存檔 禁用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
下一個存檔日志序列
當前日志序列
SQL> alter database open;
數據庫已更改
SQL> select count(*) from arch;
COUNT(*)
SQL> select bytes
BYTES SEGMENT_NAME
SQL> delete from arch; 刪除
SQL> archive log list
數據庫日志模式 存檔模式
自動存檔 禁用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
下一個存檔日志序列
當前日志序列
另一個SESSION也無法插入數據
SQL> insert into arch select * from arch where rownum =
在alertlog中顯示
Thread
Current log#
Thread
Current log#
Thread
Checkpoint not complete
Current log#
Thread
All online logs needed archiving
Current log#
SQL> select count(*) from arch;
查詢也被掛氣
SQL> alter system switch logfile;
還是被掛住
SQL> alter system archive log all;
系統已更改
~~~~~~~~~~~~~~~~~~~~~~~~~~
此時日志
alter system switch logfile; 也執行成功
select count(*) from arch;也執行成功
但是後面的在線仍然需要手工歸檔
~~~~~~~~~~~~~~~~~~~~~~~~~~
Thread
Current log#
Thread
Checkpoint not complete
Current log#
Thread
Current log#
Thread
All online logs needed archiving
Current log#
##################################################################
# [測試
# 所有在線日志的大小總和時
##################################################################
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
SQL> alter database noarchivelog;
數據庫已更改
SQL> alter database open ;
數據庫已更改
SQL> select count(*) from arch;
COUNT(*)
SQL> delete from arch;
被掛起
alertlog中的記錄
Mon Mar
Thread
Current log#
Mon Mar
ARC
Mon Mar
Thread
Current log#
Mon Mar
ARC
Mon Mar
Thread
Checkpoint not complete
Current log#
Thread
Current log#
SQL> delete from arch;
已刪除
~~~~~~~~~~~~~~~~~~~~~~~~
在一個事務中可以刪除大於所有在線日志的總和的數據
~~~~~~~~~~~~~~~~~~~~~~~~
##################################################################
# [測試
# 所有在線日志的大小總和時
##################################################################
SQL> startup mount
ORACLE 例程已經啟動
Total System Global Area
Fixed Size
Variable Size
Database Buffers
Redo Buffers
數據庫裝載完畢
SQL> alter system archive log stop;
系統已更改
SQL> alter database open;
數據庫已更改
SQL> archive log list
數據庫日志模式 非存檔模式
自動存檔 禁用
存檔終點 C:\oracle\oradata\testdb\archive
最早的概要日志序列
當前日志序列
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Current log#
Thread
Checkpoint not complete
Current log#
Thread
Current log#
Mon Mar
SMON: Parallel transaction recovery tried
Mon Mar
Thread
Checkpoint not complete
SQL> delete from arch;
已刪除
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我們看到最終還是可以刪除
From:http://tw.wingwit.com/Article/program/Oracle/201311/17403.html