Πώς εξάγουμε μαζικά δεδομένα από βάση δεδομένων της Oracle με τη χρήση Oracle Data Pump (expdp)

Πώς εξάγουμε μαζικά δεδομένα από βάση δεδομένων της Oracle με τη χρήση Oracle Data Pump (expdp)
Πώς εξάγουμε μαζικά δεδομένα από βάση δεδομένων της Oracle με τη χρήση Oracle Data Pump (expdp)

Πολλές φορές θα χρειαστεί να κρατήσουμε τα δεδομένα πινάκων και των metadata (packages, procedures, function κ.τ.λ.) τους ώστε να τις εισάγουμε έπειτα στο ίδιο ή και σε διαφορετικό σύστημα. Η εξαγωγή των δεδομένων γίνεται εφικτή με τη χρήση του εργαλείου Oracle Data Pump Export (expdp) ενώ η εισαγωγή με τη χρήση του Oracle Data Pump Import (impdp).

Η εξαγωγή αυτής της πληροφορίας μπορούμε να πούμε ότι αποτελεί ένα “logical backup” των δεδομένων αυτών αλλά σε καμία περίπτωση δεν θεωρείται ότι αντικαθιστά backup της βάσης.

Πώς λειτουργεί το Oracle Data Pump Export (expdp)

Καλώντας το Data Pump Export (expdp) δημιουργείται και ξεκινάει να εκτελείται ένα job που η δουλειά του είναι να εξάγει τα δεδομένα των πινάκων και τα metadata τους σε φυσικά αρχεία που βρίσκονται στον server που ονομάζονται dump files.

Μπορούμε να καθαρίσουμε το τι θα εξαχθεί και με ποιον τρόπο με τη χρήση παραμέτρων. Αυτές οι παράμετροι μπορούνε να είναι δηλωμένες είτε στη γραμμή εντολών είτε σε ένα ξεχωριστό αρχείο με παραμέτρους.

Η προεργασία

Για αρχή θα χρειαστούμε έναν χρήστη που να έχει τον ρόλο DATAPUMP_EXP_FULL_DATABASE ή και DATAPUMP_IMP_FULL_DATABASE αν με τον ίδιο χρήστη εισάγουμε δεδομένα. Εναλλακτικά μπορούμε να χρησιμοποιήσουμε χρήστη που έχει οριστεί SYSDBA αν και δεν προτείνεται.

grant DATAPUMP_EXP_FULL_DATABASE to stratos;

Θα χρειαστούμε και ένα logical directory το οποίο θα δείχνει σε physical directory πάνω στον server. Σε αυτό το directory θα εξαγόνται τα dump files των export ή import που έχουμε ορίσει στις παραμέτρους να το χρησιμοποιούν.

create directory fakelos as '/home/oracle/Documents';

Για να δούμε τα directory που υπάρχουν:

select owner,directory_name,directory_path from all_directories;
Πώς εξάγουμε μαζικά δεδομένα από βάση δεδομένων της Oracle με τη χρήση Oracle Data Pump (expdp)

Για να δούμε τα tablespaces που υπάρχουν και τους πίνακες που περιέχουν:

select tablespace_name,status,max_size from dba_tablespaces;

select owner,segment_name,tablespace_name,bytes from dba_segments where tablespace_name = 'USERS' and segment_type = 'TABLE';
Πώς εξάγουμε μαζικά δεδομένα από βάση δεδομένων της Oracle με τη χρήση Oracle Data Pump (expdp)

Το παράδειγμα

Το πιο απλό παράδειγμα που μπορούμε να δοκιμάσουμε είναι να εξάγουμε έναν μικρό πίνακα. Οι μόνες παράμετροι που χρειάζονται είναι το logical directory που φτιάξαμε προηγουμένως, το όνομα του dumpfile και το όνομα του πίνακα (έχουμε ορίσει metrics και logfile να εξαχθούν επίσης στο ίδιο directory).

[opc@dp-gr ~]$ expdp stratos/stratos directory=FAKELOS dumpfile=pinakas2_dept.DMP logfile=export.log metrics=y TABLES = SCOTT.DEPT

Εναλλακτικά αν θα θέλαμε να χρησιμοποιήσουμε parameter file. Θα φτιάχναμε ένα αρχείο με όνομα π.χ. params.par που θα περιείχε όλες τις παραμέτρους την μια κάτω από την άλλη και θα το ορίζαμε με τη παράμετρο στο expdp parfile.

directory=FAKELOS
dumpfile=pinakas2_dept.DMP
logfile=export.log
metrics=y 
TABLES = SCOTT.DEPT
[opc@dp-gr ~]$ expdp stratos/stratos parfile=/home/oracle/Documents/params.par
[opc@dp-gr ~]$ expdp stratos/stratos directory=FAKELOS dumpfile=pinakas_dept.DMP logfile=export.log metrics=y TABLES = SCOTT.DEPT

...
Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real 
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
     Completed 1 TABLE objects in 10 seconds
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
     Completed 1 INDEX objects in 3 seconds
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
     Completed 1 CONSTRAINT objects in 4 seconds
Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
     Completed 1 INDEX_STATISTICS objects in 0 seconds
Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
     Completed 1 TABLE_STATISTICS objects in 2 seconds
Processing object type TABLE_EXPORT/TABLE/STATISTICS/MARKER
     Completed 1 MARKER objects in 25 seconds
. . exported "SCOTT"."DEPT"                              6.023 KB       4 rows in 0 seconds
     Completed 1 TABLE_EXPORT/TABLE/TABLE_DATA objects in 0 seconds
Master table "STRATOS"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for STRATOS.SYS_EXPORT_TABLE_01 is:
  /home/oracle/Documents/pinakas_dept.DMP
Job "STRATOS"."SYS_EXPORT_TABLE_01" successfully completed 

Για να δούμε τις εργασίες Data Pump που είναι σε εξέλιξη:

select * from dba_datapump_jobs 
Πώς εξάγουμε μαζικά δεδομένα από βάση δεδομένων της Oracle με τη χρήση Oracle Data Pump (expdp)

Έχουμε και τη δυνατότητα έχοντας το όνομα του job (με τη χρήση του προηγούμενου query) να το κάνουμε attach σε ένα άλλο παράθυρο και να βλέπουμε πολλές χρήσιμες πληροφορίες όπως το ποσοστό ολοκλήρωσης και τα bytes που έχουν γραφτεί.

[opc@dp-gr ~]$ expdp stratos/stratos attach=SYS_EXPORT_TABLE_01

Εναλλακτικά αν χρησιμοποιούμε τον λογαριασμό sysdba.

[oracle@dp-gr opc]$ expdp "'/as sysdba'" attach=SYS_EXPORT_TABLE_01

Export> status

Job: SYS_EXPORT_TABLE_01
  Operation: EXPORT
  Mode: TABLE
  State: COMPLETING
  Bytes Processed: 6,169
  Percent Done: 100
  Current Parallelism: 1
  Job Error Count: 0
  Dump File: /home/oracle/Documents/pinakas_dept.DMP
    bytes written: 49,152

Worker 1 Status:
  Instance ID: 1
  Instance name: ORCL
  Host name: dp-gr
  Process Name: DW00
  State: WORK WAITING

Η πληροφορία αυτή ανανεώνεται γράφοντας την εντολή status.

Αν για κάποιο λόγο σταματήσει το job π.χ. δεν υπάρχει αρκετός χώρος θα εμφανιστεί μήνυμα και στο παρακάτω dynamic view. Αν το διορθώσουμε σε ένα εύλογο διάστημα θα συνεχιστεί αυτόματα.

select name,status,timeout,error_number,error_msg from DBA_RESUMABLE;

Το αποτέλεσμα

Αφου ολοκληρώθηκε η εργασία θα δούμε ότι στο physical directory έχει δημιουργηθεί το dump file και το log file.

Πώς εξάγουμε μαζικά δεδομένα από βάση δεδομένων της Oracle με τη χρήση Oracle Data Pump (expdp)

Χρήσιμες παράμετροι

Ας δούμε και μερικές χρήσιμες παραμέτρους που μπορούμε να έχουμε ορίσει στο Data Pump Export ώστε να έχουμε καλύτερο έλεγχο στα δεδομένα που θα εξάγουμε.

FULL

Με αυτή τη παράμετρο μπορούμε να εξάγουμε ολόκληρη τη βάση.

FULL=y 
TABLESPACES

Με αυτή τη παράμετρο μπορούμε να εξάγουμε επιλεγμένα tablespaces.

TABLESPACES=USERS
TABLES

Με αυτή τη παράμετρο μπορούμε να εξάγουμε επιλεγμένους πίνακες.

TABLES=SCOTT.DEPT,SCOTT.SALGRADE
DUMPFILE

Με αυτή τη παράμετρο μπορούμε να δώσουμε ένα όνομα στο dumpfile που θα παράγει το Data Pump Export. Μπορούμε όμως με τους χαρακτήρες “%u” να φτιαχτούν πολλά αρχεία με αύξων αρίθμηση (έως 99).

dumpfile=export_pinaka%u.DMP 
FILESIZE

Με αυτή την παράμετρο ορίζουμε το μέγιστο μέγεθους του κάθε dump file. Μπορούμε π.χ. να το ορίσουμε στο 1 GB.

filesize=1024m 
SCHEMAS

Με αυτή την παράμετρο μπορούμε να εξάγουμε ολόκληρο συγκεκριμένο χρήστη.

schemas=SCOTT 
EXCLUDE

Με αυτή τη παράμετρο μπορούμε να εξαιρέσουμε συγκεκριμένα objects όπως schema, πίνακες κ.τ.λ.

EXCLUDE=SCHEMA:"=SYS"
INCLUDE

Αντίστοιχα με αυτή τη παράμετρο μπορούμε να προσθέσουμε συγκεκριμένα objects όπως schema, πίνακες κ.τ.λ.

INCLUDE=SCHEMA:"=SCOTT"

INCLUDE=TABLE:"IN (select table_name from dba_tables where table_name like 'DEP%')"
QUERY

Με τη παράμετρο αυτή μπορούμε να γράψουμε query ώστε να εξάγουμε συγκεκριμένα δεδομένα μόνο από έναν πίνακα.

query=SCOTT.SALGRADE:"where HISAL > '2000'"
CONTENT

Αυτή τη παράμετρο την χρησιμοποιούμε όταν θέλουμε να εξάγουμε μόνο τα δεδομένα ή μόνο metadata.

content=data_only 

content=metadata_only 
PARALLEL

Με τη παράμετρο αυτή ορίζουμε τα ταυτόχρονα παράλληλα κανάλια που θα εκτελέσουν την εργασία. Συνήθως ορίζουμε τον αριθμό CPU cores διά δύο.

Parallel=8
FLASHBACK_TIME

Ανάλογα με το undo_retention και το μέγεθος του undo tablespace με χρήση της τεχνολογίας flashback query μπορούμε να κάνουμε export δεδομένα με παρελθοντικό χρόνο.

FLASHBACK_TIME="TO_TIMESTAMP('20-09-2020 10:00:00', 'DD-MM-YYYY HH24:MI:SS')"
LOGFILES

Στη παράμετρο αυτή ορίζουμε το όνομα του logfile που θα περιέχει πληροφορίες για την διεργασία.

CLUSTER

Με τη παράμετρο αυτή ορίζουμε αν το Data Pump θα χρησιμοποιήσει άλλους κόμβους στο Oracle Real Application Clusters (Oracle RAC) δημιουργώντας workers και σε αυτούς.

METRICS

Με αυτή την παράμετρο μας εμφανίζονται επιπλέον πληροφορίες στο log file.

metrics=y
VERSION

Με αυτή την παράμετρο μπορούμε να εξάγουμε δεδομένα που μπορεί να βρίσκονται σε παλαιότερη version π.χ. 11.2 ώστε να τα εισάγουμε σε νεότερη π.χ. 19.3. Αν δεν τα έχουμε εξάγει με αυτή την παράμετρο κάτα την διαδικασία του import θα μας εμφανίσει σφάλμα.

version=11.2

Στο άρθρο αναλύσαμε τη διαδικασία του Oracle Data Pump Export (expdp). Σε επόμενο άρθρο θα δούμε πως εισάγουμε το dump file αυτό με τη διαδικασία Data Pump Import (impdp). .

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση