دیتابیس اوراکل

دیتابیس اوراکل
طبقه بندی موضوعی

۴ مطلب با موضوع «Multitenant» ثبت شده است

PDB Replication in Data Guard

برای کنترل کردن اینکه یک pdb در دیتابیس استندبای سینک شود یا نه، 2 روش وجود دارد:

1- استفاده از عبارت STANDBYS در دستور CREATE PLUGGABLE DATABASE که از ورژن 12.1.0.2 اضافه شده است.

CREATE PLUGGABLE DATABASE PDBTEST

ADMIN USER pdbadmin IDENTIFIED BY Password1

STANDBYS=NONE ;

 

مقادیری که میتوان برای STANDBYS ست کرد به صورت زیر است:

  • STANDBYS=NONE: این pdb با هیچ کدام از استندبای ها سینک نشود.
  • STANDBYS=ALL: این pdb با همه استندبای های سینک شود.
  • STANDBYS=ALL EXCEPT ('cdb1_stby_1','cdb1_stby_2'): این pdb با همه استندبای ها سینک شود بجز استندبای هایی که DB_UNIQUE_NAME آنها cdb1_stby_1 و cdb1_stby_2 است.
  • STANDBYS=('cdb1_stby_1'): این pdb فقط با استندبای cdb1_stby_1 سینک شود.

 

2- استفاده از پارامتر ENABLED_PDBS_ON_STANDBY که از ورژن 12.2 اضافه شده است.

اگر میخواهید یک pdb توسط استندبای سینک نشود، باید قبل از ایجاد pdb ، این پارامتر را به صورت زیر در دیتابیس اصلی یا استندبای ست کنید، ولی این را مد نظر داشته باشید که این پارامتر فقط توسط استندبای استفاده میشود:

ALTER SYSTEM SET enabled_pdbs_on_standby="*", "-PDBTEST";

 

مقادیری که میتوان به پارامتر enabled_pdbs_on_standby پاس داد به صورت زیر است:

  • "*": همه pdbها با استندبای سینک شوند.
  • ""PDB1", "PDB2: فقط PDB1 و PDB2 با استندبای سینک شوند.
  • ""PDB*: فقط pdbهایی که با کلمه "PDB" شروع میشوند با استندبای سینک شوند.
  • ""*", "-PDB*: همه pdbها بجز pdbهایی که با کلمه "PDB" شروع میشوند با استندبای سینک شوند.
  • ""*", "-PDB1: همه pdbها بجز PDB1 با استندبای سینک شوند.

 

بعد از ست کردن این پارامتر به صورت بالا، pdb زیر را ایجاد میکنیم:

CREATE PLUGGABLE DATABASE PDBTEST

ADMIN USER pdbadmin IDENTIFIED BY Password1;

 

در دیتابیس primary:

SQL> SELECT name, open_mode, recovery_status

FROM v$pdbs

WHERE name='PDBTEST';

 

NAME           OPEN_MODE   RECOVERY_STATUS

---------------- ----------------- --------------------------

PDBTEST       READ WRITE   ENABLED

 

در دیتابیس standby:

SQL> SELECT name, open_mode, recovery_status

FROM v$pdbs

WHERE name='PDBTEST';

 

NAME           OPEN_MODE   RECOVERY_STATUS

---------------- ----------------- --------------------------

PDBTEST       READ WRITE   DISABLED

 

 

Document:

https://oracle-base.com/articles/12c/multitenant-controlling-pdb-replication-in-data-guard-environments-12c

 

Convert Non-CDB Database to PDB Database

 

Non-CDB Database Name

DB1

Non-CDB Database Version

19.12.0.0

Target CDB Database Name

CDB1

Target CDB Database Version

19.12.0.0

 

 

  1. In DB1:

SQL> SHUTDOWN IMMEDIATE;

SQL> STARTUP OPEN READ ONLY;

 

SQL> exec dbms_pdb.describe(pdb_descr_file => '/tmp/19cDB1.xml');

PL/SQL procedure successfully completed.

 

SQL> SHUTDOWN IMMEDIATE;

 

 

  1. In CDB1:

SQL> SET SERVEROUTPUT ON;

SQL> DECLARE

compatible CONSTANT VARCHAR2(3) := CASE DBMS_PDB.CHECK_PLUG_COMPATIBILITY(pdb_descr_file => '/tmp/19cDB1.xml')

WHEN TRUE THEN 'YES'

ELSE 'NO'

END;

BEGIN

DBMS_OUTPUT.PUT_LINE(compatible);

END;

/

 

PL/SQL procedure successfully completed.

 

SQL> col cause for a20

SQL> col message for a35 word_wrapped

SQL> select cause, type, message, status from PDB_PLUG_IN_VIOLATIONS where name ='DB1';

 

 

CAUSE

TYPE

MESSAGE

STATUS

Parameter

WARNING

CDB parameter processes mismatch: Previous 5000 Current 6000

PENDING

Parameter

WARNING

CDB parameter sessions mismatch: Previous 7600 Current 9040

PENDING

Parameter

WARNING

CDB parameter db_files mismatch: Previous 2000 Current 1000

PENDING

 

 

SQL> CREATE PLUGGABLE DATABASE pdb1 USING '/tmp/19cDB1.xml'

  COPY

  FILE_NAME_CONVERT = ('+DATA', '+DATA2');

 

OR

 

SQL> CREATE PLUGGABLE DATABASE pdb1 USING '/tmp/19cDB1.xml'

  NOCOPY tempfile reuse;

 

 

SQL> alter session set container=PDB1;

SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql

SQL> alter pluggable database PDB1 open;

SQL> show pdbs

 

CON_ID

CON_NAME                   

OPEN MODE

RESTRICTED

4

PDB1                               

READ WRITE

NO

 

 

 

Document:

https://oracle-base.com/articles/12c/multitenant-migrate-non-cdb-to-pdb-12cr1

https://dbaclass.com/article/convert-non-cdb-database-to-pdb-database-in-oracle-12c/

 

 

بازیابی یک PDB از RMAN backup

بعضی وقتها شرایطی پیش میاد که میخواهیم فقط یک یا چند PDB خاص را با استفاده از بکاپی که از آنها داریم بازیابی کنیم. مثلا PDB حذف شده است یا اینکه PDB1 وجود دارد و میخواهیم بکاپی از PDB1 را که مربوط به گذشته است ، با یک نام دیگر بازیابی و اطلاعاتی را از آن بدست آوریم.

 

 

 

 

1- در ابتدا باید یک auxiliary instance ایجاد کنیم. که این کار را میتوانیم روی همان سرور یا سرور دیگری انجام دهیم.

--Create password file for auxiliary instance

 

 

$ cd $ORACLE_HOME/dbs

 

 

$ orapwd file=orapwtest password=m#12345678 entries=5

 

 

 

 

 

--Create init file for auxiliary instance

 

 

$ vi inittest.ora

 

نکته 1) برای ایجاد کردن init file میتوانید از روی spfile دیتابیس source یک  pfile ایجاد کنید و بعد از ایجاد تغییرات لازم از آن به عنوان init file برای  auxiliary instance استفاده کنید.

 

 

 

 

 

 

 

2- در مرحله بعدی باید auxiliary instance را nomount کنید.

 

 

 

$ export ORACLE_SID=TEST 

 

 

$ echo $ORACLE_SID

 

 

$ sqlplus / as sysdba

 

 

SQL> startup nomount pfile=/u01/app/oracle/product/12.2.0/db_1/dbs/inittest.ora;

 

 

 

 

 

3- در این مرحله با استفاده از دستور RMAN duplicate میتوانیم PDB مورد نظر را بازیابی نماییم.

 

 

 

 

 

$ rman auxiliary sys/m#12345678

 

 

RMAN> duplicate database to 'TEST' pluggable database PDB1

 

 

2> UNTIL TIME "TO_DATE ('15-10-2018 04:40:00','dd-mm-yyyy hh24:mi:ss')"

 

 

3> backup location '/home/oracle/back/';

 

 

 

نکته 2) باید بکاپ تمام  archiveهایی که میخواهیم recover کنیم در مسیر بکاپ ها موجود باشد.

 

 

 

 

 

4-  بعد میتوانیم با استفاده از دستورات زیر PDB1 را از root container auxiliary instance جدا کنیم و به root container که میخواهیم متصل نماییم.

 

 

 

 

 

--auxiliary instance

 

 

SQL> alter pluggable database PDB1 close immediate;

 

 

SQL> alter pluggable database PDB1 unplug into '/home/oracle/pdb1.pdb';

 

 

 

 

 

--target database

 

 

SQL> create pluggable database PDB1 as clone using '/home/oracle/pdb1.pdb';

 

 

SQL> alter pluggable database PDB1 open;

 

 
 

 

 

Attachments

 

RMAN Log Output from the DUPLICATE Process

PDB Unplug and Plugin in Oracle Database 12c

در موارد مختلفی شاید نیاز داشته باشیم که یک PDB را از یک root container جدا و آن را به یک root container دیگر متصل کنیم.