Oracle imp/impdp報ORA-04031:streams pool,..fixed allocation callback解決/分析

maohaiqing0304發表於2014-03-05


目的

   將客戶測試完的A伺服器的u1使用者完全匯入到B伺服器給內部測試,改名為u2透過dblink網路傳輸,不需要有dmp檔案保留’

命令

     Impdp test/test@192.168.0.B:1521/sid_name network_link=db_A remap_schema=u1:u2 remap_tablespace=users:user01 
    
(

test/test@192.168.0.B:1521/sid_name 填寫導到目標庫伺服器地址)、(network_link=db_A要導的使用者的link)

 例如 

A的U1匯入到B U2要在B上建立DBlink為:

create public database link db_

A connect to 使用者 identified by 密碼 using '(DESCRIPTION =(ADDRESS_LIST =   (ADDRESS = (PROTOCOL = TCP)(HOST =IP)(PORT = 埠號)))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME =例項)))'; 

   Impdp命令引數參考: impdp  help(impdp help=y
)

報錯重現

    E:\app\Administrator\product\11.2.0\dbhome_1\BIN>impdp.exe test/test@192.168.0.B:1521/sid_name

    Import: Release 11.2.0.1.0 - Production on 星期四 12月 5 18:46:51 2013

    Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

    連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

    UDI-31623: 操作產生了 ORACLE 錯誤 31623

    ORA-31623: 作業沒有透過指定的控制程式碼連線到此會話

    ORA-06512: 在 "SYS.DBMS_DATAPUMP", line 3326

    ORA-06512: 在 "SYS.DBMS_DATAPUMP", line 4551

    ORA-06512: 在 line 1

跟蹤下告警日誌

    [root@kfdb trace]# tail -f alert_sid_name.log 

    Thu Dec 05 18:19:16 2013

    Errors in file /oradata2/app/oracle/diag/rdbms/sid_name/sid_name/trace/sid_name_ora_30023.trc  (incident=60782):

    ORA-04031: 鏃犳硶鍒嗛厤 32 瀛楄妭鐨勫叡浜?唴瀛("streams pool","unknown object","streams pool","fixed allocation callback")

    Use ADRCI or Support Workbench to package the incident.

    See Note 411.1 at My Oracle Support for error and packaging details.

    Thu Dec 05 18:19:17 2013

    Sweep [inc][60782]: completed


分析

    ORA-4031:一般都因為記憶體不夠大造成(SHARED POOL SIZE ,Large_pool,Java_pool, streams pool…)

    (空間不足可能包括碎片 而不能找到足夠的記憶體塊)

    streams pool流池:用於快取流程式用於移動和複製資料所使用的佇列訊息

解決方案 

    擴大streams pool、SGA 

實施:
檢查系統和資料空間 

 [root@kfdb trace]# df -h

Filesystem            容量  已用 可用 已用% 掛載點

/dev/cciss/c0d0p1      29G   25G  3.3G  89% /

none                  8.0G  9.6M  8.0G   1% /dev/shm

/dev/cciss/c0d0p3     354G  139G  197G  42% /u01

/dev/cciss/c0d1p1     216G  185G   20G  91% /oradata2

[root@kfdb trace]#

2、SGA大小

SQL>  show parameter sga_

NAME                               TYPE      VALUE

------------------------------------ ----------- ------------------------------

sga_max_size                       big integer 1536M

sga_target                          big integer 1536M

3、流池大小

SQL> show parameter stream

NAME                             TYPE        VALUE

------------------------------------ ----------- ------------------------------

streams_pool_size                    big integer 0

 

修改SGA和流池大小重啟資料庫

SQL> alter system set sga_target=2048M scope=spfile sid='sid_name';

SQL> alter system set streams_pool_size=50M scope=spfile sid='sid_name';

SQL> shutdown immediate

SQL> startup  


檢視是否修改正確

SQL> show parameter sga_

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

sga_max_size                         big integer 2G

sga_target                           big integer 2G

SQL> show parameter streams_

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

streams_pool_size                    big integer 64M

SQL> 


重新測試匯入

E:\app\Administrator\product\11.2.0\dbhome_1\BIN>impdp.exe test/test@192.168.0.B:1521/s

inodb network_link=db_A remap_schema=u1:u2 remap_tablespace=users:user01

Import: Release 11.2.0.1.0 - Production on 星期四 12月 5 18:48:59 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

啟動 "test"."SYS_IMPORT_SCHEMA_01":  test/********@192.168.0.B:1521/sid_name network_link

=db_A remap_schema=u1:u2 remap_tablespace=users:user01

正在使用 BLOCKS 方法進行估計...

處理物件型別 SCHEMA_EXPORT/TABLE/TABLE_DATA

使用 BLOCKS 方法的總估計: 20.47 GB

處理物件型別 SCHEMA_EXPORT/USER

ORA-31684: 物件型別 USER:"u2" 已存在

處理物件型別 SCHEMA_EXPORT/SYSTEM_GRANT

處理物件型別 SCHEMA_EXPORT/ROLE_GRANT

處理物件型別 SCHEMA_EXPORT/DEFAULT_ROLE

處理物件型別 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA

處理物件型別 SCHEMA_EXPORT/SEQUENCE/SEQUENCE

處理物件型別 SCHEMA_EXPORT/TABLE/TABLE

. . 匯入了 "u2"."CS_ORDER_ITEM_DRAFT_REC" 10683193 行

 

原理

    DataPump的記憶體元件有PGA和SGA中的共享池Shared Pool、流池Streams Pool。

    Expdp/Impdp對shared Pool的開銷主要體現在其執行過程中需要呼叫一系列的包體PACKGE BODY

    它們包括:

     PACKAGE_NAME                             TYPE                 SHARABLE_MEM

     ---------------------------------------- -------------------- ------------

     SYS.KUPM$MCP                             PACKAGE BODY               425448   ...     

    DataPump內部利用高階佇列 Advanced Queue技術,所以也會用到流池Streams Pool,與之相關的Streams Pool元件包括:

     POOL         NAME                            BYTES

     ------------ -------------------------- ----------

     streams pool sob_kgqmrec                     19584   ....

     此外DataPump還可能從Large Pool中分配PX msg pool作為並行程式通訊池,但是這種記憶體開銷很小。

 

總結

DataPump工具Expdp/Impdp需要從PGA和SGA的Shared Pool、Streams Pool、Streams Pool和Large Pool分配必要的記憶體。為了避免Expdp/Impdp出現ORA-04031/ORA-04030錯誤,我們有必要在自動管理模式下設定合理的pga_aggregate_target和sga_target(抑或者memory_target)記憶體初始化引數,如果使用手動的SGA管理的話,那麼有必要保證shared_pool_size的設定適宜,對於Streams Pool和Large Pool一般設定為150MB大小

        (/oradata2/app/oracle/diag/rdbms/sid_name/sid_name/trace/sid_name_ora_30023.trc)

   謝謝大家閱讀~
希望對您有幫助~

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

相關文章