Database Storage

OmarChina發表於2007-10-21
Oracle8i Server and SQL*PlusèOracle8i Administrator's GuideèPart III Database Storage[@more@]

Oracle8i Server and SQL*PlusèOracle8i Administrator's GuideèPart III Database Storage

介紹資料庫結構,資料庫物件和保護事務的完整性,包括以下三個章節:

09章: 管理tablespace

10章: 管理datafile

11章: 管理rollback segment

09章: 管理tablespace

管理tablespace指導

建立tablespace

管理tablespace的分配

改變tablespace的可用性

Read-Only Tablespace

Drop tablespace

使用dbms_space_admin

Transporting tablespace between databases

訪問和tablespace相關的資訊

A:管理tablespace指導:

為了建立一個tablespace可以使用create tablespace create temporary tablesapce 。但是你必須擁有create tablespace 的系統許可權。

其後,可以使用alter tablespace alter database子句去改變一個tablespace。但必須擁有alter tablespacealter database系統許可權。

8I之前是dictionary-managed tablespace,從8I開始支援local managed stablespace8I預設還是字典。官方推薦使用local managed

temporary tablespace可以使用字典管理也可以使用local管理.

Alter tablespace字句的作用:

1, 改變預設的storage 引數

2, coalescing Free 表空間的空間

3, 改變online/offline/read-only/read-write

4, 新增,rename,開啟關閉auto extension,改變大小等等

建立一個本地管理的表空間

2個選擇,1是使用autoallocate選項,ORACLE自動管理分割槽的分配;

2是使用unifor size的方式。如果指定uniform不指定大小,預設是1Mextent

可以透過v$sort_segmentv$sort_usage檢視去檢視目前在排序的使用者

建立一個字典管理的temporary Tablespace :

create tablespace temp dafile ‘/u01/temp01.dbf’ size 5m temporary ;

改變一個字典管理的temporary tablespace到一個local temporary tablespace

alter tablespace temp temporary;

10G中已經不允許建立字典管理的tablespace.

檢視temp的資訊要去v$tempfiledba_temp_files 這和v$datafile dba_data_files是很相似的

coalesce free space

local管理的表空間中是不會出現碎片的。如果在字典管理的表空間中,所有的的分割槽大小都是一樣的話,也是不會出現分割槽碎片

監控自由空間。DBA_FREE_SPACEdba_free_space_coalesced

tablespace offline的幾種方式:

1,Normal:一個沒有錯誤的datafiles表空間中,可以Normal Offline,這樣的情況下會產生一個checkpoint在所有 資料檔案中。

2,Temporary:即使在datafiles中有出現問題的時候,還是可以用temporary的方式offline.ONLINE上來的時候不需要meidia recovery

如過是因為write erroes temporary 的方式Offline後,再online回來的時候是要media recovery

3,Immediate:可以使用這樣的方式offline後,online的時候是需要media recovery的。而且在noarchvielog的模式下面是不可以offline immediate的。

4,For Recover:為了做recover的方式可以這樣OFFLINE

readonly的模式表空間中.是可以進行資料字典修改。所以alter table add alter table modify等語句是可以執行的。

drop tablespace example including contents and datafiles cascade constraints

在控制檔案中,有MAXDATAFILES引數指定最大的資料檔案的數量。但是是小於db_files初始引數檔案的。當資料檔案的數量達到控制檔案中的限制,但沒有超過db_files的時候,控制檔案會自動擴張

要檢視某個表空間的資料檔案是否是處於autoetented on/OFF的模式,要訪問dba_data_files字典。

ALTER DATABASE DATAFILE '/u02/oracle/rbdb1/users03.dbf' 
    AUTOEXTEND OFF;
ALTER TABLESPACE users
    RENAME DATAFILE '/u02/oracle/rbdb1/user1.dbf',
                    '/u02/oracle/rbdb1/user2.dbf'
                 TO '/u02/oracle/rbdb1/users01.dbf', 
                    '/u02/oracle/rbdb1/users02.dbf';

ALTER DATABASE...RENAME FILE

ALTER DATABASE
    RENAME FILE '/u02/oracle/rbdb1/sort01.dbf',
                '/u02/oracle/rbdb1/user3.dbf'
             TO '/u02/oracle/rbdb1/temp01.dbf',
                '/u02/oracle/rbdb1/users03.dbf;
 

如果想使用checksum去驗證資料塊,要把引數db_block_checksum設定為true

DBWN程式產生這個checksum值為每一個快,並且存在塊頭中。在direct loader中。也會去checksums,

下一次ORACLE讀這個塊的時候,它使用checksum去發現塊是否損壞。如果有壞塊發現.ORACLE返回ora-01578

rollback_segments引數可以指定私有的回滾段,或者手工去指定一個回滾段。

總公初始分配回滾段的大小(byte)/初始分配的分割槽的數目=計算初始每個分割槽分配的大小(byte)

設定optimal的值在回滾段中。如果長事物的話,這個要設定的很大,避免1555號錯誤

create rollback segment rbs_01 tablespace test;

alter system set rollback_segments=rbs_01

sys@ORCL> create public rollback segment rbs_02

2 tablespace test

3 storage(

4 initial 100k

5 next 100k

6 optimal 1m

7 minextents 20

8 maxextents 100);

Oracle推薦:

1, 設定initial next一樣的大小

2, 建立一個大的數目,初始分配的分割槽的大小,避免動態擴張,說是minextents=20是個不錯的值

3, 避免設定maxextents=unlimited

sys@ORCL> alter rollback segment rbs_02

2 storage(maxextents 120);

ALTER ROLLBACK SEGMENT rbs1 SHRINK TO 100K;

sys@ORCL> select segment_name,owner,tablespace_name ,status from dba_rollback_segs;

SEGMENT_NAME OWNER TABLESPACE_NAME STATUS

------------------------------ ------ ------------------------------ ----------------

SYSTEM SYS SYSTEM ONLINE

_SYSSMU1$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU2$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU3$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU4$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU5$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU6$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU7$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU8$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU9$ PUBLIC UNDOTBS1 ONLINE

_SYSSMU10$ PUBLIC UNDOTBS1 ONLINE

SET TRANSACTION USE ROLLBACK SEGMENT large_rs1;

顯示一個ROLLBACK SEGMENT 是否已經OFFLINE

如果OFFLINE一個表空間。他裡面還有事務的話,這個狀態會顯示pending offline。新的事務而且是沒有辦法使用這個回滾段的

=到舊的事務全部結束。回滾段就OFFLINE

SELECT name, xacts "ACTIVE TRANSACTIONS"
      FROM v$rollname, v$rollstat
      WHERE status = 'PENDING OFFLINE'
        AND v$rollname.usn = v$rollstat.usn;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9925929/viewspace-977923/,如需轉載,請註明出處,否則將追究法律責任。

相關文章