এই ব্লগটি একটি প্লগেবল ডেটাবেস (PDB) কে সোর্স কন্টেইনার ডেটাবেস (CDB) থেকে ডিট্যাচ করে একটি টার্গেট CDB-এ আট্যাচ করার কথা আলোচনা করে। এই ব্লগের উদ্দেশ্যে, PDB হলো সেই ডেটাবেস যেখানে আমরা আমাদের সমস্ত অ্যাপ্লিকেশন-সম্পর্কিত ডেটাবেস সংরক্ষণ করি।
ভূমিকা
একটি CDB শূন্য বা অধিক PDB ডেটাবেস ধারণ করে যেগুলো বিভিন্ন অ্যাপ্লিকেশনের সাথে সম্পর্কিত এবং ঠিক একটি রুট কন্টেইনার থাকে যা Oracle®-সম্পর্কিত মেটাডেটা এবং কমন ইউজার সংরক্ষণ করে। রুট কন্টেইনারের নাম CDB$ROOT। রুট কন্টেইনারে একটি सीড PDB, PDB$SEEDও থাকে। এই সিড PDB হলো একটি সিস্টেম-সাপ্লাইড টেমপ্লেট যা CDB নতুন PDB তৈরি করতে ব্যবহার করতে পারে। একটি PDB সেই ডেটাবেস যেটি আমরা নন-কন্টেইনার এনভায়রনমেন্টে ব্যবহার করি। ১২c ভার্সনে, Oracle এই কন্টেইনার এবং PDB ফিচারটি চালু করেছিল, যা আপনাকে আপনার ব্যবসায়িক প্রয়োজন অনুযায়ী PDB যোগ করতে সক্ষম করে। উদাহরণস্বরূপ, আপনি একটি PDB ডেটাবেস তৈরি করতে পারেন যেটি সেলস ডিপার্টমেন্টের ডেটা ধারণ করবে একটি সেলস অ্যাপ্লিকেশনে এবং Human Resources (HR) ডিপার্টমেন্টের ডেটা একটি HR অ্যাপ্লিকেশনে।
একটি PDB আনপ্লাগ করা মানে একটি PDB ডেটাবেসকে সোর্স CDB থেকে ডিট্যাচ করে একটি টার্গেট CDB-এ আট্যাচ করা।
এই ব্লগে, সোর্স CDB, TEST12-এর দুটি PDB আছে, PDB1 এবং PDB2। টার্গেট CDB, DEV12, আনপ্লাগ করা PDBগুলো গ্রহণ করে।
আনপ্লাগ এবং প্লাগ PDB স্যাম্পল
এই সেকশনে, আপনি শিখবেন কীভাবে PDB1 এবং PDB2-কে সোর্স CDB TEST12 থেকে আনপ্লাগ করে টার্গেট CDB DEV12-এ প্লাগ করবেন।
পরিবর্তন করার আগে, সোর্স PDBগুলো MOUNTED অবস্থায় আছে নিচের ছবিতে দেখানো অনুযায়ী:
টার্গেট CDB-এর সাথে PDB কম্প্যাটিবিলিটি যাচাই করুন
প্লাগ অপারেশন শুরু করার আগে, নিশ্চিত করুন যে প্লাগ করা হচ্ছে PDB নতুন হোস্ট CDB-এর সাথে কম্প্যাটিবল। যদি তারা কম্প্যাটিবল না হয়, তবে নিচের PL/SQL ব্লক এক্সিকিউট করলে এরর দেখাবে:
. oraenv [প্রম্পটে dev12 এন্টার করুন] sqlplus / as sysdba set serveroutput on DECLARE compatible BOOLEAN := FALSE; BEGIN compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY( pdb_descr_file => '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml '); if compatible then DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? YES'); else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB1 compatible? NO'); end if; END; / set serveroutput on DECLARE compatible BOOLEAN := FALSE; BEGIN compatible := DBMS_PDB.CHECK_PLUG_COMPATIBILITY( pdb_descr_file => '/home/oracle/app/oradata/pdb2/pdb2.xml'); if compatible then DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? YES'); else DBMS_OUTPUT.PUT_LINE('Is pluggable PDB2 compatible? NO'); end if; END; / PDBগুলো বন্ধ করুন
PDBগুলো বন্ধ করুন যাতে সেগুলো আনপ্লাগ করা যায়, নিচের SQL*Plus® স্টেটমেন্টগুলো চালিয়ে:
. oraenv [প্রম্পটে test12 এন্টার করুন] sqlplus / as sysdba alter pluggable database pdb1 close immediate; alter pluggable database pdb2 close immediate; সোর্স PDBগুলো মাউন্ট স্টেট closed-এ থাকা উচিত।
PDBগুলো আনপ্লাগ করুন
PDB বন্ধ করার পর, একটি XML ম্যানিফেস্ট ফাইল জেনারেট করুন। এই XML ফাইলটি আনপ্লাগ করা PDB-এর টেবলস্পেসের নাম এবং ফুল পাথ, সেইসাথে ডেটা ফাইল সম্পর্কে তথ্য ধারণ করে।
বন্ধ PDB আনপ্লাগ করুন এবং তারপর XML ফাইলের পাথ এবং নাম স্পেসিফাই করুন নিচের কমান্ডগুলো চালিয়ে:
alter pluggable database pdb1 unplug into '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml'; alter pluggable database pdb2 unplug into '/home/oracle/app/oradata/pdb2/pdb2.xml'; বন্ধ PDB ড্রপ করুন এবং ডেটা ফাইলগুলো রাখুন নিচের কমান্ডগুলো চালিয়ে:
drop pluggable database pdb1 keep datafiles; drop pluggable database pdb2 keep datafiles; আনপ্লাগ করা PDB-এর স্ট্যাটাস যাচাই করুন নিচের কমান্ডগুলো চালিয়ে:
select pdb_name, status from cdb_pdbs where pdb_name in ('PDB1', 'PDB2'); [আপনি কোনো সারি দেখবেন না] exit PDBগুলো প্লাগ করুন
আপনি PDBকে টার্গেট CDB-এ প্লাগ করতে পারেন COPY মেথড, NOCOPY বা CLONE MOVE মেথড ব্যবহার করে।
COPY মেথড দিয়ে প্লাগ করুন
COPY মেথড ব্যবহার করে PDB প্লাগ করতে, নতুন ডেটা ফাইলগুলোর জন্য একটি ডেস্টিনেশন তৈরি ও ডিফাইন করুন, আনপ্লাগ করা PDBকে টার্গেট CDB-এ প্লাগ করুন, এবং তারপর আনপ্লাগ করা PDB-এর ডেটা ফাইলগুলো কপি করুন।
ডেস্টিনেশন ডিরেক্টরি তৈরি করুন নিচের কমান্ডগুলো চালিয়ে:
mkdir /home/oracle/app/oradata/DEV12/pdb1 sqlplus / as sysdba আনপ্লাগ করা PDB-এর ডেটা ফাইলগুলো ব্যবহার করে PDBকে CDB-এ প্লাগ করুন এবং ডেটা ফাইলগুলো নতুন লোকেশনে কপি করুন নিচের কমান্ডগুলো চালিয়ে:
create pluggable database pdb_plug_copy using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml ' COPY FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/pdb1'); প্লাগ করা PDB-এর স্ট্যাটাস এবং ওপেন মোড যাচাই করুন নিচের কমান্ডগুলো চালিয়ে:
select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_COPY'; select open_mode from v$pdbs where name='PDB_PLUG_COPY'; প্লাগ করা PDB-এর ডেটা ফাইলগুলো লিস্ট করুন। select name from v$datafile where con_id=3; exit এই অপারেশনগুলোর রেজাল্ট নিচের ছবিতে দেখানো হয়েছে:
NOCOPY মেথড দিয়ে প্লাগ করুন
এই মেথড আনপ্লাগ করা PDB-এর ডেটা ফাইলগুলো ব্যবহার করে PDBকে টার্গেট CDB-এ প্লাগ করে কোনো কপি তৈরি বা ব্যবহার ছাড়া।
NOCOPY মেথড ব্যবহার করে PDB প্লাগ করতে, নিচের কমান্ডগুলো চালান:
create pluggable database pdb_plug_nocopy using '/home/oracle/app/oradata/pdb2/pdb2.xml' NOCOPY TEMPFILE REUSE; এই অপারেশন কিছু সেকেন্ড সময় নেয়। আনপ্লাগ করা PDB-এর মূল ডেটা ফাইলগুলো এখন নতুন হোস্ট CDB-এ নতুন প্লাগ-ইন করা PDB-এর অন্তর্গত। XML ফাইলে স্পেসিফাই করা টেম্প ফাইলের মতো নামের একটি ফাইল টার্গেট লোকেশনে উপস্থিত। তাই TEMPFILE_REUSE ক্লজ প্রয়োজন।
প্লাগ করা PDB-এর স্ট্যাটাস এবং ওপেন মোড যাচাই করুন নিচের কমান্ডগুলো চালিয়ে:
select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_NOCOPY'; select open_mode from v$pdbs where name='PDB_PLUG_NOCOPY'; এই অপারেশনগুলোর রেজাল্ট নিচের ছবিতে দেখানো হয়েছে:
প্লাগ করা PDB-এর ডেটা ফাইলগুলো লিস্ট করুন নিচের কমান্ডগুলো চালিয়ে:
select name from v$datafile where con_id=3; select name from v$datafile where con_id=4; exit CLONE MOVE মেথড দিয়ে প্লাগ করুন
CLONE MOVE মেথড ব্যবহার করে PDB প্লাগ করতে, নতুন ডেটা ফাইলগুলোর জন্য একটি ডেস্টিনেশন তৈরি ও ডিফাইন করুন, আনপ্লাগ করা PDB-এর ডেটা ফাইলগুলো ব্যবহার করে PDBকে টার্গেট CDB-এ প্লাগ করুন, এবং তারপর ডেটা ফাইলগুলো অন্য লোকেশনে সরান।
ডেস্টিনেশন ডিরেক্টরি তৈরি করুন নিচের কমান্ডগুলো চালিয়ে:
mkdir /home/oracle/app/oradata/DEV12/clone sqlplus / as sysdba PDBকে CDB-এ প্লাগ করুন এবং ডেটা ফাইলগুলো নতুন লোকেশনে সরান নিচের কমান্ডগুলো চালিয়ে:
create pluggable database pdb_plug_move using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml ' MOVE FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/clone '); একটি এরর মেসেজ দেখাবে কারণ গ্লোবাল ইউনিক আইডেন্টিফায়ার (GUID) ইউনিক নয়। PDB1 ইতিমধ্যে COPY মেথড ব্যবহার করে প্লাগ করা হয়েছে, যা এই GUID কনফ্লিক্টের কারণ হয়েছে নিচের ছবিতে দেখানো অনুযায়ী:
এটি সমাধান করতে, AS CLONE ক্লজ দিয়ে নিচের কোড চালান:
create pluggable database pdb_plug_move AS CLONE using '/home/oracle/app/oradata/TEST12/pdb1/pdb1.xml ' MOVE FILE_NAME_CONVERT=('/home/oracle/app/oradata/TEST12/pdb1','/home/oracle/app/oradata/DEV12/clone'); প্লাগ করা PDB-এর স্ট্যাটাস এবং ওপেন মোড যাচাই করুন নিচের কমান্ডগুলো চালিয়ে:
select pdb_name, status from cdb_pdbs where pdb_name='PDB_PLUG_MOVE'; select open_mode from v$pdbs where name='PDB_PLUG_MOVE'; প্লাগ করা PDB-এর ডেটা ফাইলগুলো লিস্ট করুন নিচের কমান্ড চালিয়ে:
select name from v$datafile where con_id=5; এই অপারেশনগুলোর রেজাল্ট নিচের ছবিতে দেখানো হয়েছে:
প্লাগ করা PDBগুলো খুলুন
PDB খুলুন এবং প্লাগ অপারেশন ফাইনালাইজ করতে নিচের কমান্ডগুলো চালান:
alter pluggable database pdb_plug_nocopy open; alter pluggable database pdb_plug_copy open; alter pluggable database pdb_plug_move open; প্লাগ-ইন করা PDBগুলোর সাথে কানেক্ট করুন এবং কন্টেইনার নাম যাচাই করুন যেটির সাথে আপনি কানেক্টেড নিচের কমান্ডগুলো চালিয়ে:
connect sys/*****@localhost:1521/pdb_plug_nocopy AS SYSDBA show con_name connect sys/******@localhost:1521/pdb_plug_copy AS SYSDBA show con_name connect sys/******@localhost:1521/pdb_plug_move AS SYSDBA show con_name exit PDBগুলো সোর্স CDB-এ ফিরিয়ে আনুন
সকল প্লগেবল ডেটাবেস বন্ধ করুন নিচের কমান্ডগুলো চালিয়ে:
. oraenv [প্রম্পটে dev12 এন্টার করুন] sqlplus / as sysdba alter pluggable database all close immediate; pdb_plug_copy ডেটাবেস আনপ্লাগ করুন যাতে আপনি এটি ব্যবহার করে pdb1 ডেটাবেস পুনরায় তৈরি করতে পারেন নিচের কমান্ড চালিয়ে:
alter pluggable database pdb_plug_copy unplug into '/home/oracle/app/oradata /pdb_plug_copy.xml'; pdb_plug_copy ডেটাবেস ড্রপ করুন নিচের কমান্ড চালিয়ে:
drop pluggable database pdb_plug_copy; pdb_plug_nocopy ডেটাবেস আনপ্লাগ এবং ড্রপ করুন যাতে আপনি এটি ব্যবহার করে pdb2 ডেটাবেস পুনরায় তৈরি করতে পারেন নিচের কমান্ডগুলো চালিয়ে:
alter pluggable database pdb_plug_nocopy unplug into '/home/oracle/app/oradata /pdb_plug_nocopy.xml'; drop pluggable database pdb_plug_nocopy keep datafiles; pdb_plug_move ডেটাবেস ড্রপ করুন নিচের কমান্ড চালিয়ে:
drop pluggable database pdb_plug_move; pdb1 ডেটাবেস TEST12 CDB-এ ফিরিয়ে প্লাগ করুন নিচের কমান্ডগুলো চালিয়ে:
connect sys/*****@localhost:1521/test12 as sysdba create pluggable database pdb1 AS CLONE using '/u01/app/oracle/oradata/pdb_plug_copy.xml' MOVE FILE_NAME_CONVERT=(' /home/oracle/app/oradata/DEV12/pdb1',' /home/oracle/app/oradata/TEST12/pdb1'); pdb2 ডেটাবেস TEST12 CDB-এ ফিরিয়ে প্লাগ করুন নিচের কমান্ড চালিয়ে:
create pluggable database pdb2 using '/u01/app/oracle/oradata/pdb_plug_nocopy.xml' nocopy tempfile reuse; pdb1 এবং pdb2 খুলুন নিচের কমান্ডগুলো চালিয়ে:
alter pluggable database pdb2 open; alter pluggable database pdb1 open; exit উপসংহার
PDB আনপ্লাগ এবং প্লাগ করা সার্ভারগুলোর মধ্যে ফাইল ট্রান্সফার সহজ করে দেয় এবং মানব ত্রুটির সম্ভাবনা কমিয়ে দেয়। উদাহরণস্বরূপ, আপনি একটি শটে সব PDB ডেটাবেসের জন্য প্যাচ প্রয়োগ করতে পারেন, যেখানে নন-কন্টেইনার এনভায়রনমেন্টে আপনাকে আলাদা আলাদা সব ডেটাবেসে প্যাচ প্রয়োগ করতে হতো। ব্যাকআপ এবং অন্যান্য মেইনটেনেন্স টাস্ক কন্টেইনার এবং PDB এনভায়রনমেন্টে অনেক সহজ। সার্ভারগুলোর মধ্যে একটি ফাইল ট্রান্সপোর্ট করা সহজ কারণ আপনি ভুলে যাবেন না এক বা একাধিক ফাইল ট্রান্সফার করতে।
আশা করি এই ব্লগটি আপনাকে ভার্সন ১২c PDB এবং CDB-এর সুবিধাগুলো নন-কন্টেইনার ডেটাবেসের চেয়ে ভালোভাবে বুঝতে সাহায্য করবে।
ফিডব্যাক ট্যাব ব্যবহার করে যেকোনো মন্তব্য বা প্রশ্ন করুন।
আমাদের ডেটাবেস সার্ভিস সম্পর্কে আরও জানুন।