Skip to content

Remote clone a PDB online between DBCS with different tablespace block size on source PDB

Manoj Kumar Apr 17, 2025 10:37:10 AM
Remote clone a PDB online between DBCS with different tablespace block size on source PDB
5:20
Apex

 

Introduction:

In this blog post, I will show you how to create a remote clone of PDB from one DBCS to another DBCS using a DB link. The difference here is that both CDBs have the same default block size of 8K, but the source PDB has all the tablespaces 16k size.

Pre-Requisite:

You should have 2 DBCS environments in OCI and a source PDB with all tablespaces 16k size.

Steps:

Prepare Source CDB:

SQL> conn / as sysdba
Connected.
SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
4 FSDEV READ WRITE NO
SQL> show parameter db_block_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192

SQL> grant create session, sysoper to C##SYSOPER identified by <password> container=all;

Grant succeeded.

SQL> GRANT CREATE SESSION, CREATE PLUGGABLE DATABASE TO C##SYSOPER container=all;

Grant succeeded.

SQL> alter session set container = FSDEV;

Session altered.

SQL> select TABLESPACE_NAME,BLOCK_SIZE from dba_tablespaces;

TABLESPACE_NAME BLOCK_SIZE
------------------------------ ----------
SYSTEM 16384
SYSAUX 16384
TBS_UNDO_DATA 16384
TBS_DATA 16384
TBS_TEST_DATA 16384
TBS_TEST_INDEX 16384
TBS_TEST_IMAGE 16384
TESTINDEX 16384
TESTLARGE 16384

Prepare Target CDB:

Make sure local_undo_enabled is set to true on destination CDB.

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PSSTAGE_PDB1 READ WRITE NO
SQL> select property_name, property_value from database_properties where property_name='LOCAL_UNDO_ENABLED';

PROPERTY_NAME PROPE
---------------------------------------- -----
LOCAL_UNDO_ENABLED TRUE

SQL>

Add source PDB (fsdev) entry to target tnsnames.ora file.

and test tnsping

[oracle@test]$ tnsping fsdev

TNS Ping Utility for Linux: Version 19.0.0.0.0 - Production on 08-OCT-2024 10:52:40

Copyright (c) 1997, 2024, Oracle. All rights reserved.

Used parameter files:
/u01/app/oracle/product/19.0.0.0/dbhome_1/network/admin/sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.20.0.10)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = fsdev.example.com)))
OK (0 msec)

Now let’s create db link

SQL> create database link clone_pdb_dblink CONNECT TO C##SYSOPER identified by password using 'FSDEV';

Database link created.

Make sure global_names parameter is set to false

SQL> show parameter global_names

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean TRUE

SQL> alter system set global_names=false scope=both sid='*';

System altered.

SQL> show parameter global_names

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
global_names boolean FALSE
SQL>

Now test if DB link working or not
SQL> select * from dual@clone_pdb_dblink;

D
-
X

Now, when I tried to create a clone of sthe ource PDB, I got below error:

SQL> create pluggable database FSDEV from FSDEV@clone_pdb_dblink keystore identified by "password";
create pluggable database FSDEV from FSDEV@clone_pdb_dblink keystore identified by "password"
*
ERROR at line 1:
ORA-65176: system tablespace block size (16384) does not match configured block
sizes

Then I check the below parameter and set the value for it.

SQL> show parameter db_16k_cache_size;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_16k_cache_size big integer 0

SQL> alter system set db_16k_cache_size=128M scope=both;

System altered.

SQL> show parameter db_16k_cache_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_16k_cache_size big integer 128M

Now again I run the same command, This time it did not give that error message but command never complete it and hang and I have to kill it.

SQL> create pluggable database FSDEV from FSDEV@clone_pdb_dblink keystore identified by "password";

^C
^C
^X
Killed

After some search, I found I have to increase the db_16k_cache_size, it's hanging becasue I set this value low. So I tried to set the value 1G and tried again

SQL> alter system set db_16k_cache_size=1G scope=both;

System altered.

SQL> show parameter db_16k_cache_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_16k_cache_size big integer 1G
SQL>

Now my clone worked!

SQL> create pluggable database FSDEV from FSDEV@clone_pdb_dblink keystore identified by "password";

Pluggable database created.

SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PSSTAGE_PDB1 READ WRITE NO
4 FSDEV MOUNTED
SQL> alter pluggable database FSDEV open;

Pluggable database altered.

Leave a Comment