-
Notifications
You must be signed in to change notification settings - Fork 9
Création d'un PDB
Remarque : Pour pouvoir créer un PDB il faut avoir créé un CDB (une base avec container) instructions ici
Ils fonctionnent pour :
- une base single
- des bases single en dataguard
- un RAC (sans dataguard)
Attention à l'espace disque avant de créer un PDB, avec la 12c on peut très vite
créer de nouveaux PDB, mais par défaut la taille de la base est petite.
L'espace du DG DATA
peut donc rapidement être saturé.
-
Pour visualiser l'espace disponible :
oracle@srvfoo01:FOO1:~> asmcmd lsdg State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED NORMAL N 512 4096 1048576 18420 17689 6140 5774 0 Y CRS/ MOUNTED EXTERN N 512 4096 1048576 16368 5260 0 5260 0 N DATA/ MOUNTED EXTERN N 512 4096 1048576 16368 10483 0 10483 0 N FRA/
-
Pour ajouter des disques voir ici
S'il y a trop de PDBs, la création du PDB peut échouer.
Pour vérifier si la taille mémoire de la base peut être augmentée :
oracle@srvorion01:ORION:db> ./set_memory_target_to.sh
# OS free memory : 259.63Mb
# shm total : 1.20Gb
# shm available : 687.00Mb
# memory_max_target : 800.00Mb, maximum : 1.14Gb (1,166Mb)
Dans cette exemple memory_max_target
peut être augementé.
Pour l'augmenter au maximum, exécuter :
oracle@srvorion01:ORION:db> ./set_memory_target_to.sh -val=max -apply
# OS free memory : 296.34Mb
# shm total : 1.20Gb
# shm available : 687.00Mb
# memory_max_target : 800.00Mb, maximum : 1.14Gb (1,166Mb)
# set memory_max_target to 1.14Gb : increase of 366.60Mb
# =======================================================================================
14h41> sqlplus -s sys/Oracle12 as sysdba
SQL> create pfile='/tmp/p.txt' from spfile;
Fichier cree.
Ecoule : 00 :00 :00.00
SQL> alter system set memory_max_target=1223268762 scope=spfile sid='*';
Systeme modifie.
Ecoule : 00 :00 :00.00
14h41> ~/plescripts/db/bounce_db.sh
[output skipped]
La base est redémarrée.
Pour la création d'un PDB le script plescripts/db/create_pdb.sh
automatise toutes les tâches.
oracle@srvfoo01:FOO1:~> cd plescripts/db
oracle@srvfoo01:FOO1:db> ./create_pdb.sh -db=foo -pdb=pdb12
Note : Le Wallet
n'est pas utilisé avec la 12cR2 en standalone avec ASM car
les bases ne peuvent pas démarrer. Pour les RAC ou une standalone sur FS pas de
problèmes.
Pour chaque PDB sont créés :
-
2 ou 4 services :
-
pdb12_oci
: pour les connexions oci. -
pdb12_java
: pour les connexions java. -
pdb12_stby_oci
: pour les connexions oci sur une standby en lecture seule. -
pdb12_stby_java
: pour les connexions java sur une standby en lecture seule.
-
-
2 alias TNS en local sur le serveur :
-
pdb12_oci
: sers pour les connexions utilisateurs normales. -
syspdb12
: permet les connexionssys
simplifiées par l'utilisation duwallet
Oracle.
-
-
Le compte
sys
est enregistré dans lewallet
Oracle avec l'aliassyspdb12
Pour se connecter
sys
sur un PDB il suffit donc de taper :$ sqlplus /@syspdb12 as sysdba
Il est toujours possible d'utiliser :
sqlplus sys/Oracle12@pdb02_oci as sysdba
Dans le cas d'un RAC l'alias
syspdb12
n'utilise pas lascan
mais le nom du serveur local.Le paramètre
-wallet=no|yes
permet d'utiliser ou pas le Wallet. Pour définir la valeur par défaut de ce paramètre, exporter dans le profile d'Oracle la variableWALLET
avec comme valeuryes
ouno
.
Pour lister les connexions enregistrées dans le wallet
:
oracle@srvfoo01:FOO1:~> ~/plescripts/db/wallet/list_credentials.sh
Le wallet
est utilisé pour le compte sys
d'un PDB et pour le compte utilisateur
gérant un DBFS (si un DBFS est créé).
Pour effectuer un backup :
oracle@srvfoo01:FOO1:~> cd ~/plescripts/db
oracle@srvfoo01:FOO1:db> ./image_copy_backup.sh
Utiliser le script : plescripts/db/drop_pdb.sh
Le script met à jour :
- tnsnames.ora
- le
wallet
Oracle - Si un
dbfs
existe toutes les ressources associées sont supprimées.
Il n'est plus possible de démarrer une base avec sqlplus
.
Le CDB tchouri
contient un PDB pdb1414
, le compte sys de pdb1414
est
enregistré dans le Wallet Manager :
oracle@srvtchouri01:TCHOURI:db> ~/db/wallet/list_credentials.sh
# Connect string : syspdb1414, user : sys
Les connexions suivantes fonctionnent correctement :
- Sur le CDB
oracle@srvtchouri01:TCHOURI:db> sqlplus sys/Oracle12 as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Thu Feb 9 12:24:07 2017 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options sys@cdb$root>
- Sur
pdb1414
oracle@srvtchouri01:TCHOURI:db> sqlplus /@syspdb1414 as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Thu Feb 9 12:24:03 2017 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options sys@pdb1414>
Arrêt de la base tchouri
avec sqlplus
aucun problème :
sys@cdb$root> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@cdb$root>
Démarrage de la base tchouri
avec sqlplus
problème :
idle> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DATA/TCHOURI/spfileTCHOURI.ora'
ORA-17503: ksfdopn:2 Failed to open file +DATA/TCHOURI/spfileTCHOURI.ora
ORA-15056: additional error message
ORA-17503: ksfdopn:2 Failed to open file +DATA/TCHOURI/spfiletchouri.ora
ORA-12578: TNS:wallet open failed
ORA-06512: at line 4
idle>
Par contre le démarrage avec srvctl
(12.1.0.2) fonctionne :
oracle@srvtchouri01:TCHOURI:db> srvctl start database -db tchouri
Avec Oracle 12cR2 et le Grid Infra d'installé, il est impossible de démarrer la
base avec sqlplus
ou srvctl
. La seul solution que j'ai trouvé étant :
- positionner la variable
SQLNET.WALLET_OVERRIDE
àFALSE
- démarrer la base.
- positionner la variable
SQLNET.WALLET_OVERRIDE
àTRUE
Les chapitres ci-dessous sont conservés comme aides mémoire, ils permettent de comprendre la logique des scripts ci-dessus.
sys@cdb$root> create pluggable database foo ADMIN USER syspdb identified by Oracle12;
Pluggable database created.
Le script create_srv_for_dataguard.sh
permet de créer les services sur la base
'primary' et sur la base 'standby'
Ce script doit être exécuté sur le serveur ayant le rôle 'primary'
oracle@srvleft01:LEFT:db> ./create_srv_for_dataguard.sh -db=left -pdbName=foo \
> -standby=right -standby_host=srvright01
12h45> /home/oracle/plescripts/db/create_srv_for_single_db.sh -db=left -pdbName=FOO -role=primary -start=yes
# ==============================================================================================
# create service pdbFOO_oci on pluggable FOO (db = left).
12h45> srvctl \
add service -service pdbFOO_oci \
-pdb FOO -db left \
-role primary \
-policy automatic \
-failovertype select \
-failovermethod basic \
-failoverretry 20 \
-failoverdelay 3 \
-clbgoal long \
-rlbgoal throughput
12h45> srvctl start service -service pdbFOO_oci -db left
12h45> ~/plescripts/db/add_tns_alias.sh -service_name=pdbFOO_oci -host_name=srvleft01
12h45> /home/oracle/plescripts/db/delete_tns_alias.sh -tnsalias=PDBFOO_OCI
# Alias PDBFOO_OCI not found.
# Append new alias : PDBFOO_OCI
# $TNS_ADMIN/tnsnames.ora updated.
# ==============================================================================================
# create service pdbFOO_java on pluggable FOO (db = left)
12h45> srvctl \
add service -service pdbFOO_java \
-pdb FOO -db left \
-role primary \
-policy automatic \
-failovertype SELECT \
-failovermethod basic \
-failoverretry 30 \
-failoverdelay 1
12h45> srvctl start service -service pdbFOO_java -db left
12h45> /home/oracle/plescripts/db/create_srv_for_single_db.sh -db=left -pdbName=FOO -role=physical_standby -start=yes
# ==============================================================================================
# create service pdbFOO_stby_oci on pluggable FOO (db = left).
12h45> srvctl \
add service -service pdbFOO_stby_oci \
-pdb FOO -db left \
-role physical_standby \
-policy automatic \
-failovertype select \
-failovermethod basic \
-failoverretry 20 \
-failoverdelay 3 \
-clbgoal long \
-rlbgoal throughput
12h45> srvctl start service -service pdbFOO_stby_oci -db left
12h46> ~/plescripts/db/add_tns_alias.sh -service_name=pdbFOO_stby_oci -host_name=srvleft01
12h46> /home/oracle/plescripts/db/delete_tns_alias.sh -tnsalias=PDBFOO_STBY_OCI
# Alias PDBFOO_STBY_OCI not found.
# Append new alias : PDBFOO_STBY_OCI
# $TNS_ADMIN/tnsnames.ora updated.
# ==============================================================================================
# create service pdbFOO_stby_java on pluggable FOO (db = left)
12h46> srvctl \
add service -service pdbFOO_stby_java \
-pdb FOO -db left \
-role physical_standby \
-policy automatic \
-failovertype SELECT \
-failovermethod basic \
-failoverretry 30 \
-failoverdelay 1
12h46> srvctl start service -service pdbFOO_stby_java -db left
# Arrêt des services stby (oui ils doivent être démarrés)
12h46> srvctl stop service -db left -service pdbFOO_stby_oci
12h46> srvctl stop service -db left -service pdbFOO_stby_java
12h46> ssh -t srvright01 ". .bash_profile; ~/plescripts/db/create_srv_for_single_db.sh -db=right -pdbName=FOO -role=primary -start=no"
# ==============================================================================================
# create service pdbFOO_oci on pluggable FOO (db = right).
12h46> srvctl \
add service -service pdbFOO_oci \
-pdb FOO -db right \
-role primary \
-policy automatic \
-failovertype select \
-failovermethod basic \
-failoverretry 20 \
-failoverdelay 3 \
-clbgoal long \
-rlbgoal throughput
12h46> ~/plescripts/db/add_tns_alias.sh -service_name=pdbFOO_oci -host_name=srvright01
12h46> /home/oracle/plescripts/db/delete_tns_alias.sh -tnsalias=PDBFOO_OCI
# Alias PDBFOO_OCI not found.
# Append new alias : PDBFOO_OCI
# $TNS_ADMIN/tnsnames.ora updated.
# ==============================================================================================
# create service pdbFOO_java on pluggable FOO (db = right)
12h46> srvctl \
add service -service pdbFOO_java \
-pdb FOO -db right \
-role primary \
-policy automatic \
-failovertype SELECT \
-failovermethod basic \
-failoverretry 30 \
-failoverdelay 1
Connection to srvright01 closed.
12h46> ssh -t srvright01 ". .bash_profile; ~/plescripts/db/create_srv_for_single_db.sh -db=right -pdbName=FOO -role=physical_standby -start=yes"
# ==============================================================================================
# create service pdbFOO_stby_oci on pluggable FOO (db = right).
12h46> srvctl \
add service -service pdbFOO_stby_oci \
-pdb FOO -db right \
-role physical_standby \
-policy automatic \
-failovertype select \
-failovermethod basic \
-failoverretry 20 \
-failoverdelay 3 \
-clbgoal long \
-rlbgoal throughput
12h46> srvctl start service -service pdbFOO_stby_oci -db right
12h46> ~/plescripts/db/add_tns_alias.sh -service_name=pdbFOO_stby_oci -host_name=srvright01
12h46> /home/oracle/plescripts/db/delete_tns_alias.sh -tnsalias=PDBFOO_STBY_OCI
# Alias PDBFOO_STBY_OCI not found.
# Append new alias : PDBFOO_STBY_OCI
# $TNS_ADMIN/tnsnames.ora updated.
# ==============================================================================================
# create service pdbFOO_stby_java on pluggable FOO (db = right)
12h46> srvctl \
add service -service pdbFOO_stby_java \
-pdb FOO -db right \
-role physical_standby \
-policy automatic \
-failovertype SELECT \
-failovermethod basic \
-failoverretry 30 \
-failoverdelay 1
12h46> srvctl start service -service pdbFOO_stby_java -db right
Connection to srvright01 closed.
oracle@srvleft01:LEFT:db>
Il est nécessaire de créer le 'temporary file' pour la PDB foo sur la base standby, voir l'alertlog de la standby :
ALTER PLUGGABLE DATABASE FOO OPEN /* svc agent *//* {0:0:928} */
Mon Oct 24 12:46:12 2016
Database Characterset for FOO is AL32UTF8
*********************************************************************
WARNING: The following temporary tablespaces in container(FOO)
contain no files.
This condition can occur when a backup controlfile has
been restored. It may be necessary to add files to these
tablespaces. That can be done using the SQL statement:
ALTER TABLESPACE <tablespace_name> ADD TEMPFILE
Alternatively, if these temporary tablespaces are no longer
needed, then they can be dropped.
Empty temporary tablespace: TEMP
*********************************************************************
Depuis le serveur 'standby' se connecter sur la PDB foo :
oracle@srvright01:RIGHT:~> sqlplus sys/Oracle12@pdbfoo_stby_oci as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Mon Oct 24 12:57:08 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE;
Tablespace altered.
SQL>
Fonctionne car la base est en 'read only'.
Le script drop_all_services_for_pdb.sh
permet de supprimer tous les services
associés à un pdb.
Ce script doit être exécuté sur tous les serveurs du cluster dataguard.