Data Pump job fails with error – ORA-31634: job already exists


Today when I want to export schema with data pump, I encountered with an error ORA-31634: job already exists. I queried dba_datapump_jobs table and saw that it has 99 jobs with the NOT RUNNING state.

SELECT owner_name,
job_name,
operation,
job_mode,
state
FROM dba_datapump_jobs;

When we are not using job name for data pump job, Oracle generates default name to the job and in Oracle data pump can generate up to 99 unique jobs. When job name already exists or you are running many expdp jobs at the same time ( more than 99 jobs), then data pump cannot generate a unique name and you get this error. Another reason why this problem occurs is when jobs are aborted, or when KEEP_MASTER=y used for the data pump the records stay there.

There are two solutions to this problem:

The first solution is dropping this orphaned tables, use result of the query below to drop tables

SELECT 'DROP table ' || owner_name || '.' || job_name || ';'
FROM DBA_DATAPUMP_JOBS
WHERE STATE = 'NOT RUNNING';
DROP TABLE DP_USER.SYS_EXPORT_SCHEMA_01 PURGE;
…
...
DROP TABLE DP_USER.SYS_EXPORT_SCHEMA_99 PURGE; 

2) The second solution is to use unique job name in data pump jobs like below:

expdp dp_user/password directory=DP_DIR dumpfile=backup.dmp logfile=logfile.log job_name=your_unique_job_name schemas=schema_name

Now you can run data pump jobs without any problem

DataPump-la avtomatik backup alınması


İlk oncə DataPump eksportları üçün məntiqi direktoriya yaratmalı və onu fiziki direktoriyaya bağlamalıyıq

1)Fiziki DPDIR qovluğu yaradırıq:

cd /home/oracle/
mkdir DPDIR

2)Məntiqi direktoriyanı yaradırıq və fiziki direktoriyaya bağlayırıq:

CREATE OR REPLACE DIRECTORY dpdir AS '/home/oracle/DPDIR'

3)Əgər userimizin lazımi hüquqları yoxdursa ona aşağıdakı hüquqları veririk:

GRANT READ, WRITE ON DIRECTORY DPDIR TO SYSTEM;
GRANT FULL_EXP_DATABASE TO SYSTEM;
GRANT FULL_IMP_DATABASE TO SYSTEM;

4)Daha sonra direktoriyamızın olduğunu yoxlayırıq

SQL> select * from all_directories;

OWNER                      DIRECTORY_NAME                DIRECTORY_PATH
------------------------------ ------------------------------ ------------------
SYS                      ORACLE_OCM_CONFIG_DIR           /u01/app/oracle/pr
SYS                      DATA_PUMP_DIR                   /u01/app/oracle/ad
SYS                      DPDIR                           /home/oracle/DPDIR
SYS                      XMLDIR                          /ade/b/2125410156/

5) Daha sonra daily_backup.sh adlı bir script yaradırıq.

[oracle@valehnote scripts]$ vi daily_expdp.sh

TARIX=$(date +%Y_%m_%d_%H%M%S)                          #il,ay,gün,saat,dəqiqə,saniyədən ibarət TARİX dəyişəni yaradırıq
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
cd $ORACLE_HOME/bin
./expdp system/db11g@DB11G directory=DPDIR schemas=SYSTEM,TEST dumpfile=DB_$TARIX.DMP logfile=DB_$TARIX.LOG  #DataPump vasitəsilə SYSTEM və TEST sxemalarının backup-nı alırıq
cd /home/oracle/DPDIR
tar -cvf DB_$TARIX.tar DB_$TARIX.*       # eksport olunmuş .log və .dmp fayllarını bir .tar faylında birləşdirik
gzip -9 DB_$TARIX.tar                    # dzip vasutəsilə .tar faylı yenidən arxivləyirik
rm DB_$TARIX.DMP                         # fayllar arxiv olunduqdan sonra onları silirik
rm DB_$TARIX.LOG

6) Aşağıdakı komandanı yazıb biz scriptin işləmə vaxtını təyin edirik .
İlk olaraq dəqiqə (41), sonra isə saat(23) daxil edilir. Yəni hər gün saat 23:41-də işləyəcək.

crontab -e
41 23 * * * sh /home/oracle/scripts/daily_expdp.sh > /home/oracle/DPDIR/expdp.log

Yuxarıdakı nümunədə biz DataPump vasitəsilə sxemalar üzrə eksport etdik bundan əlavə, biz bazanı tam və ya cədvəllərə görədə eksport edə bilərik.

Oracle Data Pump Cədvəllərə görə eksport və import aşağıdakı kimi yerinə yetirilir
============================
expdp scott/tiger tables=EMP,DEPT directory=dpdir dumpfile=EMP_DEPT.dmp logfile=EMP_DEPT.log
impdp scott/tiger tables=EMP,DEPT directory=dpdir dumpfile=EMP_DEPT.dmp logfile=EMP_DEPT.log

Oracle Data Pump vasitəsilə bazanın tam eksport və import olunması aşağıdakı kimi yerinə yetirilir
===============================
expdp system/password full=Y directory=dpdir dumpfile=fullexp.dmp logfile=fullexp.log
impdp system/password full=Y directory=dpdir dumpfile=fullexp.dmp logfile=fullexp.log

Automatic backup with DataPump


İlk oncə DataPump eksportları üçün məntiqi direktoriya yaratmalı və onu fiziki direktoriyaya bağlamalıyıq

1)Fiziki DPDIR qovluğu yaradırıq:

[pcsh lang=”bash” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

cd /home/oracle/
mkdir DPDIR

[/pcsh]

2)Məntiqi direktoriyanı yaradırıq və fiziki direktoriyaya bağlayırıq:

[pcsh lang=”sql” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

CREATE OR REPLACE DIRECTORY dpdir AS '/home/oracle/DPDIR'

[/pcsh]

3)Əgər userimizin lazımi hüquqları yoxdursa ona aşağıdakı hüquqları veririk:

[pcsh lang=”sql” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

GRANT READ, WRITE ON DIRECTORY DPDIR TO SYSTEM;
GRANT FULL_EXP_DATABASE TO SYSTEM;
GRANT FULL_IMP_DATABASE TO SYSTEM;

[/pcsh]

4)Daha sonra direktoriyamızın olduğunu yoxlayırıq

[pcsh lang=”bash” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

SQL> select * from all_directories;

OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ ------------------
SYS ORACLE_OCM_CONFIG_DIR /u01/app/oracle/pr
SYS DATA_PUMP_DIR /u01/app/oracle/ad
SYS DPDIR /home/oracle/DPDIR
SYS XMLDIR /ade/b/2125410156/

[/pcsh]

5) Daha sonra daily_backup.sh adlı bir script yaradırıq.

[pcsh lang=”bash” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

[oracle@valehnote scripts]$ vi daily_expdp.sh

TARIX=$(date +%Y_%m_%d_%H%M%S) #il,ay,gün,saat,dəqiqə,saniyədən ibarət TARİX dəyişəni yaradırıq
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
cd $ORACLE_HOME/bin
./expdp system/db11g@DB11G directory=DPDIR schemas=SYSTEM,TEST dumpfile=DB_$TARIX.DMP logfile=DB_$TARIX.LOG #DataPump vasitəsilə SYSTEM və TEST sxemalarının backup-nı alırıq
cd /home/oracle/DPDIR
tar -cvf DB_$TARIX.tar DB_$TARIX.* # eksport olunmuş .log və .dmp fayllarını bir .tar faylında birləşdirik
gzip -9 DB_$TARIX.tar # dzip vasutəsilə .tar faylı yenidən arxivləyirik
rm DB_$TARIX.DMP # fayllar arxiv olunduqdan sonra onları silirik
rm DB_$TARIX.LOG

[/pcsh]

6) Aşağıdakı komandanı yazıb biz scriptin işləmə vaxtını təyin edirik .
İlk olaraq dəqiqə (41), sonra isə saat(23) daxil edilir. Yəni hər gün saat 23:41-də işləyəcək.

[pcsh lang=”bash” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

crontab -e
41 23 * * * sh /home/oracle/scripts/daily_expdp.sh > /home/oracle/DPDIR/expdp.log

[/pcsh]

Yuxarıdakı nümunədə biz DataPump vasitəsilə sxemalar üzrə eksport etdik bundan əlavə, biz bazanı tam və ya cədvəllərə görədə eksport edə bilərik.

Oracle Data Pump Cədvəllərə görə eksport və import aşağıdakı kimi yerinə yetirilir
============================
expdp scott/tiger tables=EMP,DEPT directory=dpdir dumpfile=EMP_DEPT.dmp logfile=EMP_DEPT.log
impdp scott/tiger tables=EMP,DEPT directory=dpdir dumpfile=EMP_DEPT.dmp logfile=EMP_DEPT.log

Oracle Data Pump vasitəsilə bazanın tam eksport və import olunması aşağıdakı kimi yerinə yetirilir
===============================
expdp system/password full=Y directory=dpdir dumpfile=fullexp.dmp logfile=fullexp.log
impdp system/password full=Y directory=dpdir dumpfile=fullexp.dmp logfile=fullexp.logİlk oncə DataPump eksportları üçün məntiqi direktoriya yaratmalı və onu fiziki direktoriyaya bağlamalıyıq

1)Fiziki DPDIR qovluğu yaradırıq:

[pcsh lang=”bash” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

cd /home/oracle/
mkdir DPDIR

[/pcsh]

2)Məntiqi direktoriyanı yaradırıq və fiziki direktoriyaya bağlayırıq:

[pcsh lang=”sql” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

CREATE OR REPLACE DIRECTORY dpdir AS '/home/oracle/DPDIR'ss

[/pcsh]

3)Əgər userimizin lazımi hüquqları yoxdursa ona aşağıdakı hüquqları veririk:

[pcsh lang=”sql” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

GRANT READ, WRITE ON DIRECTORY DPDIR TO SYSTEM;
GRANT FULL_EXP_DATABASE TO SYSTEM;
GRANT FULL_IMP_DATABASE TO SYSTEM;

[/pcsh]

4)Daha sonra direktoriyamızın olduğunu yoxlayırıq

[pcsh lang=”bash” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

SQL> select * from all_directories;

OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ ------------------
SYS ORACLE_OCM_CONFIG_DIR /u01/app/oracle/pr
SYS DATA_PUMP_DIR /u01/app/oracle/ad
SYS DPDIR /home/oracle/DPDIR
SYS XMLDIR /ade/b/2125410156/

[/pcsh]

5) Daha sonra daily_backup.sh adlı bir script yaradırıq.

[pcsh lang=”bash” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

[oracle@valehnote scripts]$ vi daily_expdp.sh

TARIX=$(date +%Y_%m_%d_%H%M%S) #il,ay,gün,saat,dəqiqə,saniyədən ibarət TARİX dəyişəni yaradırıq
export ORACLE_HOME=/u01/app/oracle/product/11.2/db_1
cd $ORACLE_HOME/bin
./expdp system/db11g@DB11G directory=DPDIR schemas=SYSTEM,TEST dumpfile=DB_$TARIX.DMP logfile=DB_$TARIX.LOG #DataPump vasitəsilə SYSTEM və TEST sxemalarının backup-nı alırıq
cd /home/oracle/DPDIR
tar -cvf DB_$TARIX.tar DB_$TARIX.* # eksport olunmuş .log və .dmp fayllarını bir .tar faylında birləşdirik
gzip -9 DB_$TARIX.tar # dzip vasutəsilə .tar faylı yenidən arxivləyirik
rm DB_$TARIX.DMP # fayllar arxiv olunduqdan sonra onları silirik
rm DB_$TARIX.LOG

[/pcsh]

6) Aşağıdakı komandanı yazıb biz scriptin işləmə vaxtını təyin edirik .
İlk olaraq dəqiqə (41), sonra isə saat(23) daxil edilir. Yəni hər gün saat 23:41-də işləyəcək.

[pcsh lang=”bash” tab_size=”4″ message=”” hl_lines=”” provider=”manual”]

crontab -e
41 23 * * * sh /home/oracle/scripts/daily_expdp.sh > /home/oracle/DPDIR/expdp.log

[/pcsh]

Yuxarıdakı nümunədə biz DataPump vasitəsilə sxemalar üzrə eksport etdik bundan əlavə, biz bazanı tam və ya cədvəllərə görədə eksport edə bilərik.

Oracle Data Pump Cədvəllərə görə eksport və import aşağıdakı kimi yerinə yetirilir
============================
expdp scott/tiger tables=EMP,DEPT directory=dpdir dumpfile=EMP_DEPT.dmp logfile=EMP_DEPT.log
impdp scott/tiger tables=EMP,DEPT directory=dpdir dumpfile=EMP_DEPT.dmp logfile=EMP_DEPT.log

Oracle Data Pump vasitəsilə bazanın tam eksport və import olunması aşağıdakı kimi yerinə yetirilir
===============================
expdp system/password full=Y directory=dpdir dumpfile=fullexp.dmp logfile=fullexp.log
impdp system/password full=Y directory=dpdir dumpfile=fullexp.dmp logfile=fullexp.log