SDE表空間不足解決辦法(ORA-01653)


一、問題描述

      在往空間數據庫拷貝數據的時候,發生了ORA-01653的錯誤,提示信息如下:

QQ截圖20170519105717

      這主要是因為表空間不足引起的,出現這種表空間不足的問題一般有兩種情況:一種是表空間的自動擴展功能沒有開;另一種是空間確實不夠用了,已經達到了自動擴展的上限。

      所以我們解決問題的步驟就是先查看Oracle數據庫表空間大小,然后看一下表空間下的所有的數據文件的自動擴展功能是否打開;若確實是表空間不夠用了,那么我們就需要擴大表空間了。

二、表空間信息查看

      通過下面語句,可以查看當前表空間使用情況。

   1: SELECT a.tablespace_name "表空間名稱",
   2: a.bytes / 1024 / 1024 "表空間大小(M)",
   3: (a.bytes - b.bytes) / 1024 / 1024 "已使用空間(M)",
   4: b.bytes / 1024 / 1024 "空閑空間(M)",
   5: round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比"
   6: FROM (SELECT tablespace_name, sum(bytes) bytes
   7: FROM dba_data_files
   8: GROUP BY tablespace_name) a,
   9: (SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest
  10: FROM dba_free_space
  11: GROUP BY tablespace_name) b
  12: WHERE a.tablespace_name = b.tablespace_name
  13: ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC

      其中:

       "表空間大小(M)"

        表示表空間所有的數據文件總共在操作系統占用磁盤空間的大小。比如:USER_DATA表空間有2個數據文件,datafile1為300MB,datafile2為400MB,那么USER_DATA表空間的"表空間大小"就是700MB。

       "已使用空間(M)"

        表示表空間已經使用了多少。

       "空閑空間(M)"

        表示表空間剩余多少。

       "使用比"

        表示已經使用的百分比。 比如從上一步驟中查看到SDE表空間已使用百分比達到90%以上,可以查看該表空間總共有幾個數據文件,每個數據文件是否自動擴展,可以自動擴展的最大值。

       注意語句中的SDE必須使用大寫。

   1: SELECT file_name,
   2: tablespace_name,
   3: bytes / 1024 / 1024 "bytes MB",
   4: maxbytes / 1024 / 1024 "maxbytes MB"
   5: FROM dba_data_files
   6: WHERE tablespace_name = 'SDE';

       查看表空間是否為自動擴展

   1: SELECT file_id, file_name, tablespace_name, autoextensible, increment_by
   2: FROM dba_data_files
   3: WHERE tablespace_name = 'SDE'
   4: ORDER BY file_id desc;

       查看"AUTOEXTENSIBLE"對應的值是YES還是NO,若是NO,說明表空間的自動擴展功能沒有開,改成YES就可以了。

       對於空間數據,最好將自動增長漲幅設置稍微大一些,否則在一些特殊情況下仍然會出現問題。

   1: ALTER DATABASE DATAFILE 'D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SDE' AUTOEXTEND ON NEXT 10M

三、表空間

       如果需要對表空間進行擴容,可以直接在PLSQL中通過執行語句的方式進行對表空間的擴展。

        擴大表空間又分兩種做法:一種是增大數據文件大小,一種是增加數據文件數量。

       首先找出該表空間對應的數據文件及路徑,該路徑對應FILE_NAME字段。注意這里的路徑最好通過此方式獲取,不一定是本地指定存儲目錄下存儲的DBF文件。

   1: SELECT * FROM dba_data_files t WHERE t.tablespace_name='SDE';

       1:增大數據文件

       alter database datafile '全路徑的數據文件名稱' resize ***M;

       增加對應的表空間里面的某個數據文件的大小為***M。

       例如在我本機:

   1: alter database datafile 'D:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SDE' resize 1024M;

         2:增加數據文件

       獲取創建表空間的語句:

   1: SELECT dbms_metadata.get_ddl('TABLESPACE', 'SDE') FROM dual;

       alter tablespace 表空間名稱 add datafile '全路徑的數據文件名稱' size ***M

       autoextend on maxsize 20G;

       新增一個數據文件,全路徑的數據文件名稱為該新增數據文件的全路徑文件名稱。大小為***M,自動擴展功能打開,且該數據文件的最大擴展值為20G。

       驗證已經增加的數據文件

   1: SELECT file_name, file_id, tablespace_name
   2: FROM dba_data_files
   3: WHERE tablespace_name = 'SDE'

        如果刪除表空間數據文件

       altertablespace 表空間名稱

       DROP datafile '/u01/app/oracle/product/10.2.0/oradata/orcl/SDE.dbf '

        說明:表空間一般讓空閑百分比保持在10%以上,且數據文件大小最好不要超過2G。當表空間不足時,要么resieze datafile,要么增加datafile。

        部分內容引用自:http://blog.sina.com.cn/javaandsoft


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM