Sepetiniz

Data Pump işlemi sırasında çalıştırılan sql deyiminin tespiti

Yavaş ilerleyen ya da asılı kalan Data Pump işlemlerinde , o an hangi sorgunun çalıştığının tespiti , sorunun anlaşılmasında yardımcı olacaktır. Aşağıdaki script , Data Pump işleminin her 10 dakikada bir, geçerli bekleme olayıyla birlikte yürütülen sql deyimini gösterecektir.

Öncelikle aşağıdaki kodu içeren dp_current_sql.sql isimli bir script oluşturun.

spool current_sql.out

oradebug setospid &spid

select to_char (sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual;

oradebug current_sql
break by 1;

select w.event, w.wait_time,w.seconds_in_wait, w.p1,w.p2,w.p3
from v$session s, v$process p, v$session_wait w
where s.paddr=p.addr and s.module='Data Pump Worker' and s.sid=w.sid;

exec DBMS_LOCK.SLEEP(600);

select to_char (sysdate, 'YYYY-MM-DD HH24:MI:SS') from dual;

oradebug current_sql
break by 1;

select w.event, w.wait_time,w.seconds_in_wait, w.p1,w.p2,w.p3
from v$session s, v$process p, v$session_wait w
where s.paddr=p.addr and s.module='Data Pump Worker' and s.sid=w.sid;

exec DBMS_LOCK.SLEEP(600);

select to_char (sysdate,'YYYY-MM-DD HH24:MI:SS') from dual;

oradebug current_sql
break by 1;

select w.event, w.wait_time,w.seconds_in_wait, w.p1,w.p2,w.p3
from v$session s, v$process p, v$session_wait w
where s.paddr=p.addr and s.module='Data Pump Worker' and s.sid=w.sid;

spool off;

sqlplus ile SYSDBA olacak şekilde bağlanın. Aşağıdaki sorgu ile Data Pump Worker (DW00) prosesinin SPID bilgisini tespit edin.

set lines 150 pages 100 numwidth 7
col program for a38
col username for a10
col spid for a7
select to_char (sysdate,'YYYY-MM-DD HH24:MI:SS') "DATE", s.program, s.sid, 
s.status, s.username, d.job_name, p.spid, s.serial#, p.pid 
from v$session s, v$process p, dba_datapump_sessions d 
where p.addr=s.paddr and s.saddr=d.saddr;

 

sqlplus üzerinden yukarıda oluşturduğunuz dp_current_sql.sql script’ini çalıştırın. spid değerini istediğinde yukarıdaki adımda tespit edilen SPID değerini girin.

 

SQL> @dp_current_sql.sql
Enter value for spid:

 

Script’i çalıştıdığınızda aşağıdakine benzer çıktı üretecektir. Çıktıyı bulunduğunuz dizindeki current_sql.out dosyasında da bulabilirsiniz.

 

SQL> @dp_current_sql.sql
Enter value for spid: 70112
Oracle pid: 129, Unix process pid: 70112, image: oracle@oradb.oracle.local (DW00)

TO_CHAR(SYSDATE,'YY
-------------------
2018-10-13 17:29:42


insert /*+ OPT_PARAM('_parallel_syspls_obey_force' 'false') */ 
into sys.dbms_stats_id_map_tab (c5, c1, c2, cn)
select /*+ leading(s) index(s) */ 
distinct s.c5, s.c1, s.c2, i.partition_name cn
from "SYS"."IMPDP_STATS" s, dba_ind_partitions i
where s.c5 = :1 and s.c1 = :2
and s.type in ('I','i') and s.n13 is not null 
and s.c2 like 'SYS_%' and s.c3 is null
and s.c5 = i.index_owner and s.c1 = i.index_name 
and s.n13 = i.partition_position
and s.c2 != i.partition_name and s.statid is null

EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
db file sequential read -1
2 1 151735 1

wait for unread message on broadcast channel 0
2 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
3 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
3 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
2 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
2 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
2 9981956688 1.0534E+10 0


16 rows selected.


PL/SQL procedure successfully completed.


TO_CHAR(SYSDATE,'YY
-------------------
2018-10-13 17:39:43

merge /*+ OPT_PARAM('_parallel_syspls_obey_force' 'false') */ into optstat_user_prefs$ d using (select o.obj#, s.c2 pname, s.n1 valnum, s.cl1 valchar, s.d1 chgtime, s.n2 spare1 from "SYS"."IMPDP_STATS" s, obj$ o, user$ u where s.c5= :ownname and s.c1= :tabname and s.type = 'P' and SYS_OP_MAP_NONNULL(s.statid) = SYS_OP_MAP_NONNULL(:stid) and o.owner#=u.user# and u.name= :ownname and o.type# = 2 and o.name= :tabname ) s on (d.obj#=s.obj# and d.pname=s.pname) when matched then update set valchar=s.valchar when NOT matched then insert (obj#, pname, valnum, valchar, chgtime, spare1) values(s.obj#, s.pname, s.valnum, s.valchar, s.chgtime, s.spare1)

EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
db file sequential read -1
5 1 163263 1

wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
2 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
2 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
3 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
3 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
3 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0


16 rows selected.


PL/SQL procedure successfully completed.


TO_CHAR(SYSDATE,'YY
-------------------
2018-10-13 17:49:43


insert /*+ OPT_PARAM('_parallel_syspls_obey_force' 'false') */
into sys.dbms_stats_id_map_tab (c5, c1, c2, cn)
select /*+ leading(s) index(s) */ 
distinct s.c5, s.c1, s.c2, d.partition_name cn
from "SYS"."IMPDP_STATS" s, 
(select u.name table_owner, op.name table_name, 
op.subname partition_name, 
tp.part# partition_position
from user$ u, obj$ op, 
(select obj#, part# from tabpartv$
where bo# = :1
union all
select obj#, part# from tabcompartv$
where bo# = :2
) tp
where u.user# = op.owner# and op.type# = 19 and op.obj# = tp.obj#
) d
where s.c5 = :3 and s.c1 = :4
and s.type in ('T','C','E',

EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
db file sequential read -1
497 1 137287 1

wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
2 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
2 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
4 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
3 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
3 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
3 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0

wait for unread message on broadcast channel 0
5 9981956688 1.0534E+10 0


EVENT WAIT_TIME
---------------------------------------------------------------- ----------
SECONDS_IN_WAIT P1 P2 P3
--------------- ---------- ---------- ----------
wait for unread message on broadcast channel 0
1 9981956688 1.0534E+10 0


16 rows selected.

SQL>

 

Data Pump ile yedeklerin sıkıştırılması

Oracle 11g versiyonundan itibaren Data Pump “compression” parametresi ile yedeklerin dump dosyasına yazılmadan önce sıkıştırılmasına olanak sağlamaktadır. 

Compression parametresi 4 değer almaktadır.  Bunlar :

  • ALL : Veri ve metadata bilgisinin sıkıştırılması sağlanıyor.
  • DATA_ONLY : Sadece verinin sıkıştırılması sağlanıyor.
  • METADATA_ONLY : Sadece metada bilgisinin sıkıştırılması sağlanıyor.
  • NONE : Herhangi bir sıkıştırma yapılmıyor. Varsayılan değerdir.

Data Pump ile compression özelliğinin kullanımı için veritabanı compatible parametresinin en az 11.0.0 olması gerekmektedir. METADATA_ONLY için 10.2 olarak da kullanılabilir. ALL ya da DATA_ONLY şeklinde kullanımı için veritabanınız Enterprise Edition olması gerekmektedir.  Oracle Advanced Compression özelliği Standard Edition One (SE2) ile kullanılamaz.

Kullanımı aşağıdaki gibidir.

expdp test/test compression=all directory=export dumpfile=test.dmp

 

“ALL” şeklinde sıkıştırma 10 katına kadar yedek dosyada küçülmeye sebep olmaktadır. Ama export süresi ciddi anlamda artacaktır. Sıkıştırılmış bir yedekten import yapıldığında da yedek dosyaları önce açılacağından import süresi de ciddi olarak artacaktır.

Ayrıca compression opsiyonu kullanımı için Advanced Compression Option lisansına ihtiyaç vardır. Herhangi bir yedek sıkıştırılarak alındığında aşağıdaki sorgudan tespit edilen COMPRESSCNT sayısı artmaktadır. Bu şekilde bu özelliği kullanıp kullanmadığınızın tespiti yapılabilir.

 

SQL> select utlname, COMPRESSCNT from ku_utluse where utlname = 'Oracle Utility Datapump (Export)';

UTLNAME                                            COMPRESSCNT
-------------------------------------------------- ----------
Oracle Utility Datapump (Export)                   597

 

 

12c veritabanlarından expdp ile yedek alınırken oluşan ORA-39126 ORA-04063 hatası

12c veritabanlarında expdp ile yedek alınırken , işlem “ORA-39126: Worker unexpected fatal error in KUPW$WORKER.FETCH_XML_OBJECTS [ORA-04063: view “SYS.KU$_RADM_FPTM_VIEW” has errors” şeklinde hata ile kesilebilmektedir. Sorun SYS.KU$_RADM_FPTM_VIEW isimli görüntünün invalid durumda olmasından kaynaklanmaktadır. Bu görüntünün yeniden derlenmesinde ise hata düzelmemektedir.

Görüntüdeki hata “ORA-00932: inconsistent datatypes: expected NCHAR got NCHAR” şeklinde ise , sorunun çözümü için aşağıdaki adımları uygulayabilirsiniz.

Export işlemindeki hata aşağıdaki gibidir.

ORA-39126: Worker unexpected fatal error in KUPW$WORKER.FETCH_XML_OBJECTS [ORA-04063: view "SYS.KU$_RADM_FPTM_VIEW" has errors

ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.KUPW$WORKER", line 12098
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA", line 9039
ORA-06512: at "SYS.DBMS_METADATA", line 2792
ORA-06512: at "SYS.DBMS_METADATA", line 3423
ORA-06512: at "SYS.DBMS_METADATA", line 4760
ORA-06512: at "SYS.DBMS_METADATA", line 5079
ORA-06512: at "SYS.DBMS_METADATA", line 9020
ORA-06512: at "SYS.KUPW$WORKER", line 14367

İlgili görüntüdeki hata ise aşağıdaki gibidir.

SQL> show errors view SYS.KU$_RADM_FPTM_VIEW;
Errors for VIEW SYS.KU$_RADM_FPTM_VIEW:

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0	 ORA-00932: inconsistent datatypes: expected NCHAR got NCHAR

SYS.KU$_RADM_FPTM_VIEW görüntüsü yeniden derlense bile görüntüdeki hata düzelmeyecektir.

[oracle@orcldb ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu May 24 11:17:32 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> alter view SYS.KU$_RADM_FPTM_VIEW compile;

Warning: View altered with compilation errors.

Sorunun temel sebebi radm_fptm$ tablosu oluştuğundaki karakter setinin ku$_radm_fptm$_t isimli tipin oluştuğundaki karakter seti ile uyumsuz olmasıdır.

ku$_radm_fptm$_t isimli tip aşağıdaki gibi derlendiğinde , SYS.KU$_RADM_FPTM_VIEW isimli görüntü sorunsuz şekilde derlenebilecek ve sonrasında export işlemi sorunsuz tamamlanacaktır.

[oracle@orcldb ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu May 24 11:17:32 2018

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> alter type ku$_radm_fptm_t compile reuse settings;

Type altered.

SQL> alter view SYS.KU$_RADM_FPTM_VIEW compile;

View altered.

SQL> show errors view SYS.KU$_RADM_FPTM_VIEW;
No errors.

 

ORA-39142: incompatible version number 5.1 hatası

12c r2 veritabanlarından Data Pump ile alınan bir yedeğin daha düşük , versiyondaki bir veritabanına import edilmeye çalışıldığında “ORA-39142: incompatible version number 5.1” şeklinde hata alınmaktadır.

Hata içeriği aşağıdaki gibidir.

ORA-39001: invalid argument value
ORA-39000: bad dump file specification
ORA-39142: incompatible version number 5.1 in dump file "/u01/export/ORCL.DMP"

Bu hatanın alınmaması için export alınırken expdp komutuna , import edilecek veritabanı versiyonu , VERSION parametresi ile  belirtilmelidir.

Aşağıda import edilecek veritabanlarının versiyonlarına göre , hangi version değerinin kullanılması gerektiği belirtilmiştir.

  • 10.1.0.x için VERSION=10.1
  • 10.2.0.x için VERSION=10.2
  • 11.1.0.x için VERSION=11.1
  • 11.2.0.x için VERSION=11.2
  • 12.1.0.x için VERSION=12.1

Örnek :

expdp system/****** directory=DATA_PUMP_DIR dumpfile=ORCL%U.dmp logfile=orcl_exp.log full=Y cluster=N version=11.2

 

12c expdp/impdp işlemlerindeki ORA-39014 ORA-39029 ORA-31671 ve ORA-00600 hatasının çözümü

12c veritabanlarından expdp yada impdp işlemi sırasında  ORA-39014 ORA-39029 ORA-31671 ve ORA-00600 hataları alınabilmektedir. Mevcut işlemler sonlanmakta ve alert log dosyasında “DW00 terminating with fatal err=600” ile başlayan hatalar görülmektedir. Export ve import işlemindeki alınması muhtemel hatalar aşağıdaki gibidir.

ORA-39014: One or more workers have prematurely exited.
ORA-39029: worker 1 with process name "DW00" prematurely terminated
ORA-31671: Worker process DW00 had an unhandled exception.
ORA-00600: internal error code, arguments: [17183], [0x7FAD49A1E198], [], [], [], [], [], [], [], [], [], []

Sorunun çözümü için open_cursors parametresinin değerinin arttırılması ve “_optimizer_cost_based_transformation” parametresinin değerinin off yapılması gerekmektedir. 

SQL> alter system set open_cursors=1024 scope=both sid='*';

System altered.

SQL> alter system set "_optimizer_cost_based_transformation"=off scope=both sid='*';

System altered.

Parametre değişimi sonrasında işlemler sorunsuz tamamlanacaktır.