1. 程式人生 > >bigfile表空間 smallfile表空間

bigfile表空間 smallfile表空間

Oracle 10g bigfile表空間簡介  
  
   
01. A Bigfile 表空間包含一個非常大的資料檔案  
  
02. SMALLFILE表空間和BIGFILE表空間可以在同一個資料庫共存  
  
  
1.建立一個bigfile表空間  
  
  
    SQL> CREATE BIGFILE TABLESPACE  big01    
         datafile '/oracle/oradata/orcl/big01.dbf' size 50M;  
  
Tablespace created.  
  
1.2 檢視資料庫所有表空間bigfile屬性,BIG01為bigfile表空間  
  
SQL> select TABLESPACE_NAME, BIGFILE from DBA_TABLESPACES;  
  
TABLESPACE_NAME                BIGFILE  
------------------------------ --------  
SYSTEM                         NO  
UNDOTBS1                       NO  
SYSAUX                         NO  
TEMP                           NO  
USERS                          NO  
TEST                           NO  
BIG01                          YES  
  
    
1.3 表空間TEST為SMALLFILE表空間,現在做一個測試resize TEST表空間  
SQL> alter tablespace test  resize 20M;  
alter tablespace test  resize 20M  
*  
ERROR at line 1:  
ORA-32773: operation not supported for smallfile tablespace TEST  
  
  
由此可見small不支援表空間的resize,當然我們可以通過alter database reszie datafile 來實現smallfile表空間某個資料檔案的resize  
  
  
  
2.bigfile表空間檔案  
  
  bigfile表空間只能包含一個檔案,它可以非常大,我們不能對bigfile表空間增加資料檔案  
        
SQL> alter tablespace big01 add  
  2  datafile '/oracle/oradata/orcl/big02.dbf' size 10M;  
alter tablespace big01 add  
*  
ERROR at line 1:  
ORA-32771: cannot add file to bigfile tablespace  
  
  
3.BIGFILE表空間的定址  
  
   bigfile表空間的資料檔案大小遠遠大於smallfile的表空間,其優勢得益於Oracle 10g新的定址方案  
  
   一個rowid定址儲存在傳統的SMALLFILE表空間中的物件使用其中的12個位元組  
     
   例: rowid定址  
  
        . 相對File# 3個位元組, Block#需要6個位元組  
  
相同的rowid定址在bigfile表空間只需要9個位元組,9個位元組儲存block#在唯一的檔案中  
     
            
          bigfile 表空間只有一個數據檔案,因此不必需要另外3個位元組的相關連file#  
  
   新定址方案   
  
        允許在一個單獨的資料檔案裡最多4G個的資料塊,  
        資料檔案大小blocksize 2K的資料檔案最大支援8TB,blocksize 32K的資料檔案最大支援到128TB  
        
  
4.bigfile表空間的優勢  
  
  只有一個數據檔案的表空間更方便管理,因此唯一的表空間就變成了管理單元  
      
    修改表空間的擴充套件   
SQL> alter tablespace big01 autoextend on;  
  
Tablespace altered.  
  
SQL> alter tablespace big01 autoextend off;  
  
Tablespace altered.  
  
    線上修改bigfile表空間大小  
SQL> alter tablespace big01 resize 2M;  
  
Tablespace altered.  
  
  
smallfile表空間相對靈活性就不如bigfile表空間  
  
SQL> select TABLESPACE_NAME, BIGFILE from DBA_TABLESPACES where TABLESPACE_NAME='TEST';  
  
TABLESPACE_NAME                BIG  
------------------------------ ---  
TEST                           NO  
  
  
SQL> alter tablespace test  resize 20M;  
alter tablespace test  resize 20M  
*  
ERROR at line 1:  
ORA-32773: operation not supported for smallfile tablespace TEST  
  
  
  
5.bigfile表空間支援以下儲存管理方式   
  
      --> ASM (Automatic Storage Management)   
      --> a logical volume manager supporting striping/RAID  
      --> dynamically extensible logical volumes  
      --> Oracle Managed Files (OMF)  
    
  
  
6. 修改資料庫建立表空間的bigfile型別   
  
  
SQL> select * from database_properties   
          where property_name='DEFAULT_TBS_TYPE';  
  
當前資料庫建立表空間的預設方式是SMALLFILE表空間  
  
PROPERTY_NAME                  PROPERTY_VALUE                           DESCRIPTION  
------------------------------ ---------------------------------------- ------------------------------  
DEFAULT_TBS_TYPE               SMALLFILE                                Default tablespace type  
  
更改資料庫建立表空間為BIGFILE表空間  
SQL> ALTER DATABASE SET DEFAULT bigfile TABLESPACE;  
  
Database altered.  
  
SQL> CREATE TABLESPACE big02   
datafile '/oracle/oradata/orcl/big02.dbf' size 10M;  
  
Tablespace created.  
  
SQL> select TABLESPACE_NAME, BIGFILE from DBA_TABLESPACES;  
  
TABLESPACE_NAME                BIG  
------------------------------ ---  
SYSTEM                         NO  
UNDOTBS1                       NO  
SYSAUX                         NO  
TEMP                           NO  
USERS                          NO  
TEST                           NO  
BIG01                          YES  
BIG02                          YES  
  
  
  
7. bigfile表空間比傳統的smallfile表空間的啟動,檢查點和DBWR的操作更具有效能優勢.  
  
  
檢視資料庫檔案的檔案號和相對檔案號  
SQL> select file_name, file_id, relative_fno from dba_data_files;  
  
      
FILE_NAME                                                       FILE_ID RELATIVE_FNO  
------------------------------------------------------------ ---------- ------------  
/oracle/oradata/orcl/big01.dbf                                        8         1024  
/oracle/oradata/orcl/big02.dbf                                        9         1024  
/oracle/oradata/orcl/users01.dbf                                      4            4  
/oracle/oradata/orcl/sysaux01.dbf                                     3            3  
/oracle/oradata/orcl/undotbs01.dbf                                    2            2  
/oracle/oradata/orcl/system01.dbf                                     1            1  
/oracle/oradata/orcl/system02.dbf                                     6            6  
/oracle/oradata/orcl/test02.dbf                                       7            7  
/oracle/oradata/orcl/test.dbf                                         5            5  
  
注:bigfile 表空間只有一個數據檔案,相對檔案號為1024  
  
  
  
8.bigfile 表空間、smallfile表空間  
  
SQL> SELECT TABLESPACE_NAME,bigfile from dba_tablespaces where tablespace_name='TEST';  
  
TABLESPACE_NAME                BIG  
------------------------------ ---  
TEST                           NO  
  
  
1- 在smallfile表空間裡從表的rowid中獲取相對檔案號的資訊  
   
   
 SQL> create table st0 (c number) tablespace TEST;  
     Table created.  
  
SQL> insert into st0 values (1);  
     1 row created.  
  
       
SQL> select dbms_rowid.rowid_relative_fno(rowid,'SMALLFILE') from st0;  
  
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID,'SMALLFILE')  
------------------------------------------------  
                                               5  
                                                 
                                                 
  
2- 在smallfile表空間裡從表的rowid中獲取相對檔案號的資訊 :  
  
SQL> create table bt01 (c number) tablespace big01;  
     Table created.  
  
     SQL> insert into  bt01 values (1);  
     1 row created.  
  
   
SQL> select dbms_rowid.rowid_relative_fno(rowid,'BIGFILE') from bt01;  
  
     DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID,'BIGFILE')  
     ----------------------------------------------  
                                               1024  
  
  
9.bigfile表空間支援alter table move   
  
支援smallfile 表空間總的物件move至bigfile 表空間  
  
SQL> select name, bigfile, table_name from dba_tables t, v$tablespace v  
             where table_name='T11' and v.name=t.tablespace_name;  
  
NAME                           BIG TABLE_NAME  
------------------------------ --- ------------------------------  
USERS                          NO  T11  
  
   
SQL> ALTER TABLE scott.emp MOVE TABLESPACE BIG01;  
  
Table altered.  
  
    
SQL> Select name, bigfile, table_name from dba_tables t, v$tablespace v  
  2            where table_name='T11' and v.name=t.tablespace_name;  
  
NAME                           BIG TABLE_NAME  
------------------------------ --- ------------------------------  
BIG01                          YES T11  
  
  
   
  
特性限制  
------------   
新特性僅支援   
  
     --> locally managed tablespaces 本地管理表空間  
     --> with ASSM (automatic segment space management) ASSM管理表空間