Working with Oracle Data Pump

ওরাকল ডাটাবেজের এর ডাটা এবং মেটাডাটা দ্রুত এক ডাটাবেজ থেকে অন্য ডাটাবেজে স্থানান্তর করার জন্য Oracle Data Pump ব্যাবহার করা হয়। ওরাকল ডাটাপাম্প ইউটিলিটি তৈরি হয়েছে মূলত তিনটি কম্পোনেন্ট এর উপর ভিত্তি করে, এক কামান্ড লাইন ক্লাইন্ট (expdp and impdp), দুই DBMS_DATAPUMP প্যাকেজ এবং তিন DBMS_METADATA প্যাকেজ। কামান্ড লাইন ক্লাইন্ট expdp হলো database export utility এবং impdp হলো database import utility. এই দুইটি কামান্ড লাইন ক্লাইন্ট DBMS_DATAPUMP এবং DBMS_METADATA প্যাকেজকে ব্যাবহার করে ডাটা ও মেটাডাটা এক্সপোর্ট ও ইম্পোর্ট করে থাকে।

ওরাকল ডাটা পাম্প ব্যাবহার করার আগে আমাদের একটা ডিরেক্টরির প্রয়োজন হবে। যেখানে আমাদের ডাম্প ফাইল ও লগ ফাইল জমা থাকবে। মজার বিষয় হলো ডাটাবেজ ইন্সটল করার সময় ওরাকল DATA_PUMP_DIR নামে একটা ডিরেক্টরি তৈরি করেই রাখে। আপনি চাইলে সেটাই ব্যাবহার করতে পারেন অথবা নিম্নের মতো করে তৈরি করে নেন।

CREATE DIRECTORY dummy_dir AS '/u02/data/';

ডিরেক্টরি রেডি এখন আমরা ডাটা এক্সপোর্ট করবো। চারটা লেভেলে ডাটা এক্সপোর্ট করা যায়। যথা- ডাটাবেজ লেভেল, স্কিমা লেভেল, টেবিল লেভেল এবং রো লেভেল। চলুন একটা একটা করে সবগুলো লেভেল উদাহরণ সহ দেখি –

১. ডাটাবেজ লেভেলঃ এই লেভেলে সম্পুর্ন ডাটাবেজ এক্সপোর্ট করা হয়। যেমন –

expdp directory=dummy_dir dumpfile=full_db.dmp logfile=full_db.log

কমান্ড প্রম্পট/টারমিনালে উপরের কোডটা রান করলে একটা ইউজার নেম এবং পাসওয়ার্ড চাইবে। এখন DBMS_DATAPUMP এক্সিকিউট করার পার্মিশন আছে এমন একটা ইউজার নেম এবং পাসওয়ার্ড দিবেন। অথবা sys এর পাসওয়ার্ড দিয়ে কন্টিনিউ করুন।

২. স্কিমা লেভেলঃ এই লেভেলে কোন একটা স্কিমা এক্সপোর্ট করা হয়। যেমন –

expdp directory=dummy_dir dumpfile=full_db.dmp logfile=full_db.log schemas='HR'

৩. টেবিল লেভেলঃ এই লেভেলে এক বা একাধিক টেবিল এক্সপোর্ট করা হয়। যেমন –

expdp directory=dummy_dir dumpfile=full_db.dmp logfile=full_db.log tables='HR.EMP','HR.JOBS'

৪. রো লেভেলঃ এই লেভেলে একটা টেবিলের প্রয়োজনীয়ও রো কে এক্সপোর্ট করা হয়। যেমন –

expdp directory=dummy_dir dumpfile=full_db.dmp logfile=full_db.log tables='HR.EMP' query=\"where deptno=10\"

প্যারামিটারঃ

Keyword Description Example
directory ডাম্পফাইল যে লোকেশনে সেভ হবে সেই ডিরেক্টরির নাম directory=dummy_dir
dumpfile ডাম্প ফাইলের নাম dumpfile=full_db.dmp
logfile লগ ফাইলের নাম logfile=full_db.log
schemas যে স্কিমা এক্সপোর্ট করব তার নাম schemas=hr
tables যে টেবিল এক্সপোর্ট করব তার নাম tables=’EMP’
versionটার্গেট ডাটাবেজের ভার্সন নং, অর্থাৎ আপার বা লোয়ার ভার্সনের জন্য ডাটা এক্সপোর্ট করতে হলে এখানে বলে দিতে হবে।VERSION=12
include নির্দিস্ট অবজেক্ট এক্সপোর্ট করতে include অপশনে বলে দিতে হয়। তাহলে ঐ অবজেক্ট ও তার ডিপেন্ডেড ডাটা এক্সপোর্ট হবে।include=TABLE:”IN (‘EMPLOYEES’, ‘DEPARTMENTS’)”
exclude কোন অবজেক্ট স্কিপ করতে চাইলে এখানে বলে দিতে হবে। exclude=index,constraint,statistics
সকল প্যারামিটার লিস্ট দেখুন এখানে

ডাটা ইম্পোর্টঃ ডাটা ইম্পোর্টের আগে অবশ্যয় চেক করে নিবেন আপনার ডাম্পফাইল ও লগ ফাইল সংশ্লিষ্ট ডিরেক্টরিতে আছে কিনা। ফুল ডাটাবেজ এর ডাম্প ফাইল থেকে আপনি চাইলে শুধু স্কিমা/টেবিল/রো ইম্পোর্ট করতে পারবেন, অনুরুপ ভাবে স্কিমা ডাম্প থেকে শুধু টেবিল/রো এবং টেবিল ডাম্প থেকে শুধু প্রয়োজনীয় রো ইম্পোর্ট করা যাবে। চলুন কিছু উদাহরণ দেখি –

To import full database -
impdp directory=dummy_dir dumpfile=full_db.dmp logfile=full_db.log full=y

To import schema -
impdp directory=dummy_dir dumpfile=hr.dmp logfile=hr.log schemas=hr

To import table only - 
impdp directory=dummy_dir dumpfile=hr.dmp logfile=hr.log schemas=hr tables='EMP'

প্যারামিটারঃ

KeywordDescriptionExample
directory ডাম্পফাইল যে লোকেশনে আছে সেই ডিরেক্টরির নামdirectory=dummy_dir
dumpfile ডাম্প ফাইলের নামdumpfile=full_db.dmp
logfile লগ ফাইলের নামlogfile=full_db.log
schemas যে স্কিমা ইম্পোর্ট করব তার নামschemas=hr
tables যে টেবিল ইম্পোর্ট করব তার নামtables=’EMP’
remap_tablespaceসোর্স ডাটাবেজ এর টেবিলস্পেস এবং টার্গেট ডাটাবেজ এর টেবিলস্পেস ভিন্ন হলে রিম্যাপ করে দিতে হবে। remap_tablespace=USERS:HR
remap_schemaসোর্স স্কিমা থেকে অন্য স্কিমায় ডাটা ইম্পোর্ট করতে হলে রিম্যাপ স্কিমাই বলে দিতে হবে। remap_schema=HR:SCOTT
remap_tableসোর্স টেবিল থেকে নিউ টেবিলে ডাটা ইম্পোর্ট করতে চাইলে বলে দিতে হবে এখানে। remap_table=HR.EMP:SCOTT.EMP
includeনির্দিস্ট অবজেক্ট ইম্পোর্ট করতে include অপশনে বলে দিতে হয়। তাহলে ঐ অবজেক্ট ও তার ডিপেন্ডেড ডাটা ইম্পোর্ট হবে। include=TABLE:”IN (‘EMPLOYEES’, ‘DEPARTMENTS’)”
excludeকোন অবজেক্ট স্কিপ করতে চাইলে এখানে বলে দিতে হবে।exclude=index,constraint,statistics
সকল প্যারামিটার লিস্ট দেখুন এখানে

আমরা যখন expdp অথবা impdp কমান্ড রান করি তখন ওরাকল ব্যাকগ্রাউন্ডে একটা জব ক্রিয়েট করে আর তা সাথে সাথে execute হয়। আমরা চাইলে dbms_datapump প্যাকেজ দিয়ে ম্যানুয়ালি জব ক্রিয়েট করতে পারি এবং পরে আমাদের সুবিধামত সময়ে রান করতে পারি। নিম্নে একটা উদাহরন দেওয়া হলো –

DECLARE
    h1 number;
    s varchar2(1000):=NULL;
    errorvarchar varchar2(100):= 'ERROR';
    tryGetStatus number := 0;
    success_with_info EXCEPTION;
    PRAGMA EXCEPTION_INIT(success_with_info, -31627);
BEGIN
    h1 := dbms_datapump.open (
		operation => 'EXPORT', 
		job_mode => 'SCHEMA', 
		job_name => 'EXP_SD_1-23_43_49', 
		version => 'COMPATIBLE'
	); 
	
    tryGetStatus := 1;
    
    dbms_datapump.add_file(
		handle => h1, 
		filename => 'EXPDAT-20_02_2021.LOG', 
		directory => 'DATA_PUMP_DIR', 
		filetype => 3);
	
    dbms_datapump.metadata_filter(
		handle => h1, 
		name => 'SCHEMA_EXPR', 
		value => 'IN(''HR'')');
	
    dbms_datapump.add_file(
		handle => h1, 
		filename => 'EXPDAT%U-20_02_2021.DMP', 
		directory => 'DATA_PUMP_DIR', 
		filesize => '500M',  
		filetype => 1); 
	
    dbms_datapump.set_parameter(
		handle => h1, 
		name => 'INCLUDE_METADATA', 
		value => 1); 
	
    dbms_datapump.start_job(
		handle => h1, 
		skip_current => 0, 
		abort_step => 0); 
	
    dbms_datapump.detach(handle => h1); 
	
    errorvarchar := 'NO_ERROR'; 
	
EXCEPTION
    WHEN OTHERS THEN
    BEGIN 
        IF ((errorvarchar = 'ERROR')AND(tryGetStatus=1)) THEN 
            DBMS_DATAPUMP.DETACH(h1);
        END IF;
    EXCEPTION 
    WHEN OTHERS THEN 
        NULL;
    END;
    RAISE;
END;

এখানে মূলত কমান্ড লাইনে যে প্যারামিটার গুলো ব্যাবহার করেছি সেগুলই PL/SQL ব্লকে ব্যাবহার করে ডাটা এক্সপোর্ট করা হয়েছে। বিস্তারিত জানার জন্য ওরাকল ডকুমেন্টেশন দেখুন।

Published by

Ali Asgor

Graduate in GES, OCP holder, Self-motivated app developer, Programming lover, Lazy person...

11 thoughts on “Working with Oracle Data Pump”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.