Πώς εξάγουμε μαζικά δεδομένα από βάση δεδομένων της Oracle με τη χρήση Oracle Data Pump (expdp)
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε βάση δεδομένων της Oracle - 1 Νοέμβριος 2024
- Πώς ενεργοποιούμε το Unified Auditing σε Oracle Database - 7 Οκτώβριος 2024
Πολλές φορές θα χρειαστεί να κρατήσουμε τα δεδομένα πινάκων και των 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;
Για να δούμε τα 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';
Το παράδειγμα
Το πιο απλό παράδειγμα που μπορούμε να δοκιμάσουμε είναι να εξάγουμε έναν μικρό πίνακα. Οι μόνες παράμετροι που χρειάζονται είναι το 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
Έχουμε και τη δυνατότητα έχοντας το όνομα του 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.
Χρήσιμες παράμετροι
Ας δούμε και μερικές χρήσιμες παραμέτρους που μπορούμε να έχουμε ορίσει στο 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). .