MKTalkway
首页
注册

Oracle數據庫為表空間添加數據文件

MiKing233
好吃懶做
2022-01-25 14:11:20

TableSpace Add DataFile

//查詢表空間

Select * from dba_data_files Where Tablespace_name='TBSName';

 

//添加數據文件

Alter Tablespace TBSName Add Datafile'/XXX/SID/TBSNAME_XX.dbf' Size Xg Autoextend off;

 

//調整數據文件大小

Alter Database Datafile '/XXX/SID/TBSNAME_XX.dbf' Resize Xg;

 

//查詢占用高于80%的表空間

Select a.tablespace_name tnm,a.bytes/1024/1024 total,c.bytes/1024/1024 free,

     Trunc((a.bytes-c.bytes)*100/a.bytes,0) "% USED",Trunc((c.bytes*100)/a.bytes,0) "% FREE"

     from SYS.SM$TS_AVAIL A,SYS.SM$TS_FREE C

     Where  A.TABLESPACE_NAME=C.TABLESPACE_NAME

          and A.TABLESPACE_NAME in (Select Distinct Tablespace_name from dba_tablespaces)

       and Trunc((a.bytes-c.bytes)*100/a.bytes,0) >=80

Order by 4 Desc;

 

 

 

🔮例子:

我們可以在郵件中瞭解到需要添加數據文件的資料庫名稱DB Name,表空間名稱TBS Name,可用的剩餘大小FreeSize(MB)和占用百分比Used(%)

 

使用PL/SQL登錄到對應的DB

首先使用以下SQL查詢當前資料庫占用大於80%的表空間, 執行后和郵件對比確認資料庫登入無誤表空間名稱和剩餘大小相符

SQL> Select a.tablespace_name tnm,a.bytes/1024/1024 total,c.bytes/1024/1024 free,

     Trunc((a.bytes-c.bytes)*100/a.bytes,0) "% USED",Trunc((c.bytes*100)/a.bytes,0) "% FREE"

     from SYS.SM$TS_AVAIL A,SYS.SM$TS_FREE C

     Where  A.TABLESPACE_NAME=C.TABLESPACE_NAME

          and A.TABLESPACE_NAME in (Select Distinct Tablespace_name from dba_tablespaces)

       and Trunc((a.bytes-c.bytes)*100/a.bytes,0) >=80

Order by 4 Desc;

 

 

 

接下來使用下面的SQL命令來查詢表空間數據文件的路徑大小等信息

SQL> Select * from dba_data_files Where Tablespace_name='RINDEX06';

其中RINDEX06即爲郵件中TBSNAME

 

執行後如下圖所示 :

其中FILE_NAME為數據文件名及其路徑, BYTES為單個數據文件的大小, AUTOEXTENSIBLE為是否開啓了自動擴增

 

我們可以看到在郵件中FreeSize剩餘4852MB, 在上面的查詢頁面看到最新的一個數據文件為RINDEX06_15大小爲4g, 且上面大多正常為一個數據文件大小設定爲為2g4g, 我們可以添加一個新的大小爲4g的數據文件名爲RINDEX06_16, 文件名稱順延即可

 

在添加數據文件之前保守起見最好先檢查伺服器中數據文件所在路徑的空間占用情況

例如在上面的例子中數據文件路徑位於/oradata路徑下

我們需要確保剩餘空間大於我們需要添加的空間

通過DB NameTNS中得到DB所在伺服器的IP地址

再通過IP地址登入到Linux伺服器上, 通過Command#df -h 來檢查空間占用情況

如下圖所示 :

存放數據文件所在的路徑 /oradata 占用了52% 總共2.0T 占用982G 剩餘933G

確認剩餘空間足夠我們添加數據文件的大小后, 回到PL/SQL, 執行下面的SQL語句

 

//RINDEX06中添加一個名爲RINDEX06_16.dbf大小4g的新數據文件

SQL> Alter Tablespace RINDEX06 Add Datafile'/oradata/vnaa8mes/RINDEX06_16.dbf' Size 4g Autoextend off;

 

因爲數據文件有數量限制并不是無限多的, 我們還可以使用另一種方式不新增數據文件, 通過調整已經存在的數據文件大小來增加表空間

例如我們看到表空間查詢結果中有多個2g大小的數據文件, 例如我們可以選擇擴大RINDEX06_12這個數據文件

 

//RINDEX06中的數據文件RINDEX06_12.dbf擴大到4g

SQL> Alter Database Datafile '/oradata/vnaa8mes/RINDEX06_12.dbf' Resize 4g;

 

 

 

至此我們已經完成了數據文件的添加

你可以根據該SOP開頭的模板靈活的來為其他DB添加數據文件