5

我正在尝试将模式导入到在 docker 容器中运行的 oracle 实例中(希望这不相关)。

我想提前为这篇长文道歉,但我想包括我已经检查过的所有内容。

导入快速加载表,构建索引,但是当它到达包时,进度就停止了。

日志输出以这些行停止

Processing object type SCHEMA_EXPORT/VIEW/COMMENT
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY

它似乎卡在进程 273“ALTER PACKAGE ...”中

set linesize 200
select s.username, s.sid, s.process, s.status, t.command_type, t.sql_text
  from v$session s
     , v$sqltext t
 where t.sql_id = s.sql_id
 order by t.sql_id, t.piece

USERNAME                              SID PROCESS                  STATUS   COMMAND_TYPE SQL_TEXT
------------------------------ ---------- ------------------------ -------- ------------ ----------------------------------------------------------------
SYS                                   192 266                      ACTIVE             47 BEGIN :1 := sys.kupc$que_int.get_status(:2, :3); END;
SYS                                   195 699                      ACTIVE              3 select s.username, s.sid, s.process, s.status, t.command_type, t
SYS                                   195 699                      ACTIVE              3 .sql_text   from v$session s      , v$sqltext t  where t.sql_id
SYS                                   195 699                      ACTIVE              3 = s.sql_id  order by t.sql_id, t.piece
SYS                                     7 273                      ACTIVE             98  ALTER PACKAGE "XXX"."XXX_AQ_PUT"   COMPILE BODY     PLSQL_OPTIM
SYS                                     7 273                      ACTIVE             98 IZE_LEVEL=  2    PLSQL_CODE_TYPE=  INTERPRETED    PLSQL_DEBUG=
SYS                                     7 273                      ACTIVE             98 FALSE    PLSCOPE_SETTINGS=  'IDENTIFIERS:NONE' REUSE SETTINGS TI
SYS                                     7 273                      ACTIVE             98 MESTAMP '2015-06-02 13:31:03'
SYS                                   196 271                      ACTIVE             47 BEGIN :1 := sys.kupc$que_int.receive(:2); END;

但“ps agxu”显示进程 273 使用大量 CPU

oracle     119  0.0  0.0 1782464 14724 ?       Ss   10:56   0:01 ora_pmon_xxxdb
oracle     121  0.0  0.0 1780172 11276 ?       Ss   10:56   0:02 ora_vktm_xxxdb
oracle     125  0.0  0.0 1780172 11216 ?       Ss   10:56   0:00 ora_gen0_xxxdb
oracle     127  0.0  0.0 1780172 11228 ?       Ss   10:56   0:00 ora_diag_xxxdb
oracle     129  0.0  0.0 1780172 19120 ?       Ss   10:56   0:00 ora_dbrm_xxxdb
oracle     131  0.0  0.0 1780172 11504 ?       Ss   10:56   0:00 ora_psp0_xxxdb
oracle     133  0.0  0.0 1780684 14884 ?       Ss   10:56   0:04 ora_dia0_xxxdb
oracle     135  0.0  0.3 1780172 109800 ?      Ss   10:56   0:00 ora_mman_xxxdb
oracle     137  0.0  1.3 1817344 439448 ?      Ss   10:56   0:02 ora_dbw0_xxxdb
oracle     139  0.0  0.0 1796924 20736 ?       Ss   10:56   0:01 ora_lgwr_xxxdb
oracle     141  0.0  0.0 1780684 29472 ?       Ss   10:56   0:02 ora_ckpt_xxxdb
oracle     143  0.0  0.3 1786832 108004 ?      Ss   10:56   0:01 ora_smon_xxxdb
oracle     145  0.0  0.0 1781708 20928 ?       Ss   10:56   0:00 ora_reco_xxxdb
oracle     147  0.0  0.1 1786180 62136 ?       Ss   10:56   0:01 ora_mmon_xxxdb
oracle     149  0.0  0.0 1780172 19240 ?       Ss   10:56   0:00 ora_mmnl_xxxdb
oracle     151  0.0  0.0 1803680 11540 ?       Ss   10:56   0:00 ora_d000_xxxdb
oracle     153  0.0  0.0 1781368 10352 ?       Ss   10:56   0:00 ora_s000_xxxdb
oracle     163  0.0  0.0 1780172 13140 ?       Ss   10:56   0:00 ora_qmnc_xxxdb
oracle     228  0.0  0.0   9508  1288 ?        S    10:56   0:00 /bin/bash /home/oracle/bin/import-dump
oracle     243  0.0  0.1 1784780 56672 ?       Ss   10:56   0:01 ora_cjq0_xxxdb
oracle     263  0.0  0.0 1783616 25872 ?       Ss   10:56   0:00 ora_q001_xxxdb
oracle     266  0.0  0.0  64128 12920 ?        S    10:57   0:00 impdp    as sysdba' directory=data dumpfile=xxx_exp.dmp schemas=xxx version=11.1
oracle     267  0.0  0.3 1796312 115144 ?      Ss   10:57   0:04 oraclexxxdb (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle     269  0.0  0.0 1780916 15944 ?       Ss   10:57   0:00 ora_q002_xxxdb
oracle     271  0.0  0.3 1828020 117032 ?      Ss   10:57   0:04 ora_dm00_xxxdb
oracle     273 98.1  3.9 1981864 1293136 ?     Rs   10:57 216:44 ora_dw00_xxxdb
oracle     275  0.0  0.0 1790988 20540 ?       Ss   10:57   0:01 ora_smco_xxxdb
oracle     277  0.0  0.0 1790920 28676 ?       Ss   10:57   0:01 ora_w000_xxxdb

有足够的可用磁盘空间,并且表空间可以扩展,从这个报告中可以看出

set linesize 150
set pagesize 50
col "Tablespace" for a25
col "Used MB" for 99,999
col "Free MB" for 99,999
col "Total MB" for 99,999
col "Max MB" for 99,999

select df.tablespace_name "Tablespace"
     , totalusedspace "Used MB"
     , (df.totalspace - tu.totalusedspace) "Free MB"
     , df.totalspace "Total MB"
     , round(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace)) "Pct. Free"
     , MaxSpace "Max MB"
  from (
        select tablespace_name
             , round(sum(bytes) / 1048576) TotalSpace
             , round(sum(
                  case
                      when maxbytes = 0 then bytes
                      else maxbytes
                  end
                  ) / 1024 / 1024) MaxSpace
          from dba_data_files
         group by tablespace_name
       ) df,
       (
        select round(sum(bytes)/(1024*1024)) totalusedspace
             , tablespace_name
          from dba_segments
          group by tablespace_name
       ) tu
 where df.tablespace_name = tu.tablespace_nam

Tablespace                Used MB Free MB Total MB  Pct. Free  Max MB
------------------------- ------- ------- -------- ---------- -------
SYSAUX                        455      25      480          5  32,768
UNDOTBS1                      127       3      130          2  32,768
XXX_T_256K                     50       2       52          4  32,768
XXX_T_8M                      858      43      901          5  32,768
XXX_T_256M                 11,664     642   12,306          5  65,536
USERS                           0       5        5        100  32,768
SYSTEM                        684       6      690          1  32,768
XXX_I_8M                      584      29      613          5  32,768
XXX_I_256K                      5       1        6         17  32,768
XXX_I_256M                 34,496   1,772   36,268          5  65,536

没有阻塞锁

set lines 200
set pages 50
col object1 for a30
col object2 for a30
select l.*, o1.owner || '.' || o1.object_name object1, o2.owner || '.' || o2.object_name object2
  from v$lock l
     , dba_objects o1
     , dba_objects o2
 where o1.object_id = l.id1
   and o2.object_id(+) = l.id2

ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK OBJECT1                        OBJECT2
---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ---------- ------------------------------ ------------------------------
00000000BFC51AC8 00000000BFC51B20          7 TO      12697          1          3          0      11738          0 SYS.IMPDP_STATS                .
00000000BFC50F50 00000000BFC50FA8          3 RS         25          1          2          0      12155          0 SYS.PROXY_ROLE_DATA$           .
00000000BFC519E0 00000000BFC51A38         66 TS          3          1          3          0      12155          0 SYS.I_OBJ#                     .
00000000BFC51910 00000000BFC51968        127 MR        201          0          4          0      12155          0 SYS.I_SQL$TEXT_HANDLE          .
00000000BFC510F0 00000000BFC51148          7 AE        100          0          4          0      12087          0 SYS.ORA$BASE                   .
00000000BFC51360 00000000BFC513B8        192 AE        100          0          4          0      12092          0 SYS.ORA$BASE                   .
00000000BFC51430 00000000BFC51488        190 AE        100          0          4          0      12154          0 SYS.ORA$BASE                   .
00000000BFC51B98 00000000BFC51BF0        196 AE        100          0          4          0      12090          0 SYS.ORA$BASE                   .
00000000BFC51C68 00000000BFC51CC0        195 AE        100          0          4          0        180          0 SYS.ORA$BASE                   .
00000000BFC527E0 00000000BFC52838        127 MR         11          0          4          0      12093          0 SYS.I_USER#                    .
00000000BFC50DB0 00000000BFC50E08          3 XR          4          0          1          0      12159          0 SYS.TAB$                       .
00000000BFC51840 00000000BFC51898        127 MR          4          0          4          0      12155          0 SYS.TAB$                       .
00000000BFC516A0 00000000BFC516F8        127 MR          2          0          4          0      12155          0 SYS.C_OBJ#                     .
00000000BFC528B0 00000000BFC52908        127 MR         12          0          4          0      12093          0 SYS.FET$                       .
00000000BFC52628 00000000BFC52680        127 MR         10          0          4          0      12093          0 SYS.C_USER#                    .
00000000BFC52558 00000000BFC525B0        127 MR          8          0          4          0      12093          0 SYS.C_FILE#_BLOCK#             .
00000000BFC52218 00000000BFC52270        127 MR          5          0          4          0      12093          0 SYS.CLU$                       .
00000000BFC522E8 00000000BFC52340        127 MR          6          0          4          0      12093          0 SYS.C_TS#                      .
00000000BFC52488 00000000BFC524E0        127 MR          7          0          4          0      12093          0 SYS.I_TS#                      .
00000000BFC523B8 00000000BFC52410        127 MR          9          0          4          0      12093          0 SYS.I_FILE#_BLOCK#             .
00000000BFC51770 00000000BFC517C8        127 MR          3          0          4          0      12155          0 SYS.I_OBJ#                     .

更新

不幸的是,我仍然看不出有什么问题。

从 gv$session 中选择没有给出任何行。

这是 gv$sql 的输出摘录。它是按 last_load_time 排序的,所以它应该显示发生了什么的时间线。ALTER PACKAGE 仍然标记为活动,但在三天内只使用了 182 微秒,据我所知,没有递归 SQL 语句,ALTER 可能正在等待。

SQL> select elapsed_time/1000000 seconds, s.inst_id, s.sql_text, s.users_executing, s.cpu_time,
       s.first_load_time, s.last_load_time
  2    3  from gv$sql s
  4  where users_executing > 0
  5  union
 select elapsed_time/1000000 seconds, s.inst_id, s.sql_text, s.users_executing, s.cpu_time,
       s.first_load_time, s.last_load_time
  6    7    8  from gv$sql s
  9   where rownum < 50
 10  order by last_load_time
 11  /

   SECONDS    INST_ID SQL_TEXT                                           USERS_EXECUTING   CPU_TIME FIRST_LOAD_TIME     LAST_LOAD_TIME
---------- ---------- -------------------------------------------------- --------------- ---------- ------------------- -------------------
   .000293          1 LOCK TABLE  FOR INDEX "XXX"."PK_YYYYYYYYYYYYYYYYYY               0        572 2016-04-08/11:02:09 2016-04-08/11:02:09
                      " IN EXCLUSIVE MODE  NOWAIT

   .000358          1 LOCK TABLE  FOR INDEX "XXX"."IX_XXX_YYYYYYYYYYYYYY               0       2132 2016-04-08/11:02:38 2016-04-08/11:02:38
                      YYYYY" IN EXCLUSIVE MODE  NOWAIT

   .000349          1 LOCK TABLE  FOR INDEX "XXX"."IX_XXX_DATA_02" IN EX               0        574 2016-04-08/11:03:06 2016-04-08/11:03:06
                      CLUSIVE MODE  NOWAIT

   .000402          1 INSERT INTO "SYS". "IMPDP_STATS" (TYPE,VERSION,FLA               0        289 2016-04-08/11:03:17 2016-04-08/11:03:17
                      GS,C1,C2,C3,C5,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,
                      N12,D1,CL1) VALUES ('I',5,2,:B3 ,NULL,NULL,:B2 ,15
                      219,31,15219,1,1,2108,1,15219,NULL,NULL,NULL,NULL,
                      TO_DATE('2014-11-15 19:10:36',:B1 ),NULL)

   .000405          1 INSERT INTO "SYS". "IMPDP_STATS" (TYPE,VERSION,FLA               0          0 2016-04-08/11:03:17 2016-04-08/11:03:17
                      GS,C1,C2,C3,C5,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,
                      N12,D1,CL1) VALUES ('I',5,2,:B3 ,NULL,NULL,:B2 ,10
                      6867,670,713,1,6,4759,2,106867,NULL,NULL,NULL,NULL
                      ,TO_DATE('2016-03-19 19:19:38',:B1 ),NULL)

   .000419          1 INSERT INTO "SYS". "IMPDP_STATS" (TYPE,VERSION,FLA               0        743 2016-04-08/11:03:17 2016-04-08/11:03:17
                      GS,C1,C2,C3,C5,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,
                      N12,D1,CL1) VALUES ('I',5,2,:B3 ,NULL,NULL,:B2 ,13
                      7849,1763,11,160,686,7556,2,137849,NULL,NULL,NULL,
                      NULL,TO_DATE('2016-02-20 19:20:18',:B1 ),NULL)

   .000425          1 INSERT INTO "SYS". "IMPDP_STATS" (TYPE,VERSION,FLA               0          0 2016-04-08/11:03:17 2016-04-08/11:03:17
                      GS,C1,C2,C3,C5,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,
                      N12,D1,CL1) VALUES ('I',5,2,:B3 ,NULL,NULL,:B2 ,70
                      9979,2005,3,668,18908,56726,2,709979,NULL,NULL,NUL
                      L,NULL,TO_DATE('2016-03-26 19:19:30',:B1 ),NULL)

   .000451          1 INSERT INTO "SYS". "IMPDP_STATS" (TYPE,VERSION,FLA               0        280 2016-04-08/11:03:17 2016-04-08/11:03:17
                      GS,C1,C2,C3,C5,N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11,
                      N12,D1,CL1) VALUES ('I',5,2,:B3 ,NULL,NULL,:B2 ,0,
                      0,0,0,0,0,0,0,NULL,NULL,NULL,NULL,TO_DATE('2016-02
                      -20 19:20:18',:B1 ),NULL)

   .001567          1 delete from  viewtrcol$ where obj#=:1                            0       1405 2016-04-08/10:57:24 2016-04-08/11:03:18
   .000182          1  ALTER PACKAGE "XXX"."XXX_AQ_PUT"   COMPILE BODY                 1        372 2016-04-08/11:03:25 2016-04-08/11:03:25
                         PLSQL_OPTIMIZE_LEVEL=  2    PLSQL_CODE_TYPE=  I
                      NTERPRETED    PLSQL_DEBUG=  FALSE    PLSCOPE_SETTI
                      NGS=  'IDENTIFIERS:NONE' REUSE SETTINGS TIMESTAMP
                      '2015-06-02 13:31:03'

   .003691          1 insert into wrh$_filemetric_history     (snap_id,                0       2914 2016-04-08/11:06:36 2016-04-08/11:06:36
                      dbid, instance_number,      fileid, creationtime,
                           begin_time, end_time, intsize, group_id,
                       avgreadtime, avgwritetime, physicalread,      phy
                      sicalwrite, phyblkread, phyblkwrite)  select
                      :snap_id, :dbid, :instance_number,      fileid, cr
                      eationtime,      begtime, endtime, intsize_csec, g
                      roupid,      avrdtime, avwrtime, phyread,      phy
                      write, phybkrd, phybkwr  from x$kewmflmv

   .004734          1 INSERT INTO WRH$_METRIC_NAME(dbid, GROUP_ID, METRI               0       2384 2016-04-08/11:06:36 2016-04-08/11:06:36
                      C_ID, GROUP_NAME, METRIC_NAME, METRIC_UNIT) SELECT
                       DISTINCT :dbid, GROUP_ID, METRIC_ID, GROUP_NAME,
                      METRIC_NAME, METRIC_UNIT FROM V$METRICNAME

   .009059          1 SELECT COUNT(*) FROM (SELECT TOP_LEVEL_CALL#, TOP_               0       4325 2016-04-08/11:06:36 2016-04-08/11:06:36
                      LEVEL_CALL_NAME FROM V$TOPLEVELCALL MINUS SELECT T
                      OP_LEVEL_CALL#, TOP_LEVEL_CALL_NAME FROM WRH$_TOPL
                      EVELCALL_NAME WHERE dbid = :dbid)

   .003014          1 delete from WRH$_ENQUEUE_STAT tab where (:beg_snap               0       2124 2016-04-08/11:26:19 2016-04-08/11:26:19
                       <= tab.snap_id and         tab.snap_id <= :end_sn
                      ap and         dbid = :dbid)    and not exists (se
                      lect 1 from WRM$_BASELINE b                    whe
                      re (tab.dbid = b.dbid) and
                        (tab.snap_id >= b.start_snap_id) and
                                    (tab.snap_id <= b.end_snap_id))

dba_resumables 也没什么可看的

  1* select * from dba_resumable

   USER_ID SESSION_ID INSTANCE_ID COORD_INSTANCE_ID COORD_SESSION_ID STATUS       TIMEOUT START_TIME           SUSPEND_TIME         RESUME_TIME          NAME                           SQL_TEXT                                           ERROR_NUMBER ERROR_PARAMETER1     ERROR_PARAMETER2     ERROR_PARAMETER3     ERROR_PARAMETER4     ERROR_PARAMETER5     ERROR_MSG
---------- ---------- ----------- ----------------- ---------------- --------- ---------- -------------------- -------------------- -------------------- ------------------------------ -------------------------------------------------- ------------ -------------------- -------------------- -------------------- -------------------- -------------------- --------------------------------------------------
         0        196           1                                    NORMAL          7200                                                                SYS.SYS_IMPORT_SCHEMA_01       BEGIN :1 := sys.kupc$que_int.receive(:2); END;                0
         0          7           1                                    NORMAL          7200                                                                SYS.SYS_IMPORT_SCHEMA_01.1      ALTER PACKAGE "XXX"."XXX_AQ_PUT"   COMPILE BODY              0
                                                                                                                                                                                           PLSQL_OPTIMIZE_LEVEL=  2    PLSQL_CODE_TYPE=  I
                                                                                                                                                                                        NTERPRETED    PLSQL_DEBUG=  FALSE    PLSCOPE_SETTI
                                                                                                                                                                                        NGS=  'IDENTIFIERS:NONE' REUSE SETTINGS TIMESTAMP
                                                                                                                                                                                        '2015-06-02 13:31:03'

我觉得卡住了:-(

4

2 回答 2

2

答案很可能在于您对 v$sql .. 的查询的输出,特别是 INSERT INTO "SYS"。“IMPDP_STATS”

您会注意到绑定变量的使用很少……此代码一次从源数据库传输一个对象的统计信息,对大多数值进行硬编码……即使这是由 Oracle 自己的开发人员编写的代码。

解决方案是在 expdp 期间不导出统计信息 - 例如 EXCLUDE=STATISTICS 在 expdp parfile 中。

您可以在导入完成后重新收集统计信息 - 这具有确保最新统计信息的优势。或者,您可以在 expdp 和 impp 之前将统计信息导出到表

于 2020-10-26T14:02:37.687 回答
2

查找阻塞锁的最简单方法是查看会话。通常最好寻找在阻止,而不是什么在阻止。

select *
from gv$session
where blocking_session is not null

ALTER可能正在等待递归 SQL 语句。这些声明并不总是算作“阻塞”。运行此语句以查看正在运行的其他 SQL。如果幸运的话,将会有一个运行时间几乎与 ; 一样长的语句ALTER。这将是下一个要调查的查询:

select elapsed_time/1000000 seconds, gv$sql.*
from gv$sql
where users_executing > 0
order by users_executing desc;

对于调查空间问题,通常最好查看DBA_RESUMABLE而不是特定的空间大小。Oracle 有很多方法可以耗尽空间。表空间可能看起来不错,但 ASM 或操作系统可能空间不足。

select * from dba_resumable;

根据更新,导入的数据似乎包含高级队列对象。高级队列有额外的进出口限制。AQ 的一切都是“特别的”。希望您的组织有专门研究 AQ 的人员。如果您需要为此问题创建支持请求,我不会感到惊讶。

于 2016-04-08T15:04:02.863 回答