ORA-01659,ORA-01652錯誤

來源:互聯網
上載者:User

資料庫一張表進行insert時,出現ORA-01659錯誤
ERROR at line 1:
ORA-01659: unable to allocate MINEXTENTS beyond 56 in tablespace USER01
同時後台alert 日誌出現
ORA-1652: unable to extend temp segment by 8192 in tablespace                USER01
剛開始以為是user01資料表空間不足導致,可是查詢資料表空間使用率很低,也就可以排除因空間不足的原因了。
我建立了一張測試表 ,對錶進行insert 和update 均沒有任何問題,於是感覺可能是由於表的自身問題所致。
查看錶的建表語句:
select  dbms_metadata.get_ddl('TABLE','T2') from dual;
------------------------
 CREATE TABLE scott.t2
  (    "ID" VARCHAR2(50) NOT NULL ENABLE,
      "MOBILENO" VARCHAR2(11))
 SEGMENT CREATION IMMEDIATE
 PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
 STORAGE(INITIAL 4294967296 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
 TABLESPACE "USER01"

這裡可以看到STORAGE(INITIAL 4294967296 NEXT 1048576) 這個參數特別大,預設是65536.
我把建表語句放到另一個庫裡執行,想建立一張同樣的表,結果出現了和之前一樣的報錯資訊。
orcl@ SCOTT>    CREATE TABLE scott.t2
 2    (    "ID" VARCHAR2(50) NOT NULL ENABLE,
 3          "MOBILENO" VARCHAR2(11))
 4    STORAGE( INITIAL 4294967296 NEXT 8192 MINEXTENTS 1)
 5    TABLESPACE "USER01";
  CREATE TABLE scott.t2
*
ERROR at line 1:
ORA-01659: unable to allocate MINEXTENTS beyond 5 in tablespace USER01
由此可以確認此錯是初始化儲存參數過大導致,於是重建立表 並修改初始化儲存參數,於是問題解決。
 1    CREATE TABLE scott.t2
 2    (    "ID" VARCHAR2(50) NOT NULL ENABLE,
 3          "MOBILENO" VARCHAR2(11))
 4    STORAGE( INITIAL 65536 NEXT 8192 MINEXTENTS 1)
 5*  TABLESPACE "USER01"
以下是引述Oracle 文檔對此錯誤的解釋:

Error:  ORA-1652
Text:  unable to extend temp segment by %s in tablespace %s
------- -----------------------------------------------------------------------
Cause:  Failed to allocate an extent for temp segment in tablespace.
Action: Use ALTER TABLESPACE ADD DATAFILE statement to add one or more
      files to the tablespace indicated or create the object in another
      tablespace.

*** Important: The notes below are for experienced users - See Note:22080.1


Explanation:
      This error is fairly self explanatory - we cannot get enough space for a temporary segment.
      The size reported in the error message is the number of contiguous free Oracle blocks that cannot be found in the listed tablespace.

 NOTE: A "temp segment" is not necessarily a SORT segment in a temporary tablespace.
      It is also used for temporary situations while creating or dropping objects like tables and indexes in permanent tablespaces.
      eg: When you perform a CREATE INDEX a TEMP segment is created to hold what will be the final permanent index data.
            This TEMP segment is converted to a real INDEX segment in the dictionary at the end of the CREATE INDEX operation.
            It remains a temp segment for the duration of the CREATE INDEX operation and so failures to extend it report ORA-1652 rather than an INDEX related space error.

A TEMPORARY segment may be from:

A SORT Used for a SELECT or for DML/DDL
CREATE INDEX The index create performs a SORT in the users default TEMP tablespace and ALSO uses a TEMP segment to build the final index in the INDEX tablespace. Once the index build is complete the segment type is changed.
CREATE PK CONSTRAINT  
ENABLE CONSTRAINT  
CREATE TABLE New tables start out as TEMPORARY segments.
Eg: If MINEXTENTS is > 1 or you issue CREATE table as SELECT.
Accessing a GLOBAL TEMPORARY TABLE When you access a global temporary table a TEMP segment is instantiated to hold the temporary data.

It is worth making sure the TEMP tablespace PCTINCREASE is 0 and  that it has a sensible (large) storage clause to prevent fragmentation.
      For TEMPORARY temp tablespaces make sure both INITIAL and NEXT are  set to large values as extent sizes are taken from the NEXT clause and not the INITIAL clause.

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.