資料表空間的狀態(二),資料表空間狀態

來源:互聯網
上載者:User

資料表空間的狀態(二),資料表空間狀態

資料表空間狀態-READ ONLY、READ WRITE


1. 唯讀資料表空間的主要用途就是為了消除對資料庫大部分待用資料的備份和恢複的需要。Oracle不會更新唯讀資料表空間愛你的檔案,因此這部分檔案可以儲存於唯讀介質中,例如CD-ROM或WORM drives。
2. 唯讀資料表空間並不是為了滿足歸檔的要求。唯讀資料表空間不能修改。如果需要修改唯讀資料表空間中的記錄,則需要先將資料表空間置為read/write。更新資料表空間後,可以重設為唯讀。
3. 由於唯讀資料表空間不能修改,所以只要沒有置為read/write,就不需要重複地進行備份。而且,如果需要恢複資料庫時,也不需要恢複唯讀資料表空間,原因就是他們未曾修改過。
4. 能從唯讀資料表空間中刪除對象,例如表或索引,但不能建立或修改對象。可以執行修改資料字典中檔案描述的語句,例如ALTER TABLE ... ADD或ALTER TABLE ... MODIFY,但不能添加任何新的描述資訊,除非資料表空間置為read/write。
5. 唯讀資料表空間可以匯出匯入到其他資料庫。既然唯讀資料表空間不能修改,他們就能儲存於CD-ROM或WORM(一次寫-多次讀)這些設施中。
6. 所有資料表空間初始建立都是read/write。使用READ ONLY子句可以設定資料表空間為唯讀。前提是必須具有ALTER TABLESPACE或MANAGE TABLESPACE的系統許可權。
使用ALTER TABLESPACE ... READ ONLY前,需要滿足以下條件:
> 資料表空間處於online狀態。這是為了確保不會有UNDO資訊需要應用到資料表空間。註:如果處於offline,則會將UNDO資訊儲存於SYSTEM資料表空間,待恢複online時應用這些UNDO資訊。
> 不能修改活動的UNDO資料表空間或SYSTEM資料表空間。
> 資料表空間不能處於當前進行中的online備份中,因為備份結束時會更新資料表空間所有資料檔案的頭部資訊。
> 為了讓從唯讀資料表空間讀取資料得到更好的效能,可以在置為read-only之前執行一次訪問資料表空間的表中所有資料區塊的查詢。一個像SELECT COUNT(*)這樣簡單的查詢,就可以確保在資料表空間的資料區塊在接下來的訪問中獲得最佳的效率。因為這種做法就不需要資料庫檢查最近經常修改資料區塊的交易狀態。
7. 可以在資料庫正處理交易的時候執行ALTER TABLESPACE ... READ ONLY語句。執行語句後,資料表空間就處於交易唯讀狀態。不會允許任何交易(DML操作)應用於資料表空間。如果嘗試進行交易操作,那麼此操作會被終止和復原。然而,那些已經做了變更並不再進行進一步修改的交易,就允許執行commit或roll back操作。
如果ALTER TABLESPACE ... READ ONLY語句執行前,一個交易已經執行了,但是復原到一個儲存點,復原了他對錶空間的變更,那麼ALTER TABLESPACE ... READ ONLY語句不會等待這個活動的交易。
8. 交易級唯讀狀態僅僅當初始化參數COMPATIBLE是8.1.0或以上值時才能使用。如果參數值小於8.1.0,並且存在活動的交易,ALTER TABLESPACE ... READ ONLY語句會失敗。
9. 如果ATLER TABLESPACE語句執行時間太長了,那麼就需要找到阻止唯讀狀態生效的那些交易。如下語句可以找出執行ALTER TABLESPACE ... RAED ONLY語句的交易入口和session地址(saddr):
SELECT SQL_TEXT, SADDR
FROM V$SQLAREA,V$SESSION
WHERE V$SQLAREA.ADDRESS = V$SESSION.SQL_ADDRESS AND SQL_TEXT LIKE 'alter tablespace%';
SQL_TEXT                                  SADDR
---------------------------------------- --------
alter tablespace tbs1 read only           80034AF0
每個活動交易的開始SCN會儲存於V$TRANSACTION視圖中。起始SCN越小,說明這步操作就越早。潛在地這條語句越可能阻止接下來唯讀狀態的變更。
SELECT SES_ADDR, START_SCNB
FROM V$TRANSACTION
ORDER BY START_SCNB;
SES_ADDR START_SCNB
-------- ----------
800352A0 3621 --> waiting on this txn
80035A50 3623 --> waiting on this txn
80034AF0 3628 --> this is the ALTER TABLESPACE statement
80037910 3629 --> don't care about this txn
可以用如下語句找到阻塞交易的使用者:
SELECT T.SES_ADDR, S.USERNAME, S.MACHINE
FROM V$SESSION S, V$TRANSACTION T
WHERE T.SES_ADDR = S.SADDR
ORDER BY T.SES_ADDR
SES_ADDR USERNAME              MACHINE
-------- -------------------- --------------------
800352A0 DAVIDB                DAVIDBLAP --> Contact this user
80035A50 MIKEL                 LAB61 --> Contact this user
80034AF0 DBA01                 STEVEFLAP
80037910 NICKD                 NICKDLAP
將資料表空間置為read-only後,建議立即備份。只要資料表空間一直處於唯讀狀態,那就不需要再次地備份,因為不會有對錶空間的更新。
10. 使用LATER TABLESPACE ... READ WRITE語句可以恢複唯讀資料表空間,前提是具有ALTER TABLESPACE或MANAGE TABLESPACE許可權。
資料表空間置為read/write的前提條件還需要資料表空間中的所有資料檔案以及資料表空間自身都處於online狀態。可以使用ALTER DATABASE ... DATAFILE ... ONLINE語句將資料檔案置為online狀態。V$DATAFILE視圖顯示了資料檔案當前的狀態。
將資料表空間置為可寫入模式,需要更新控制檔案,目的就是為了可以使用資料檔案的唯讀版本作為恢複的起始點。
11. 在WORM裝置中建立一個唯讀資料表空間。
(1) 建立一個可寫資料表空間。建立對象、插入資料。
(2) 將資料表空間置為read-only唯讀模式。
(3) 使用作業系統命令將資料表空間的資料檔案複製到WORM裝置。
(4) 將資料表空間置為offline狀態。
(5) 重新命名資料檔案以符合拷貝到WORM裝置中的資料檔案命名規範。使用ALTER TABLESPACE ... RENAME DATAFILE語句,重新命名資料檔案的操作會修改控制檔案。
(6) 將資料表空間恢複為online狀態。

實驗:
1. 設定資料表空間為read only狀態
SQL> alter tablespace dcsopen_tbs read only;
Tablespace altered.

2. 查看資料檔案狀態
SQL> select file#, name, status from v$datafile where file#=11;
FILE#  NAME                                                                    STATUS
----- ------------------------------------------------------- ------------------------
11      /oracle/oradata_petest/petest/dcsopen_tbs02.dbf   ONLINE

3. 登入到唯讀資料表空間
SQL> select * from test1;
      T1ID T1V
---------- ----------
         1 t1
         2 t2
         3 t3
可以讀其中的表。
SQL> insert into test1 values(12, 't12');
insert into test1 values(12, 't12')
            *
ERROR at line 1:
ORA-00372: file 7 cannot be modified at this time
ORA-01110: data file 7: '/oracle/oradata_petest/petest/dcsopen_tbs01.dbf'
執行交易操作時提示7號資料檔案此時不能修改。
怎取消ROLL-FORWARD PENDING 狀態 db2 55039 錯誤,state 號0X0080

如果只是由於資料表空間因為LOAD而造成的備份暫掛,可以通過備份該資料表空間將此資料表空間的狀態改為正常。命令如下:
db2 connect to dbname user db2admin
提示輸入密碼:
db2 backup database dbname tablespace(資料表空間名稱)

通過下面的命令查看一下資料表空間狀態,可以看到狀態已經變為正常了
db2 list tablespaces
 
Oracle資料庫兩個使用者名稱使用同一資料表空間怎備份與恢複?

oracle備份的幾種方法:
1).匯出/匯入(EXP/IMP)。
2).熱備份。
3).冷備份。
注釋:匯出備件是一種邏輯備份,冷備份和熱備份是物理備份。
一、 匯出/匯入(Export/Import)
利用Export可將資料從資料庫中提取出來,利用Import則可將提取出來的資料送回到Oracle資料庫中去。
1、簡單匯出資料(Export)和匯入資料(Import)
Oracle支援三種方式類型的輸出:
(1)、表方式(T方式),將指定表的資料匯出。
exp amis/amis@amisdb tables= B_S_AGT_LNE_ACCT_H_0714 file=B_S_AGT_LNE_ACCT_H_0714.dmp
imp odsbdata/odsbdata@amisdb file= B_S_AGT_DEP_ACCT_TDE_H_0714.dmp full=y ignore=y
(2)、使用者方式(U方式),將指定使用者的所有對象及資料匯出。
(3)、全庫方式(Full方式),瘵資料庫中的所有對象匯出。
資料匯入(Import)的過程是資料匯出(Export)的逆過程,分別將資料檔案匯入資料庫和將資料庫資料匯出到資料檔案。
2、 增量匯出/匯入
增量匯出是一種常用的資料備份方法,它只能對整個資料庫來實施,並且必須作為SYSTEM來匯出。匯出檔案名稱預設為export.dmp,如果不希望自己的輸出檔案定名為export.dmp,必須在命令列中指出要用的檔案名稱。
增量匯出包括三種類型:
(1)、“完全”增量匯出(Complete)
即備份三個資料庫,比如:
exp system/manager inctype=complete file=040731.dmp
(2)、“增量型”增量匯出
備份上一次備份後改變的資料,比如:
exp system/manager inctype=incremental file=040731.dmp
(3)、“累積型”增量匯出
累計型匯出方式是匯出自上次“完全”匯出之後資料庫中變化了的資訊。比如:
exp system/manager inctype=cumulative file=040731.dmp
資料庫管理員可以排定一個備份議程表,用資料匯出的三個不同方式合理高效的完成。
比如資料庫的被封任務可以做如下安排:
星期一:完全備份(A)
星期二:增量匯出(B)
星期三:增量匯出(C)
星期四:增量匯出(D)
星期五:累計匯出(E)
星期六:增量匯出(F)
星期日:增量匯出(G)
如果在星期日,資料庫遭到意外破壞,資料庫管理員可按一下步驟來回複資料庫:
第一步:用命令CREATE DATABASE重建資料庫結構;
第二步:建立一個足夠大的附加復原。
第三步:完全增量匯入A:
imp system/manager inctype=RESTORE FULL=y FILE=A
第四步:累計增量匯入E:
imp system/manager inctype=RESTORE FULL=Y FILE=E
第五步:最近增量匯入F:
imp system/manager inctype=RESTORE FULL=Y FILE=F
二、 冷備份
冷備份發生在資料庫已經正常關閉的情況下,當正......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.