oracle 關於-資料檔案

邱東陽發表於2014-04-02

資料檔案

 

1.一個資料檔案僅僅關係一個資料庫,Oracle資料檔案與資料庫之間對應聯絡是一對一聯絡,當然反過資料庫與資料檔案是一對多聯絡.

2.資料檔案能夠積極伸展,當資料儲存必需更多儲存空間時候,即便儲存資料的資料隨儲存資料量增大,資料檔案也能夠積極增長,以中意資料儲存必需.

3.一個或多個資料檔案構成一個邏輯單元,稱之為表空間.Oracle資料檔案與表空間之間對應聯絡也是一對一聯絡,當然反過表空間與資料檔案對應聯絡是一對多的聯絡.

 主要分類:

system01.dbf:記錄系統執行資訊,包含所有資料庫字典,PL/SQL程式程式碼及其他系統資訊

undotbs01.dbf:存放回退資訊,即DML操作後的舊資料資訊

sysaux01.dbfsystem檔案的輔助檔案,存放支援oracle系統活動的多種工具如logminer

users01.dbf:新建使用者未指定儲存空間是,預設資料存放在該檔案中

example01.dbf:存放示例資料資訊。

表空間

我們知道schema就是使用者中包含物件,物件中存放著表、檢視、包、函式、同義詞等。

物件的邏輯結構存放在表空間中,表空間是由一個或多個資料檔案構成。物件的內容存放在資料檔案中。

那麼表空間自己的結構:

邏輯結構是:先由表空間分配段空間,由段空間分配區,區下面才是記憶體塊。

物理結構就是:由邏輯結構區空間下的記憶體塊構成作業系統塊,在由OS塊構成資料檔案。邏輯結構中的區空間直接決定物理物件中的區空間大小。

 

通常一個資料庫由多個表空間構成,每個表空間儲存不同特性的資料

一個正常執行的資料庫通常包括下面這些表空間:

--system  存放資料字典資訊,是資料庫必須的表空間,也是建立資料庫時第一個被建立的表空間

--sysaux   存放除了資料字典之外的一些系統管理輔助資訊,是10g新增加的表空間,用於分擔系統表空間的負荷

--undo    存放自動管理的回滾段資訊,提供事務的回滾功能

--temp    存放使用者排序時的臨時資料

--index    存放使用者表上的索引資訊

--其他    存放各種不同的使用者表資料

除了systemsysaux表空間必須在建立資料庫的時候建立外,其他表空間都可以在資料庫生成後由DBA建立並進行管理,通常對系統表空間的管理任務較少。

建立表空間的一些定義

登入的使用者必須具有create tablespace許可權(Dba rolesysdbasysoper,這寫許可權也都是可以的)

確認建立smallfile 還是 bigfile (一般超過T級別大小的檔案推薦使用bigfile

確認新建資料檔案所在磁碟的IO是否飽和。

 

檢視建立表空間定義大小檔案預設值

SQL> desc database_properties

Name                                      Null?    Type

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

 PROPERTY_NAME                             NOT NULL VARCHAR2(30)

 PROPERTY_VALUE                                     VARCHAR2(4000)

 DESCRIPTION                                        VARCHAR2(4000)

 

SQL>

SQL> select property_name,property_value from database_properties where property_name like '%TBS%';

 

PROPERTY_NAME

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

PROPERTY_VALUE

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

DEFAULT_TBS_TYPE

SMALLFILE  

SQL>

修改預設值

 

SQL> alter database set default bigfile tablespace;

 

Database altered.

 

SQL> select property_name,property_value from database_properties where property_name like '%TBS%';

 

PROPERTY_NAME

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

PROPERTY_VALUE

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

DEFAULT_TBS_TYPE

BIGFILE

 

 

SQL>

 

建立表空間語句的一些定義

 

SQL> create smallfile|bigfile tablespace <name> datafile <path> size <> logging|nologging  ….

具體的可以檢視官方文件

http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7003.htm#SQLRF01403

 

其中需要注意的是 datafile(資料檔案路徑與名字) 中路徑要具備oracle寫的許可權

 

 

表空間的空間管理

 

 

oacle8i開始,空間管理方法有以下兩種:

資料字典管理表空間:(現在10G以後已經不支援資料字典管理了)

     --是以前一直被沿用的空間管理方法,從9i開始逐漸被淘汰

          --使用資料字典表Uet$Fet$描述和管理表空間中空閒空間和使用空間

          --當空間被分配或者釋放時,相應的資料字典資訊被更新

本地管理表空間:

     --直接在各個表空間上管理空閒空間和使用空間

          --使用儲存在表空間上的Bitmap標示空閒空間和使用空間的資訊

          --Bitmap中的每位描述一個block或者一組block的狀態

          --從9i開始成為預設的表空間屬性

 

檢視錶空間使用哪種方式管理

SQL> select tablespace_name,extent_management from dba_tablespaces;

 

TABLESPACE_NAME                EXTENT_MAN

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

SYSTEM                         LOCAL

UNDOTBS1                       LOCAL

SYSAUX                         LOCAL

TEMP                           LOCAL

USERS                          LOCAL

 

SQL>

 

表空間的狀態

 

Read Write – 讀寫

 

Read Only—  只讀

Offline—   離線

Online--  聯機

 

 

檢視所有表空間的狀態

SQL> select b.tablespace_name,v.file#,v.status,v.enabled from dba_data_files d,v$datafile v where d.file_id=v.file#;

 

 

TABLESPACE_NAME                     FILE# STATUS  ENABLED

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

SYSTEM                                  1 SYSTEM  READ WRITE

UNDOTBS1                                2 ONLINE  READ WRITE

SYSAUX                                  3 ONLINE  READ WRITE

USERS                                   4 ONLINE  READ WRITE

設定成只讀

SQL> alter database users  read only;

 

 

對於幾個重要的表空間

 

System      必須online      必須read write

Sysaux       可以offline     不能 read only

Undo        不能offline     不能 read only

 

改變表空間名稱

 

open狀態下將qqq1表空間改名為qqq2

SQL> alter tablespace qqq1 rename to qqq2;

 

下列表空間是不能被改名的

System  sysaux

下面的最好不要去改

database_properties檢視中DEFAULT_TEMP_TABLESPACEDEFAULT_PERMANENT_TABLESPACE定義的表空間

undo_tablespace引數定義的表空間。

 

 

改變表空間大小

方法:

1、啟動資料檔案大小的自動擴充套件

2、手工改變資料檔案大小

3、為表空間增加資料檔案

 

方法1:自動擴充套件

 

 

檢視錶空間是否自動擴充套件

SQL> select tablespace_name,file_name,autoextensible from dba_data_files;

 

TABLESPACE_NAME                FILE_NAME                                    AUT

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

SYSTEM                         +DATA/fengzi/datafile/system.277.842187103          YES

 

UNDOTBS1                       +DATA/fengzi/datafile/undotbs1.278.842187181       YES

 

SYSAUX                         +DATA/fengzi/datafile/sysaux.279.842187235          YES

 

USERS                          +DATA/fengzi/datafile/users.281.842187289           NO

              

SQL> 

修改為自動擴充套件

SQL> alter tablespace users autoextend on;

alter tablespace users autoextend on

*

ERROR at line 1:

ORA-32773: operation not supported for smallfile tablespace USERS

 小檔案是不能進行自動擴充套件的

 

直接將資料檔案改為自動擴充套件

SQL> alter database datafile '+DATA/fengzi/datafile/users.281.842187289' autoextend on next 5M maxsize 1T;

Database altered.

SQL>

方法2:修改資料檔案大小(不推薦使用)

 

首先要將自動擴充套件關閉

SQL> alter database datafile '+DATA/fengzi/datafile/users.281.842187289' autoextend off;

Database altered.

SQL>

檢視資料檔案大小

SQL>  select file_name,bytes/1024/1024 "size" from dba_data_files;

FILE_NAME                                      size

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

+DATA/fengzi/datafile/system.277.842187103           480

+DATA/fengzi/datafile/undotbs1.278.842187181         200

+DATA/fengzi/datafile/sysaux.279.842187235           260

+DATA/fengzi/datafile/users.281.842187289             25

 

SQL>

檢視檔案號

SQL> select name,file# from v$datafile;

 

NAME                                   FILE#

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

+DATA/fengzi/datafile/system.277.842187103     1

+DATA/fengzi/datafile/undotbs1.278.842187181   2

+DATA/fengzi/datafile/sysaux.279.842187235     3

+DATA/fengzi/datafile/users.281.842187289      4

 

修改資料檔案大小

 

SQL> alter database datafile 4  resize 52M;

 

Database altered.

 

SQL>

 

方法3:增加資料檔案

 

為表空間新增一個資料檔案並開啟自動擴充套件

SQL> alter tablespace users add datafile '+data/fengzi/datafile/users2.dbf' size 10m autoextend on;

 

對於表空間中的資料檔案的重新命名和重定位

前提條件

1、資料庫必須在mount或者open狀態

2、在歸檔模式下

3、要修改的資料檔案可以被offline open狀態下)

 

 

SQL> select tablespace_name,file_name from dba_data_files;

 

TABLESPACE_NAME                FILE_NAME                                    

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

SYSTEM                         +DATA/fengzi/datafile/system.277.842187103          

 

UNDOTBS1                       +DATA/fengzi/datafile/undotbs1.278.842187181       

 

SYSAUX                         +DATA/fengzi/datafile/sysaux.279.842187235          

 

USERS                          +DATA/fengzi/datafile/users.281.842187289           

              

SQL>

   將想要重新命名的檔案離線      

SQL> alter tablespace users offline;

 

Tablespace altered.

 

SQL> 

 使用ASMCMD工具重新命名離線檔案

[oracle@dongyang ~]$ echo $ORACLE_SID

+ASM

[oracle@dongyang ~]$ asmcmd

ASMCMD> cd data/fengzi/datafile

ASMCMD> mkalias USERS.281.842187289 users2.dbf

使用SQL重新命名指定檔案

SQL> alter database rename file '+DATA/fengzi/datafile/users.281.842187289' to '+DATA/fengzi/datafile/users2.dbf';

Database altered.

SQL>

使表空間中資料檔案聯機

SQL> alter tablespace users online; (有時候要求介質恢復,recover tablespace users; 就可以)

SQL> select tablespace_name,file_name from dba_data_files;

 

TABLESPACE_NAME                FILE_NAME                                    

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

SYSTEM                         +DATA/fengzi/datafile/system.277.842187103          

 

UNDOTBS1                       +DATA/fengzi/datafile/undotbs1.278.842187181       

 

SYSAUX                         +DATA/fengzi/datafile/sysaux.279.842187235          

 

USERS                          +DATA/fengzi/datafile/users2.dbf          

              

SQL>

 

 

檔案系統:

SQL> alter tablespace users offline;

SQL> ho  cp  /u01/app/oracle/oradata/fengzi/users1.dbf  /u01/app/oracle/oradata/fengzi/ttt.dbf

SQL> alter database rename file '/u01/app/oracle/oradata/fengzi/users1.dbf ' to '/u01/app/oracle/oradata/fengzi/ttt.dbf ';

SQL> alter tablespace users online;

 

刪除表空間

 

drop tablespace tablespace_name  including contents and datafiles;

 

including contents:用於刪除表空間同時刪除表空間上的所有段

including contents and datafiles刪除表空間、資料檔案以及表空間上段的資訊,同時刪除OS中的資料檔案

獲取表空間及資料檔案資訊

相關檢視

表空間資訊:

 DBA_TABLESPACES

V$TABLESPACE

資料檔案資訊:

     DBA_DATA_FILES

          V$DATAFILE

臨時資料檔案資訊:

     DBA_TEMP_FILES

          V$TEMPFILE

臨時表空間組:

          DBA_TABLESPACE_GROUPS

 

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

相關文章