唯讀表空間中的表是可以DROP的

2021-12-30 12:23:30 字數 2652 閱讀 3316

唯讀表空間中的表是可以drop的

在oracle資料庫中,至少有以下幾個表空間:

1)system表空間,每乙個資料庫都包含乙個system表空間,當資料庫建立的時候,system表空間會自動的建立。當資料庫開啟的時候,system表空間始終處於online狀態。system表空間的重要之處是能夠儲存整個資料庫的資料字典,另外plsql中的一些儲存單元,比如說是儲存過程、函式、包以及相關的觸發器等等都是要儲存在資料庫的表空間裡面的。  www.2cto.com  

2)sysaux表空間,資料庫元件將sysaux表空間當做儲存資料的預設位置,因此當資料庫在建立和公升級的時候,sysaux表空間會自動的建立。sysaux表空間可以減少預設建立表空間的數量,在進行普通的資料庫操作的時候,oracle資料庫服務不允許刪除sysaux表空間,也不能對其進行改名等操作。

3)undo表空間

每個資料庫都可以包含多個undo表空間。在自動撤銷管理模式中,每個oracle例項都指定了乙個undo表空間(有且只有乙個表空間)。撤銷的資料在undo表空間使用undo區間來管理,undo區間由oracle自動建立並且進行維護。在oracle中,我們可以對資料進行增加、刪除、更新等事務操作,事務中的資料庫操作是可以撤銷的,而且往往執行速度比較慢,但是撤銷的速度是比較快的,這是為什麼呢?因為當事務在資料庫中進行運作的時候,oracle是將該資料庫操作繫結在undo表空間中的undo區間裡面的。如果需要對事務進行撤銷操作的時候,oracle就會根據undo表空間中的undo區間進行撤銷。

4)臨時表空間,如果系統表空間是本地的,至少要指定乙個預設的臨時表空間temp。如果刪除所有的臨時表空間,那麼oracle就會指定system表空間作為臨時表空間。

www.2cto.com  

臨時表空間的好處:

1)在使用select語句進行查詢資料庫的時候,可以使用多個臨時表空間進行排序操作,避免出現臨時表空間空間不足的問題。

2)可以在並行操作中有效的利用臨時表空間。

3)乙個使用者在不同的會話中可以同時使用多個臨時表空間。

這裡:為了保護表空間中的資料不被修改,可以將表空間的屬性變為唯讀表空間,設定表空間的主要目的是為了表中的靜態資料不被修改,從而能夠進行資料庫的備份和恢復等操作,還能夠保護唯讀表空間中的資料不被修改。

設定唯讀表空間的語法:

alter tablespace 表空 read only;

將表空間設定為讀寫的語法:

alter tablespace <> read write;

在設定表空間的過程中發現,唯讀表空間的表是可以drop的,這個是為什麼呢?

前面說過了,每個資料庫在執行的時候,都會有乙個online的表空間,表空間的名字是system,system表空間中儲存了資料字典,以及plsql中的儲存過程、觸發器、函式、包等等資料庫物件。當進行ddl進行資料庫的刪除操作的時候,是操作的system表空間,oracle會在system儲存的資料字典中,將刪除的表設定為drop狀態,等該錶空間的狀態變成read write狀態的時候,就會真正的從資料庫裡面刪除該錶。

相關的**如下:

[sql] 

sql> list  

1  create table chenzw(  

2     username varchar2(100)  

3* )  

sql> run  

1  create table chenzw(  

2     username varchar2(100)  

3* )  

表已建立。  

sql> insert into chenzw values ('1');  

已建立 1 行。  

sql>alter tablespace data read only;  

表空間已更改。  

sql>insert into chenzw values('2');  

insert into chenzw values('2')  

*  第 1 行出現錯誤:  

ora-00372: 此時無法修改檔案 5  

ora-01110: 資料檔案 5: 'e:\gxsidb\data'  

sql> truncate table chenzw;  

truncate table chenzw  

*  第 1 行出現錯誤:  

ora-00372: 此時無法修改檔案 5  

ora-01110: 資料檔案 5: 'e:\gxsidb\data'  

sql> delete from chenzw;  

delete from chenzw  

*  第 1 行出現錯誤:  

ora-00372: 此時無法修改檔案 5  

ora-01110: 資料檔案 5: 'e:\gxsidb\data'  

sql> drop table chenzw;  

表已刪除。  

sql> commit;  

提交完成。  

sql>alter tablespace data read write;  

表空間已更改。  

sql> select * from chenzw;  

select * from chenzw  

*  第 1 行出現錯誤:  

ora-00942: 表或檢視不存在  

sql>  

管理表空間中的空間

空間管理在多個級別進行。第一,將空間分配給表空間。這通過設定資料檔案的大小來完成。第二,將表空間中的空間分配給段,這通過分配區間來完成。第三,將段中的空間分配給行,這通過維護那些跟蹤每個塊中的空閒空間量的位圖來完成。5.3.1 區間管理 區間管理方法為每個表空間設定,應用於表空間中的所有段。可以使用...

唯讀表空間的恢復

2個表空間是設定成了唯讀,對應的資料檔案是5,6,6是在備份之前就設定成了唯讀,5是在備份後設定成唯讀的。rman restore database 2 啟動 restore 於 03 10月 14 使用目標資料庫控制檔案替代恢復目錄 分配的通道 ora disk 1 通道 ora disk 1 s...

09 常被人遺忘的唯讀表空間

唯讀表空間 tablespace oracle 備份恢復 在資料庫管理中,會把一些歷史資料或基本不變化的資料放入唯讀表空間。因為這種表空間上只能進行讀操作而不能做dml操作。能有效防止被意外的修改或刪除,所以很適合存放上述型別的資料,另外,它在備份方面還有乙個好處,因為它是唯讀的,就是沒有變化,只需...