Oracle 表空間與資料檔案

us_yunleiwang發表於2013-12-05

--==============================

--Oracle 表空間與資料檔案

--==============================

/*

一、概念

    表空間:是一個或多個資料檔案的邏輯集合

    表空間邏輯儲存物件:永久段--&gt如表與索引

                        臨時段--&gt如臨時表資料與排序段

                     回滾段--&gt用於事物回滾或閃回記憶體的撤銷資料

    表空間分類:系統表空間(systemsysaux),非系統表空間

   

    一個表空間至少包含一個資料檔案,一個資料檔案只能屬於一個表空間。

   

    不可或缺的幾個表空間:

    SYSTEM ---&gt字典表空間,不能被損壞

    UNDO    ---&gtdml,dql把資料快照到此,資料提交即消失(用於恢復)

    SYSAUX  ---&gt10g 高併發系統繁忙時,會造成system爭用,將工具放到SYSAUX,減輕system的壓力,SYSAUX不影響系統(影響效能)

    TEMP    ---&gt臨時資料相關的內容

    USERS   ---&gt10g  使用者資料從system撥離出來

   

   

二、Oracle的儲存結構

    1.Schema: 使用者---&gt建立相關物件、表、檢視、序列、函式、儲存過程、包等

    2.邏輯結構:database資料庫---&gttablespace表空間---&gt segment---&gtextent區間----&gt block

            邏輯結構是Oracle內部管理資料庫中物件的方式

    3.物理結構:OS  block ---&gtdatafile 物理結構通常是一系列資料檔案

    4.舉例描述scott使用者建立物件的組織方式 */

   

--檢視scott使用者的預設表空間及資料檔案

    SQL> selectUSERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE                                       

      2  from dba_users

      3  where username = 'SCOTT';

 

    USERNAME                       DEFAULT_TABLESPACE             TEMPORARY_TABLESPACE

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

    SCOTT                          USERS                          TEMP

 

    SQL> col name format a50

    SQL> select t1.name,t2.name   --檢視錶空間及資料檔案

      2  from v$tablespace t1,v$datafile t2

      3  where t1.ts# = t2.ts#;

 

    NAME                                               NAME

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

    SYSTEM                                            /u01/app/oracle/oradata/orcl/system01.dbf

    UNDOTBS1                                          /u01/app/oracle/oradata/orcl/undotbs01.dbf

    SYSAUX                                            /u01/app/oracle/oradata/orcl/sysaux01.dbf

    USERS                                             /u01/app/oracle/oradata/orcl/users01.dbf

    EXAMPLE                                           /u01/app/oracle/oradata/orcl/example01.dbf

 

/*

    scott--&gtemp(table)--&gt資料定義(位於)--&gtsystem表空間

                      資料(位於)  --&gtuser表空間(邏輯儲存)--&gt表段--&gt區間--&gt記憶體塊

                                                    --&gt索引段等--&gt區間--&gt記憶體塊

                                user表空間(物理儲存)--&gtuser01.dbf

                                   --&gt採用本地管理,包含頭部資訊,可用、已用等點陣圖資訊

                                  

    databuffer緩衝區滿則呼叫dbwr程式將資料寫入到物理檔案當中 */

    /*

 

三、建立表空間

 

    --簡要語法:

    CREATE [BIGFILE | SMALLFILE] [TEMPORARY] TABLESPACE tablespace name

    DATAFILE datafile spec | TEMPFILE tempfile spec

    [MINIMUM EXTENT minimum extent size]

    [BLOCKSIZE blocksize]

    [[COMPRESS|NOCOMPRESS] DEFAULT STORAGE (default storage clause)]

    [LOGGING|NOLOGGING]

    [FORCE LOGGING]

    [ONLINE|OFFLINE]

    [EXTENT MANAGEMENT DICTIONARY |

    LOCAL [AUTOALLOCATE|UNIFORM SIZE size]]

    [SEGMENT SPACE MANAGEMENT MANUAL|AUTO]

    [FLASHBACK ON|OFF]

   

    --建立表空間的條件

    1.具有create tablespace的許可權,DBA角色具有該許可權,sysdba,sysoper

    2.建立的是bigfiel ,還是smallifle  超過級別應考慮bigfile

    3.新建的表空間的I/O,是否會導致磁碟I/O不夠用

    4.datafile後跟的路徑應該具備寫的許可權  */

   

    --檢視預設是BIGFILE 還是SMALLFILE,當預設為SMALLFILE,建立表空間不指定表空間型別則為SMALLFILE

    SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAMElike '%TBS%';

 

    PROPERTY_NAME                  PROPERTY_VALUE

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

    DEFAULT_TBS_TYPE               SMALLFILE

   

    --修改建立表空間為大或小表空間的預設值

    SQL> alter database set default bigfile tablespace;

 

    Database altered.

 

    SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties where PROPERTY_NAMElike '%TBS%';

 

    PROPERTY_NAME                  PROPERTY_VALUE

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

    DEFAULT_TBS_TYPE               BIGFILE

   

    --改回為預設值

    SQL> alter database set default smallfile tablespace;

 

    Database altered.

   

    --建議建立表空間時最好帶上[BIGFILE | SMALLFILE]引數,以免引數設定導致建立了不合理的表空間

    /*

    注意:

    大表檔案(bigfile)最大可以存放個T的容量。標頭檔案的大小達到了G-->block,普通的標頭檔案大小為M----&gtblock

    create bigfile tablespace <> datafile <>........;

       好處:減少了資料檔案的個數,管理方便,大的物件的存放得到了最佳化。減少了control檔案的資訊,控制檔案定義了datafile的個數。

       bigfile只能存在一個資料檔案,所以要保證分配的的磁碟具有足夠的空間。 */

      

    --演示建立表空間

    SQL> create tablespace TBS1 datafile '/u01/app/oracle/oradata/orcl/tbs1.dbf' size 100m;

 

    Tablespace created.

 

    SQL> col name format a50      

    SQL> select t1.name,t2.name

      2  from v$tablespace t1,v$datafile t2

      3  where t1.ts# = t2.ts#;

 

    NAME                                               NAME

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

    SYSTEM                                            /u01/app/oracle/oradata/orcl/system01.dbf

    UNDOTBS1                                          /u01/app/oracle/oradata/orcl/undotbs01.dbf

    SYSAUX                                            /u01/app/oracle/oradata/orcl/sysaux01.dbf

    USERS                                             /u01/app/oracle/oradata/orcl/users01.dbf

    EXAMPLE                                           /u01/app/oracle/oradata/orcl/example01.dbf

    TBS1                                              /u01/app/oracle/oradata/orcl/tbs1.dbf

   

    /*

    建立臨時表空間:

    建立臨時表空間,不能使用非標準資料塊,另臨時表空間不能存放永久物件。*/

    CREATE TMEPORARY TABLESPACE tablespace_name

    TEMPFILE '...' SIZE n

 

    CREATE TEMPORARY TABLESPACE T2 TEMPFILE '/opt/oracle/oradata/orcl/t2.dbf'

    size 100m;

    /*

    臨時表空間具有以下特徵:

       臨時資料檔案不能置為只讀

       臨時資料檔案不能重新命名

       監時資料檔案的日誌方式總是NOLOGGING

      

    臨時表空間擴容:*/

    --(1)重置臨時檔案大小

        alter database tempfile '/opt/oracle/oradata/orcl/t2.dbf' resize 150m;

 

    --(2)讓臨時檔案能自動擴充套件

       alter database  tempfile '/opt/oracle/oradata/orcl/t2.dbf'

       autoextend on next 10m maxsize 50m;

 

    --(3)增加臨時檔案

       alter tablespace t2 add tempfile '/disk8/oracle/t2b.dbf' size 50m;

 

    --檢視臨時檔案

       select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)"

       from dba_temp_files;

 

    --預設臨時表空間:

        select * from database_properties;

 

    --修改預設臨時表空間:

       ALTER DATABASE DEFAULT TEMPORARY TABLESPACE T2;

       /*

        預設臨時表空間最好要指定一下,如果沒有指定預設的臨時表空間,那麼將使用system表空間作為排

       序區

 

       預設臨時表空間有一定的限制:

           預設臨時表空間不能刪除

           預設臨時表空間不能離線

          

 

    獲得建立表空間的語句:*/

       SELECT dbms_metadata.get_ddl('TABLESPACE','SYSTEM') FROM dual;

 

    /*

    臨時表空間組:

       10G引入的,是一組臨時表空間,只能由臨時表空間組成。組名不能與臨時表空間同名

       臨時表空間不能顯示的建立和刪除,當把第一個臨時表空間分配給某個臨時表空間組的時候,自動建立

       臨時表空間組,將最後一個臨時表空間,刪除時,組也將自動刪除。

 

 

    建立臨時表空間組:

       1、建立臨時表空間的時候 */

        CREATE TEMPORARY TABLESPACE tablespace_name TEMPFILE '...' SIZE n

        TABLESPACE GROUP group_name;

 

        ALTER TABLESPACE tablespace_name TABLESPACE GROUP group_name;

           ALTER TABLESPACE T3 TABLESPACE GROUP TEMP_GRP;

 

    --檢視臨時表空間組的資訊:

       dba_tablespace_groups

 

       SELECT * FROM DBA_TABLESPACE_GROUPS;

 

    --將臨時表空間組成員移除:

       ALTER TABLESPACE tablespace_name TABLESPACE GROUP '';

 

    --可將系統預設的臨時表空間設為臨時表空間組:

       ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name;

 

    --刪除臨時表空間:

       --將所有成員全移出去,便自動刪除

 

    --建立UNDO表空間(還原表空間):

    /*

    建立語法:*/

       CREATE UNDO TABLESPACE tablespace_name DATAFILE '...' SIZE n

 

    SQL> CREATE UNDO TABLESPACE undo2

       DATAFILE '/opt/oracle/oradata/orcl/undo2_01.dbf' SIZE 200M,

       '/opt/oracle/oradata/orcl/undo2_02.dbf' size 100m;

 

    --修改當前系統的UNDO表空間:

       ALTER SYSTEM SET UNDO_TABLESPACE=tablespace_name

 

    /* 

    UNDO表空間擴容:

       ()重置DATAFILE大小

       ()讓DATAFILEAUTOEXTEND

       ()新增資料檔案

 

    刪除UNDO表空間 */

       DROP TABLESPACE tablespace_name

        /*

       注:當前的UNDO表空間不能刪除

           系統只能使用一個UNDO表空間 */

 

 

    --建立表空間的詳細語法:

   

    /*

四、表空間的管理方式:

    字典管理:oracle 8i(不包括i),只存在一種表空間的管理模式,即字典管理表空間(DMT

       DMT是指oracle的空間分配或回收是透過資料庫中的資料字典表來記錄和管理的

       用於管理的兩個資料字典表分別是:UET$used extents)FET$(freeextents)      

       其工作方式是:當建立一個新的段或者段在表空間時,oracle透過一系列的SQL語句來完成這個工作

       且和前面的兩個字典表有關,在繁忙的系統中會造成競爭和等待(另一個DMT會帶來的問題是空間碎片)

      

    本地管理(LMT):   iR2版本後成了預設的選項

       LMT在表空間的資料檔案頭部加入了一個點陣圖區域,在其中記錄每個extent的使用狀況

       extent被使用或者被釋放,oracle會更新頭部的記錄來反映這個變化,不產生回滾資訊

        因為僅僅運算元據檔案頭部的幾個資料塊,不用運算元據字典,LMTDMT要快,尤其是在繁忙的時候更明顯

 

    --檢視錶空間使用的管理方式: */

    SQL> selectTABLESPACE_NAME,EXTENT_MANAGEMENT,BLOCK_SIZE,STATUS,CONTENTS,FORCE_LOGGING,BIGFILE

      2  from dba_tablespaces;

 

    TABLESPACE_NAME                EXTENT_MAN BLOCK_SIZE STATUS    CONTENTS  FOR BIG

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

    SYSTEM                         LOCAL            8192 ONLINE    PERMANENT NO  NO

    UNDOTBS1                       LOCAL            8192 ONLINE    UNDO      NO  NO

    SYSAUX                         LOCAL            8192 ONLINE    PERMANENT NO  NO

    TEMP                           LOCAL            8192 ONLINE    TEMPORARY NO  NO

    USERS                          LOCAL            8192 ONLINE    PERMANENT NO  NO

    EXAMPLE                        LOCAL            8192 ONLINE    PERMANENT NO  NO

    TBS1                           LOCAL            8192 ONLINE    PERMANENT NO  NO

 

    --DMT LMT 的相互轉換

       --將字典管理的表空間轉換為本地管理

       exec dbms_space_admin.tablespace_migrate_to_local('表空間名')    --表空間名用大寫

 

       --將本地管理的表空間轉換為字典管理

       exec dbms_space_admin.tablespace_migrate_from_local('表空間名')

 

   

    --表空間改名:

        --必須在open狀態下,system , sysaux 不能改名

       ALTER TABLESPACE XXX RENAME TO YYY

   

         

    --表空間的擴容:

      /*

      表空間的大小由組成它的所有資料檔案的大小之和來決定

      擴容的方法:*/

         --(1)重置資料檔案大小

            ALTER DATABASE DATAFILE '...' | FileNo RESIZE XX

 

        --(2)設定資料檔案能自動增長

           ALTER DATABASE DATAFILE '... '| FileNo AUTOEXTEND ON | OFF NEXT 20M MAXSIZE300M;

            --檢視哪些表空間為自動增長

           SELECT FILE_NAME,TABLESPACE_NAME,AUTOEXTENSIBLE FROM dba_data_files;

          

 

       /* (3)新增資料檔案

      

           增加到表空間中的資料檔案不能直接從表空間中刪除,除非刪掉整個表空間

           增加資料檔案將有助於均衡I/O

           一個表空間檔案最多為個,檔案越多,執行一次檢查點的代價越高  */

          

           ALTER TABLESPACE tablespace_name  ADD DATAFILE '...' SIZE XX;

     

           ALTER TABLESPACE tbs2 ADD DATAFILE '/u01/app/oracle/oradata/orcl/tbs2.dbf' size200m autoextend on ;

          

    --表空間的四種狀態:

       online

       offline

       read only

       read write

       /*

    offline

       一個表空間的正常狀態是聯機(ONLINE),有時需要將某一個表空間進行離線,以進行資料庫維護

       如:

           在資料庫開啟的狀態下移動資料檔案

           在資料庫開啟的情況下恢復一個表空間或資料檔案

           執行表空間的離線備份(雖然可以進行進行聯機備份)

           使資料庫某一部分不可訪問,讓其它部分能正常訪問。

 

       表空間離線的時候,將產生檢查點事件,該表空間上的資料是不能訪問的

 

       命令:*/

       ALTER TABLESPACE tablespace_name OFFLINE;

 

       --聯機命令:

       ALTER TABLESPACE tablespace_name ONLINE;

      

       --在離線後,有可能無法再聯機,這時要做資料的介質恢復

       ALTER DATABASE RECOVER TABLESPACE tablespace_name

       ALTER TABLESPACE tablespace_name ONLINE;

       /*

    read only:

        不能執行DML語句,可以使用的為DDLDQL語句  */

       ALTER TABLESPACE tablespace_name READ ONLY;

   

    read write

       ALTER TABLESPACE tablespace_name READ WRITE;

   

    --一些表空間的特殊狀態

       tablespacename            onlie            read  only

          system                  必須online       必須read write

          sysaux                  可以offline      不能read only

          undo                    不能offline      不能read only

      

    --檢視錶空間的狀態

    SQL> select tablespace_name,file#,v.status,v.enabled from dba_data_files d,

      2  v$datafile v

      3  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

    EXAMPLE                                 5 ONLINE  READ WRITE

    TBS1                                    6 ONLINE  READ WRITE     

   

    --幾種狀態的相互轉換的演示

    --將表空間置為只讀

    SQL> alter tablespace users read only;

 

    Tablespace altered.

 

    SQL> update scott.emp set sal = sal + 50 where ename = 'SCOTT'; --置為只讀後不可更新

    update scott.emp set sal = sal + 50 where ename = 'SCOTT'

               *

    ERROR at line 1:

    ORA-00372: file 4 cannot be modified at this time

    ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

 

 

    SQL> select tablespace_name,file#,v.status,v.enabled from dba_data_files d,

      2  v$datafile v

      3  where d.file_id = v.file# and tablespace_name = 'USERS';

 

    TABLESPACE_NAME                     FILE# STATUS  ENABLED

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

    USERS                                   4 ONLINE  READ ONLY

   

    --將表空間置為離線

    SQL> alter tablespace users offline;

 

    Tablespace altered.

 

    SQL> update scott.emp set sal = sal + 100 where ename = 'SCOTT';/*置為離線後不可更新*/

    update scott.emp set sal = sal + 100 where ename = 'SCOTT'

               *

    ERROR at line 1:

    ORA-00376: file 4 cannot be read at this time

    ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

   

    --將表空間置為聯機

    SQL> alter tablespace users online;

   

    Tablespace altered.

 

    SQL> select tablespace_name,file#,v.status,v.enabled from dba_data_files d,

      2  v$datafile v

      3  where d.file_id = v.file# and tablespace_name = 'USERS';

 

    TABLESPACE_NAME                     FILE# STATUS  ENABLED

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

    USERS                                   4 ONLINE  READ ONLY

   

    --注意,readonly 狀態下的表空間可以刪除資料,僅僅是不能插入或更新資料,如下

    SQL> delete from scott.emp where ename = 'SCOTT';

 

    SQL> rollback;

 

    Rollback complete.

 

    --將表空間置為讀寫狀態

    SQL> alter tablespace users read write;

 

    Tablespace altered

   

    --表空間資料檔案的重新命名或重定位

    --方法一,在open狀態下且處於archive模式:

       --1、查出資料檔案位置和所屬的表空間

           select TABLESPACE_NAME,FILE_NAME,BYTES/1024/1024 "SIZE(MB)"

           from dba_data_files;

 

       --2、將資料檔案所在的表空間離線

           alter tablespace uu offline;

 

       --3、在作業系統下將檔案移動到另外一個位置,或重新命名(建議使用cp)

           host mv /opt/oracle/oradata/orcl/tt.dbf /disk9/uu1.dbf

      

       --4、修改控制檔案,將資料檔案的指標重新指向到另一個位置(執行rename)

           alter tablespace uu rename datafile '/opt/oracle/oradata/orcl/tt.dbf'

           to '/disk9/uu1.dbf';

 

       --5、表空間線上

           alter tablespace uu online

      

    --方法二,不能離線的表空間

       --1、關閉資料庫,再啟動到mount狀態

           startup mount

       --2、在作業系統下,移動或重新命名檔案

           host mv /opt/oracle/oradata/orcl/tt.dbf /disk9/uu1.dbf

       --3、修改控制檔案

           alter database rename file '/disk8/uu.dbf' to '/disk8/uu2.dbf';

      

       --4、開啟資料庫

           alter database open;

    /* 

    刪除表空間:   

       意味著表空間和資料檔案的資訊從資料庫中刪除,同時也應該將相應的作業系統檔案刪除

       不能刪除的表空間

           系統表空間

           有活動回滾段的表空間

           預設臨時/永久表空間

       命令:  */

           DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND DATAFILES]]

               INCLUDING CONTENTS                -- 刪除表空間及所有段

              INCLUDING CONTENTS [AND DATAFILES] --刪除表空間、所有段、資料檔案、同時刪除系統中的物理檔案

             

    --限制某個使用者對錶空間的使用:

    ALTER USER user_name QUOTA n ON tablespace_name;

 

    ALTER USER scott QUOTA 10m on UU;

    --取消限制

    ALTER USER user_name QUOTA UNLIMITED ON tablespace_name;

 

    GRANT UNLIMITED TABLESPACE TO user_name;

 

    --單個資料檔案離線:

       --1、檢視有哪些資料檔案

           SELECT name FROM v$datafile;

 

       --2、離線

           ALTER DATABASE DATAFILE '...' OFFLINE;

      

       --3、線上  

           ALTER DATABASE DATAFILE '... ' ONLINE

 

       --  有可能提示要進行介質恢復:

           RECOVER DATAFILE '...' 

 

           ALTER DATABASE RECOVER TABLESPACE tablespace_name;

 

       --  之後再將檔案再線

 

    --重新命名資料檔案(同前面移動資料檔案一樣)

 

   --獲取表空間和資料檔案資訊

       --表空間資訊

           dba_tablespaces

           v$tablespace

       --資料檔案資訊

           dba_data_files

           v$datafile

       --臨時資料檔案資訊

           dba_temp_files

           v$tempfile

      

    --檢視系統預設的表空間及臨時表空間:  

       SQL> select PROPERTY_NAME,PROPERTY_VALUE from database_properties

       2  where PROPERTY_NAME like 'DEFAULT%';

 

    --修改改系統的預設表空間:

       SQL>ALTER DATABASE DEFAULT TABLESPACE tablespace_name

 

    --修改系統的預設臨時表空間:

       SQL>ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tablespace_name

 

    --檢視使用者預設表空間:

       SQL>select USERNAME,USER_ID,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE from dba_users;

 

    --修改使用者預設表空間:

       SQL>ALTER USER user_name DEFAULT TABLESPACE tablespace_name

      

    --檢視錶空間的使用情況:

       dba_data_files;

       dba_free_space;

          

       --例:查每個表空間的剩餘空間

       SQL> select tablespace_name,sum(bytes/1024/1024)

         2  from dba_free_space group by tablespace_name;   

    /*

五、資料檔案

    資料檔案是資料庫中最重要的一個要求,是所有的資料庫內容存放的地方

    datafile是按照表空間為組織單位,表空間的構成是按照段區塊為層次---資料檔案的邏輯結構

    datafile就是表空間的物理檔案。

    datafile中的內容是透過dbwrdata buffer cache中的dirty buffer data 寫入的

    dbwr觸發:

        ckpt觸發,dirty buffer 到一定量的時候,data buffer caceh 的記憶體空間快用完了

       查詢空閒記憶體空間超時,表空間offline/read only,表的drop, truncate 開始執備份表空間的時候 */

      

    --檢視資料檔案

    SQL> select file# ,name,status,enabled,bytes/1024/1024 M from v$datafile;

 

        FILE# NAME                                               STATUS ENABLED             M

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

            1 /u01/app/oracle/oradata/orcl/system01.dbf          SYSTEM  READ WRITE       490

            2 /u01/app/oracle/oradata/orcl/undotbs01.dbf         ONLINE  READ WRITE        30

            3 /u01/app/oracle/oradata/orcl/sysaux01.dbf          ONLINE  READ WRITE       250

            4 /u01/app/oracle/oradata/orcl/users01.dbf           ONLINE  READWRITE          5

            5 /u01/app/oracle/oradata/orcl/example01.dbf         ONLINE  READ WRITE       100

            6 /u01/app/oracle/oradata/orcl/tbs1_1.dbf            ONLINE  READ WRITE       100

            7 /u01/app/oracle/oradata/orcl/tbs1_2.dbf            ONLINE  READ WRITE        60

            

    SQL> select tablespace_name,file_name,user_bytes/1024/1024 M from dba_data_files;

 

    TABLESPACE_NAME               FILE_NAME                                                        M

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

    USERS01                       /u01/app/oracle/oradata/orcl/users01.dbf                    4.9375

    SYSAUX                        /u01/app/oracle/oradata/orcl/sysaux01.dbf                 249.9375

    UNDOTBS1                      /u01/app/oracle/oradata/orcl/undotbs01.dbf                 29.9375

    SYSTEM                        /u01/app/oracle/oradata/orcl/system01.dbf                 489.9375

    EXAMPLE                       /u01/app/oracle/oradata/orcl/example01.dbf                 99.9375

    TBS1                          /u01/app/oracle/oradata/orcl/tbs1_1.dbf                    99.9375

    TBS1                           /u01/app/oracle/oradata/orcl/tbs1_2.dbf                   59.9375

 

    --資料檔案的增加與刪除

    --TBS1增加一個資料檔案

    SQL> alter tablespace tbs1 add datafile '/u01/app/oracle/oradata/orcl/tbs1_3.dbf' size10m autoextend on;

    --還有一種建立表空間時不指定大小,而是重用一個存在的dbf要用resue引數,reuse 是把原有的結構拿來用,裡面的資料是用不了的,因為早都沒有了。

   

    --刪表空間中的資料檔案,g以後的版本才用以下功能,在之前版本的就只能把表空間給幹掉。

    SQL> alter tablespace tbs1 drop datafile '/u01/app/oracle/oradata/orcl/tbs1_3.dbf';

   

    --有資料的資料檔案不能刪。第一個不能刪,如果要刪就把表空間幹掉,資料檔案中有資料寫入的檔案也不能刪除,如下

    SQL> alter tablespace tbs1 drop datafile 7;  --7v$datafile中的file#.

    alter tablespace tbs1 drop datafile 7

    *

    ERROR at line 1:

    ORA-03262: the file is non-empty

   

    /*

    資料檔案的日誌記錄

       只有temp表空間是nologing  別的都是logging

        日誌記錄的幾種模式   

           nologin          並不是不記錄日誌而是記錄的很少

           logging          正常記錄日誌資訊

           force logging    記錄的日誌比logging還詳細 記錄資訊非常多  用於DG data guard 容災的情況*/

    SQL> select tablespace_name ,logging,force_logging from dba_tablespaces;

 

    TABLESPACE_NAME                LOGGING   FOR

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

    SYSTEM                         LOGGING   NO

    UNDOTBS1                       LOGGING   NO

    SYSAUX                         LOGGING   NO

    TEMP                           NOLOGGING NO

    USERS01                        LOGGING   NO

    EXAMPLE                        NOLOGGING NO

    TBS1                           LOGGING   NO

   

    --修改表空間中日誌檔案記錄的方式

       SQL> alter tablespace tablespace_name nologging | logging | force logging;

   

    SQL> alter tablespace example logging;

 

    Tablespace altered.

 

    SQL> alter tablespace tbs1 force logging;

 

    Tablespace altered.

 

    SQL> select tablespace_name ,logging,force_logging from dba_tablespaces;

 

    TABLESPACE_NAME                LOGGING   FOR

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

    SYSTEM                         LOGGING   NO

    UNDOTBS1                       LOGGING   NO

    SYSAUX                         LOGGING   NO

    TEMP                           NOLOGGING NO

    USERS01                        LOGGING   NO

    EXAMPLE                        LOGGING   NO

    TBS1                           LOGGING   YES

   

    /*

六、更多 */

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

相關文章