oracle基礎管理——表空間和資料檔案

fiona8953發表於2014-11-04
//檢視使用者表空間
SQL> select t.default_tablespace from sys.dba_users t WHERE t.username='JUICE';     
DEFAULT_TABLESPACE 
------------------------------
USERS
//檢視data檔案的路徑
[root@fiona2 orcl]# pwd
/u01/app/oracle/oradata/orcl
//建立表空間,一般都是用local表空間。
//字典管理表空間是透過資料字典表(UET$FET$)來管理和記錄,而這2個表透過檔案號(file#)、資料塊號(block#)等資訊來管理空間的分配和回收,造成資料庫效能瓶頸和空間碎片。
//本地管理表空間是透過在每個表空間的資料檔案的頭部加入了一個點陣圖區域,在其中記錄每個Extent的使用狀況。自動分配(oracle按遞增演算法來分配空間)或UNIFORM(預設1MB)。
SQL> create tablespace juice datafile '/u01/app/oracle/oradata/orcl/juice01.dbf' size 10M
 extent management local uniform size 128k segment space management auto; 
Tablespace created. 
SQL> select tablespace_name,extent_management,allocation_type FROM dba_tablespaces where tablespace_name='JUICE';  
TABLESPACE_NAME                EXTENT_MAN       ALLOCATIO 
------------------------------              ----------               --------- 
JUICE                                     LOCAL                UNIFORM 
1 rows selected.
//使用dump方式,檢視保留塊記錄的內容
SQL> alter system dump datafile 5 block max 3 block min 1; 
System altered. 
//由以下指令碼獲取當前會話DUMP檔案路徑,如果是想獲取別的會話的DUMP檔案路徑,則修改SID即可。P227
 SELECT    d.VALUE 
      || '/'
    || LOWER (RTRIM (i.INSTANCE, CHR (0)))
    || '_ora_'
     || p.spid
      || '.trc' trace_file_name
FROM (SELECT p.spid
        FROM v$mystat m, v$session s, v$process p
         WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p,
       (SELECT t.INSTANCE
          FROM v$thread t, v$parameter v
       WHERE v.NAME = 'thread'
          AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i,
      (SELECT VALUE
         FROM v$parameter
      WHERE NAME = 'user_dump_dest') d;
SQL> select 'alter table ' || table_name || ' move tablespace users;' from user_tables where tablespace_name='SYSTEM';
 'ALTERTABLE'||TABLE_NAME||'MOVETABLESPACEUSERS;'
 -----------------------------------------------------------------
alter table PRODUCT move tablespace users;
SQL> alter table PRODUCT move tablespace juice; 
Table altered. 
SQL> select table_name from user_tables where tablespace_name='JUICE';
TABLE_NAME
------------------------------
PRODUCT
//使用如下方法,如果表的資料量很小的話可以考慮,如果資料量大的話重建索引會耗時比較長。 自己寫批處理生成如下語句: 
alter table table1 move tablespace users; alter index index1 rebuild tablepsace users; alter user  user1 default tablespace users; 
例如  select 'alter table ' || table_name || ' move tablespace users;' from user_tables where tablespace_name='SYSTEM'; 
//使用匯入匯出功能,耗時較短
例如將資料庫中system使用者的表匯出 exp system/manager@TEST file=d:\daochu.dmp tables=(table1,table2)  
注:如果用exp system/manager@TEST file=d:\daochu.dmp owner=(system),會將所有是system使用者的表都匯出,所以還是一個表一個表的寫吧! 接著匯入到user使用者表 imp user/test@TEST fromuser=system touser=user file=d:\daochu.dmp,就可以了。
 
 

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

相關文章