• X IMPDP 时遇 ORA-31623、ORA-06512 错误解决一例


    今天将一个测试库中的数据导到另一个测试库中,遇到了ORA-31623和ORA-06512错误,以下是大致过程的记录:

    源库为10.2.0.3 64bit,目标库为新装的11.2.0.4 64bit,采用expdp方式开4个并行,并按schema的方式来导出数据,语句为:


    expdp system/oracle parallel=4 directory=exppump dumpfile=sisver_20150831_%u.DMP schemas=sc1,sc2 logfile=expdp_sisver_20150831.log

    导出没有什么问题,16g左右的数据大概在10分钟完成,然后将生成的4个DMP文件ftp到目标端,再通过IMPDP导入,以下是导入语句:


    impdp system/oracle parallel=4 remap_schema=sc1:sc1new,sc2:sc2new directory=impdppump remap_tablespace=sc1tbs:sc1newtbs,sc2tbs:sc2newtbs dumpfile=sisver_20150831_%u.DMP full=y cluster=no logfile=impdp_sisver_20150831.log

    导入前还做好了准备工作,如:在测试库建好相应的表空间和用户,设置用户权限、设置用户默认表空间、分配对默认表空间的quota等,

    当然其实只要创建表空间就可以了,因为使用remap_schema时会自动创建相应用户。


    当在目标端进行导入的时候,就遇到了点问题:
    Import: Release 11.2.0.4.0 - Production on Mon Aug 31 13:10:00 2015

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

    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options

    UDI-31623: operation generated ORACLE error 31623
    ORA-31623: a job is not attached to this session via the specified handle
    ORA-06512: at "SYS.DBMS_DATAPUMP", line 3326
    ORA-06512: at "SYS.DBMS_DATAPUMP", line 4551
    ORA-06512: at line 1

    开始以为是版本的问题,因为源端是10g的库,而目标端是11g的库,但其实只有在exp方式导出的时候可能需要考虑加上version参数导出,expdp是不需要的
    然后又想到是不是因为system用户是否对directory没有权限,但对相应的directory加上read,write权限后,依然报相同的错,于是查看了一下alert日志:

    [oracle@sisdb:~]tail -100f /oracle/diag/rdbms/siststdb/siststdb/trace/alert_siststdb.log

    Mon Aug 31 13:01:37 2015
    Errors in file /oracle/diag/rdbms/siststdb/siststdb/trace/siststdb_ora_43843686.trc  (incident=36272):
    ORA-04031: unable to allocate 56 bytes of shared memory ("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.
    Mon Aug 31 13:01:40 2015
    Sweep [inc][36272]: completed
    Mon Aug 31 13:01:51 2015
    Errors in file /oracle/diag/rdbms/siststdb/siststdb/trace/siststdb_ora_43843690.trc  (incident=48001):
    ORA-04031: unable to allocate 56 bytes of shared memory ("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.
    Mon Aug 31 13:02:20 2015
    Errors in file /oracle/diag/rdbms/siststdb/siststdb/trace/siststdb_ora_327938.trc  (incident=48002):
    ORA-04031: unable to allocate 56 bytes of shared memory ("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.
    Mon Aug 31 13:02:40 2015
    Sweep [inc][48002]: completed
    Sweep [inc][48001]: completed
    Mon Aug 31 13:10:00 2015
    Errors in file /oracle/diag/rdbms/siststdb/siststdb/trace/siststdb_ora_42205274.trc  (incident=36281):
    ORA-04031: unable to allocate 56 bytes of shared memory ("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.
    Mon Aug 31 13:10:01 2015
    Sweep [inc][36281]: completed

    在alert日志中发现,在执行IMPDP导入的时候,数据库报了ORA-04031的错误,我们都知道这是和SGA内存相关的一个报错,

    而且后面很清楚的提示了是由于SGA中的一个组件“stream pool”出现了内存不足,使用IMPDP竟然还会用到流池,这个是我没有想到的,

    一直以为只有用sream和AQ技术时才会使用到流池,那么再来看一下流池的大小:

    SQL> set line 200 pages 200
    SQL> select * from v$sgainfo;

    NAME                                  BYTES RES
    -------------------------------- ---------- ---
    Fixed SGA Size                      2263488 No
    Redo Buffers                        9707520 No
    Buffer Cache Size                 134217728 Yes
    Shared Pool Size                  436207616 Yes
    Large Pool Size                           0 Yes
    Java Pool Size                     16777216 Yes
    Streams Pool Size                         0 Yes
    Shared IO Pool Size                       0 Yes
    Granule Size                       16777216 No
    Maximum SGA Size                 8551575552 No
    Startup overhead in Shared Pool   363476736 No
    Free SGA Memory Available        7952400384

    由于这个库安装的时候只设置了MEMORY_MAX_TARGET=9G,而未设置SGA_TARGET(即,SGA_TARGET=0,不采用10g的内存自动管理)

    和MEMORY_TARGET的值(即,也未采用了11g的ASMM方式),因此流池默认大小也是0

    SQL> show parameter memory

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    hi_shared_memory_address             integer     0
    memory_max_target                    big integer 9G
    memory_target                        big integer 0
    shared_memory_address                integer     0

    SQL> show parameter sga

    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    lock_sga                             boolean     FALSE
    pre_page_sga                         boolean     FALSE
    sga_max_size                         big integer 8G
    sga_target                           big integer 0

    SQL>  select name,issys_modifiable from v$parameter where name like '%pool%';

    NAME                                                                             ISSYS_MOD
    -------------------------------------------------------------------------------- ---------
    shared_pool_size                                                                 IMMEDIATE
    large_pool_size                                                                  IMMEDIATE
    java_pool_size                                                                   IMMEDIATE
    streams_pool_size                                                                IMMEDIATE
    shared_pool_reserved_size                                                        FALSE
    buffer_pool_keep                                                                 FALSE
    buffer_pool_recycle                                                              FALSE
    global_context_pool_size                                                         FALSE
    olap_page_pool_size                                                              DEFERRED

    SQL>

    可以看到,streams_pool_size的issys_modifiable的值是“IMMEDIATE”,说明是动态参数(无须重启数据库生效),那么就手动分配给它一个值,我给了100M

    SQL> alter system set streams_pool_size=100m scope=both;

    System altered.

    SQL> select * from v$sgainfo;

    NAME                                  BYTES RES
    -------------------------------- ---------- ---
    Fixed SGA Size                      2263488 No
    Redo Buffers                        9707520 No
    Buffer Cache Size                 134217728 Yes
    Shared Pool Size                  436207616 Yes
    Large Pool Size                           0 Yes
    Java Pool Size                     16777216 Yes
    Streams Pool Size                 117440512 Yes
    Shared IO Pool Size                       0 Yes
    Granule Size                       16777216 No
    Maximum SGA Size                 8551575552 No
    Startup overhead in Shared Pool   363476736 No
    Free SGA Memory Available        7834959872

    SQL>

    后来还是不行,内存太小了,报错如下:

     是shared pool太小了设置为 320m,可以增加 shared pool 的大小为2G。

    现在再来试一下刚才的导入命令,发现已经可以顺利执行下去了

    [oracle@sisdb:~]impdp system/oracle parallel=4remap_schema=sc1:sc1new,sc2:sc2newdirectory=impdppumpremap_tablespace=sc1tbs:sc1newtbs,sc2tbs:sc2newtbsdumpfile=sisver_20150831_%u.DMP full=y cluster=no logfile=impdp_sisver_20150831.log

    Import: Release 11.2.0.4.0 - Production on Mon Aug 31 13:32:07 2015

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

    Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
    Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/******** parallel=4 remap_schema=cpibusi:cpibusitst,picsbusi:picsbusitst directory=impdppump remap_tablespace=CPIDATATBS:cpibusitsttbs,PICSDATATBS:picsbusitsttbs dumpfile=ccicver_20150831_%u.DMP full=y cluster=no logfile=impdp_ccicver_20150831.log 
    Processing object type SCHEMA_EXPORT/USER
    ORA-31684: Object type USER:"PICSBUSITST" already exists  --由于是先创建了用户才执行的IMPDP导入,因此可以忽略
    ORA-31684: Object type USER:"CPIBUSITST" already exists
    Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
    Processing object type SCHEMA_EXPORT/ROLE_GRANT
    Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
    Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
    Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
    Processing object type SCHEMA_EXPORT/TABLE/TABLE
    Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
    . . imported "SC1NEW"."T_CPIMAIN_EXTEND"            604.1 MB  289303 rows
    . . imported "SC1NEW"."T_CPIPROFIT_DETAIL"          316.8 MB 2286932 rows
    ......(略)


    由于11g中加强了DATA PUMP在告警日志中的信息,此时继续跟踪alert日志可以发现,当增加了sreams pool的内存后,成功启动了DM进程,开始进行导入操作了:

    Mon Aug 31 13:31:13 2015
    ALTER SYSTEM SET streams_pool_size='100M' SCOPE=BOTH;
    Mon Aug 31 13:32:08 2015
    DM00 started with pid=37, OS id=50593928, job SYSTEM.SYS_IMPORT_FULL_01
    Mon Aug 31 13:32:09 2015
    DW00 started with pid=38, OS id=31654248, wid=1, job SYSTEM.SYS_IMPORT_FULL_01
    Mon Aug 31 13:32:18 2015
    DW01 started with pid=39, OS id=19071422, wid=2, job SYSTEM.SYS_IMPORT_FULL_01
    Mon Aug 31 13:32:18 2015
    DW02 started with pid=40, OS id=40501314, wid=3, job SYSTEM.SYS_IMPORT_FULL_01
    Mon Aug 31 13:32:18 2015
    DW03 started with pid=41, OS id=29163926, wid=4, job SYSTEM.SYS_IMPORT_FULL_01
    XDB installed.
    XDB initialized.
    Mon Aug 31 13:32:22 2015
    Thread 1 advanced to log sequence 10 (LGWR switch)
      Current log# 1 seq# 10 mem# 0: /oradata/siststdb/redo01.log
    Mon Aug 31 13:32:27 2015
    Archived Log entry 2 added for thread 1 sequence 9 ID 0xffffffff80ef0332 dest 1:
    Thread 1 cannot allocate new log, sequence 11
    Private strand flush not complete
      Current log# 1 seq# 10 mem# 0: /oradata/siststdb/redo01.log
    Thread 1 advanced to log sequence 11 (LGWR switch)
      Current log# 2 seq# 11 mem# 0: /oradata/siststdb/redo02.log
    Mon Aug 31 13:32:30 2015
    Archived Log entry 3 added for thread 1 sequence 10 ID 0xffffffff80ef0332 dest 1:
    Mon Aug 31 13:32:38 2015

    最后用了13分钟左右,完成了sc1new和sc2new这2个schema的导入,最后来看一下导入结果

    SQL> select owner,tablespace_name,round(sum(bytes/1024/1024/1024),2) "Size(Gb)" from dba_segments where owner in ('SC1NEW','SC2NEW ') group by owner,tablespace_name;

    OWNER                          TABLESPACE_NAME                  Size(Gb)
    ------------------------------ ------------------------------ ----------
    SC1NEW                         SC1NEWTBS                       15.39
    SC2NEW                         SC2NEWTBS                       1.09

    可以看到,16g的数据都已经导入了目标端的测试环境,任务顺利完成。

    思路:

    遇到 4031,首先增加共享池,然后再增加 streams pool 、large pool 等资源。

  • 相关阅读:
    动态规划
    关键路径
    拓扑排序
    最小生成树
    Floyd 多源最短路径
    SPFA算法
    Bellman_Ford算法(负环的单源路径)
    Dijkstra算法
    fill和memset的区别
    Codeforces Round #655 (Div. 2) 题解
  • 原文地址:https://www.cnblogs.com/chendian0/p/13445071.html
Copyright © 2020-2023  润新知