Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
oracle_multitenant_application_container [2021/11/13 17:43] – andonovj | oracle_multitenant_application_container [2021/11/14 20:45] (current) – [Create & Set the container MAP] andonovj | ||
---|---|---|---|
Line 493: | Line 493: | ||
SQL> create pluggable database appcdb as application container admin user pdbadmin identified by Pass123; | SQL> create pluggable database appcdb as application container admin user pdbadmin identified by Pass123; | ||
Pluggable database created. | Pluggable database created. | ||
- | SQL> alter pluggable database | + | SQL> alter pluggable database |
Pluggable database altered. | Pluggable database altered. | ||
Line 527: | Line 527: | ||
SQL> CREATE TABLE c## | SQL> CREATE TABLE c## | ||
country VARCHAR2(30) NOT NULL) | country VARCHAR2(30) NOT NULL) | ||
- | PARTITION BY LIST (region) ( | + | PARTITION BY LIST (country) ( |
PARTITION north VALUES (' | PARTITION north VALUES (' | ||
PARTITION central VALUES (' | PARTITION central VALUES (' | ||
Line 579: | Line 579: | ||
< | < | ||
- | SQL> alter session set container=appcdb; | + | SQL> alter session set container=north; |
Session altered. | Session altered. | ||
SQL> insert into c## | SQL> insert into c## | ||
SQL> insert into c## | SQL> insert into c## | ||
+ | SQL> commit; | ||
+ | SQL> alter session set container=central; | ||
+ | Session altered. | ||
+ | SQL> commit; | ||
SQL> insert into c## | SQL> insert into c## | ||
SQL> insert into c## | SQL> insert into c## | ||
+ | SQL> alter session set container=south; | ||
+ | Session altered. | ||
+ | SQL> commit; | ||
SQL> insert into c## | SQL> insert into c## | ||
SQL> insert into c## | SQL> insert into c## | ||
SQL> commit; | SQL> commit; | ||
- | SQL> ALTER PLUGGABLE DATABASE APPLICATION Application_JULIEN ALL SYNC; | ||
</ | </ | ||
+ | After that you can end the upgrade or installation and sync every application PDB | ||
Now, when you select from that table, the query will be redirect to all PDBs and thus the data will be sharded across the PDBs. If the PDBs are proxy PDBs, it can be even distributed in different continents. | Now, when you select from that table, the query will be redirect to all PDBs and thus the data will be sharded across the PDBs. If the PDBs are proxy PDBs, it can be even distributed in different continents. | ||
The logic is, if you connect to the ROOT, you can see the information across all PDBs, if you connect to a specific PDB, you can select the data only in that PDB and what is shared in the root, you CANNOT see data from other PDBs. | The logic is, if you connect to the ROOT, you can see the information across all PDBs, if you connect to a specific PDB, you can select the data only in that PDB and what is shared in the root, you CANNOT see data from other PDBs. | ||
+ | |||
+ | ===== Cloning ===== | ||
+ | In this part we will perform the following operations: | ||
+ | |||
+ | * Clone a remote non-application PDB into application Container | ||
+ | * Clone application container | ||
+ | |||
+ | |||
+ | ==== Cloning a remote non-app PDB to application root ==== | ||
+ | The procedure is the same as cloning a PDB, but after we create it, the PDB will be in restricted mode: | ||
+ | |||
+ | < | ||
+ | SQL> show pdbs; | ||
+ | |||
+ | CON_ID CON_NAME | ||
+ | ---------- ------------------------------ ---------- ---------- | ||
+ | 6 APDB2 READ WRITE YES | ||
+ | SQL> | ||
+ | SQL> | ||
+ | </ | ||
+ | |||
+ | That is because when we clone a nonapp PDB into application container we need to convert it: | ||
+ | |||
+ | < | ||
+ | NAME | ||
+ | ------------------------------ ------------------------------------------------------------ ---------------------------------------------------------------------------------------------------- | ||
+ | APDB2 Run pdb_to_apppdb.sql. | ||
+ | |||
+ | SQL> | ||
+ | </ | ||
+ | |||
+ | Then we need to run: | ||
+ | |||
+ | < | ||
+ | SQL> alter session set container=apdb2; | ||
+ | SQL> $@ORACLE_HOME/ | ||
+ | ........................ | ||
+ | SQL> | ||
+ | SQL> show pdbs; | ||
+ | |||
+ | CON_ID CON_NAME | ||
+ | ---------- ------------------------------ ---------- ---------- | ||
+ | 6 APDB2 READ WRITE YES | ||
+ | |||
+ | SQL> alter pluggable database apdb2 close; | ||
+ | |||
+ | Pluggable database altered. | ||
+ | |||
+ | SQL> alter pluggable database apdb2 open; | ||
+ | |||
+ | Pluggable database altered. | ||
+ | |||
+ | SQL> show pdbs; | ||
+ | |||
+ | CON_ID CON_NAME | ||
+ | ---------- ------------------------------ ---------- ---------- | ||
+ | 6 APDB2 READ WRITE NO | ||
+ | SQL> | ||
+ | |||
+ | </ | ||
+ | |||
+ | Also this procedure can be done with a local PDB. | ||
+ | |||
+ | ===== Conversions ===== | ||
+ | Last but not least, in this part we will: | ||
+ | |||
+ | * Convert normal PDB into application root container | ||
+ | * Convert regular PDB into application PDB | ||
+ | * Relocating a PDB |