Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

एडब्ल्यूएस में ec2 इंस्टेंस से आरडीएस में ऑरैकल डंप कैसे आयात करें

मैं मानता हूं कि आधिकारिक दस्तावेज काफी भ्रमित करने वाला है और जब डम्प फ़ाइल के Oracle आयात की बात आती है तो यह स्पष्ट नहीं होता है।

अमेज़ॅन की ओर से http://d0.awsstatic.com/whitepapers/strategies-for-migrating-oracle-database-to-aws.pdf और http://fr.slideshare.net/AmazonWebServices/dat308-28616289<पर एक प्रस्तुति भी। /ए>

मूल रूप से यह प्रक्रिया है:

  1. आपको Amazon RDS DB इंस्टेंस में फ़ाइलें स्थानांतरित करने की आवश्यकता है - Amazon पहले से परिभाषित DATA_PUMP_DIR प्रदान करता है इसलिए आपको अपनी डंप फ़ाइलों को अपने EC2 उदाहरण से Amazon RDS DATA_PUMP_DIR में स्थानांतरित करने के लिए एक स्क्रिप्ट की आवश्यकता होगी

निम्नलिखित स्क्रिप्ट आपके लिए काम करेगी

use DBI;
use warnings;
use strict;

# RDS instance info
my $RDS_PORT=1521;
my $RDS_HOST="<my rds instance>";
my $RDS_LOGIN="<myuser>/*******";
my $RDS_SID="<ORCL_LIKE>"; 

#The $ARGV[0] is a parameter you pass into the script
my $dirname = "DATA_PUMP_DIR";
my $fname = $ARGV[0];

my $data = "dummy";
my $chunk = 8192;

my $sql_open = "BEGIN perl_global.fh := utl_file.fopen(:dirname, :fname, 'wb', :chunk); END;";
my $sql_write = "BEGIN utl_file.put_raw(perl_global.fh, :data, true); END;";
my $sql_close = "BEGIN utl_file.fclose(perl_global.fh); END;";
my $sql_global = "create or replace package perl_global as fh utl_file.file_type; end;";

my $conn = DBI->connect('dbi:Oracle:host='.$RDS_HOST.';sid='.$RDS_SID.';port='.$RDS_PORT,$RDS_LOGIN, '') || die ( $DBI::errstr . "\n");

my $updated=$conn->do($sql_global);
my $stmt = $conn->prepare ($sql_open);
$stmt->bind_param_inout(":dirname", \$dirname, 12);
$stmt->bind_param_inout(":fname", \$fname, 12);
$stmt->bind_param_inout(":chunk", \$chunk, 4);
$stmt->execute() || die ( $DBI::errstr . "\n");

open (INF, $fname) || die "\nCan't open $fname for reading: $!\n";
binmode(INF);
$stmt = $conn->prepare ($sql_write);
my %attrib = ('ora_type','24');
my $val=1;
while ($val> 0) {
  $val = read (INF, $data, $chunk);
  $stmt->bind_param(":data", $data , \%attrib);
  $stmt->execute() || die ( $DBI::errstr . "\n") ; };
die "Problem copying: $!\n" if $!;
close INF || die "Can't close $fname: $!\n";
  $stmt = $conn->prepare ($sql_close);
$stmt->execute() || die ( $DBI::errstr . "\n") ;

सुनिश्चित करें कि आपकी सभी फ़ाइलें आयात की गई हैं

select * from table(RDSADMIN.RDS_FILE_UTIL.LISTDIR('DATA_PUMP_DIR')) order by FILENAME;
  1. डंप फ़ाइलों से अपने डेटा को अपने RDS इंस्टेंस में आयात करें

आप impdp चला सकते हैं या आप PL/SQL स्क्रिप्ट का उपयोग करके नौकरी सबमिट कर सकते हैं

declare
  h1    NUMBER;
begin

  h1 := dbms_datapump.open (operation => 'IMPORT', job_mode => 'FULL', job_name => 'IMPORT_DUMP', version => 'COMPATIBLE');
  dbms_datapump.add_file(handle => h1, filename => 'IMPORT.LOG', directory => 'DATA_PUMP_DIR', filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_LOG_FILE);

  -- optional 
  dbms_datapump.set_parallel(handle => h1, degree => 8);

  dbms_datapump.add_file(handle => h1, filename => 'IMPORT.LOG', directory => 'DATA_PUMP_DIR', filetype => 3);
  dbms_datapump.set_parameter(handle => h1, name => 'KEEP_MASTER', value => 0);

  dbms_datapump.add_file(handle => h1, filename => 'HOST_01.dmp', directory => 'DATA_PUMP_DIR', filetype => DBMS_DATAPUMP.KU$_FILE_TYPE_DUMP_FILE);
  <repeat the add_file for all your files>

  dbms_datapump.set_parameter(handle => h1, name => 'INCLUDE_METADATA', value => 1);
  dbms_datapump.set_parameter(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC');
  dbms_datapump.set_parameter(handle => h1, name => 'REUSE_DATAFILES', value => 0);
  dbms_datapump.set_parameter(handle => h1, name => 'SKIP_UNSUSABLE_INDEXES', value => 0);

  dbms_datapump.start_job(handle => h1, skip_current => 0, abort_step => 0);
  dbms_datapump.detach(handle => h1);
end;
/

आयात हो गया है और डेटा आपके आरडीएस डीबी में उपलब्ध है। आप DATA_PUMP_DIR . से अपनी फ़ाइलें साफ़ कर सकते हैं , निम्न स्क्रिप्ट काम करेगी

-- remove file from data pump dir
begin
utl_file.fremove ('DATA_PUMP_DIR','import.log');
utl_file.fremove ('DATA_PUMP_DIR','<name of file>.dmp');
end fremove;
/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:बल्क कलेक्ट प्रदर्शन

  2. ओरेकल में विदेशी कुंजी का उपयोग कैसे करें

  3. ऑरैकल 18 में json_table के माध्यम से पार्स जोंस

  4. ओरेकल से रिकॉर्ड का चयन

  5. एएसपीनेट एप्लिकेशन में कनेक्शन खोलने/बंद करने का अच्छा अभ्यास?