Qualité de service et réduction des coûts: Les solutions EASYTEAM / ORACLE pour les PME et les collectivités
EASYTEAM organise 2 séminaires à destination des PME et des collectivités: le 5 juillet à Marseille et le 10 Juillet Paris La Défense
Ces séminaires seront l’occasion de présenter les solutions EASYTEAM / ORACLE particulièrement adaptées au contexte des entreprises de taille moyenne et des collectivités:
- GOLDENGATE pour la migration et l’intégration de données
- ODA et les solutions infrastructures et bases de données ORACLE, pour l’exploitation des applications SAP
- EASYTRUST la solution d’infogérance d’EASYTEAM
Je m’inscris
Souvent on souhaite permettre à nos services de notifier les utilisateurs… moins souvent, on souhaite pouvoir notifier nos services via emails… et forcément quand c’est une pratique moins fréquente, on trouve moins d’informations…
Cette problématique était prise en compte dans la version 10g via les « activation agents », cependant cette méthode n’est plus valable en 11g…
Aujourd’hui plus besoin de chercher ! Vous n’avez plus qu’à lire la suite !
Clonage de base de données Oracle
Le but du clonage est de mettre à disposition des équipes de développement ou de recette une copie de la base de production a un instant T. Pour ce faire, on part d’une sauvegarde de la base faite à l’aide de l’utilitaire RMAN. L’intérêt de partir d’une sauvegarde plutôt que de dupliquer directement la base de production ( ce qui est possible sans sauvegarde depuis la version 11gR2) est que l’on ne perturbe pas le fonctionnement de la base d’origine qui est généralement une base de production.
On abordera ici le clonage d’une base en standalone vers une base en standalone , d’une base en RAC vers une base en standalone , une base en RAC vers une base en RAC et une base en standalone vers une base en RAC.
Attention, Il s’agit ici d’une copie physique d’une base sur une autre. Une fois le clonage terminé, les users et password de la base clonée sont les mêmes que sur la base d’origine. Tout ce qui pouvait faire la spécificité de la base de destination, et qui n’est pas un paramètre d’initialisation, a disparu.
Partons du principe que l’on veuille cloner la base de production BDDPROD sur la base de recette BDDR7.
Les prérequis :
Cela peut paraître trivial, mais les versions des bases de données doivent être identique.
- Recherche de l’espace disque nécessaire.
Pour cela on exécutera la requête suivante sur la base BDDPROD
select fs_name ||’@#@’||to_char( floor((sum(vol)/1024/1024)+0.5))
from
(
select substr(f.file_name,1,instr(f.file_name ,’/',-2)-1) fs_name , sum(bytes) vol
from dba_data_files f
group by substr(f.file_name,1,instr(f.file_name ,’/',-2)-1)
union
select substr(member,1,instr(member,’/',-1)-1) fs_name,sum(bytes) vol
from v$logfile m,v$log l
where l.group#=m.group#
and type = ‘ONLINE’
group by substr(member,1,instr(member,’/',-1)-1)
union
select substr(name,1,instr(name,’/',-1)-1) fs_name,0 vol
from v$controlfile
where IS_RECOVERY_DEST_FILE = ‘NO’
group by substr(name,1,instr(name,’/',-1)-1)
union
select substr(name,1,instr(name,’/',-1)-1) fs_name,sum(bytes) vol
from v$tempfile
group by substr(name,1,instr(name,’/',-1)-1)
)
group by fs_name;
Cette requête ramène le volume de fichier de base de données par filesystem ou volume ASM. On a donc une bonne estimation de la volumétrie minimum à mettre en place sur l’environnement clone
Par exemple
/localisation/control/file 0M
/localisation/redo/log 600M
/localisation/data/files_1 500G
/localisation/temp/files 32G
/localisation/undo/dbf 64G
A partir des informations recueillies précédemment, on peut contrôler que l’on dispose bien des volumes disques sur l’environnement clone.
Par exemple
/nouvelle/localisation/control/file 600M
/nouvelle/localisation/redo/log 10240M
/nouvelle/localisation/data/files_1 600G
/nouvelle/localisation/temp/files 64G
/nouvelle/localisation/undo/dbf 120G
- Mise a jour du paramétrage de la base clone.
Suivant le cas de figure les modifications sont les suivantes :
Dans le cas de clonage de base standalone vers une base standalone pas de modifications de paramétrage à faire du coté de la base BDDR7.
Dans le cas de clonage d’une base en standlone vers une base en RAC, il faut modifier les paramètres suivants dans le fichier d’initialisation ( pfile ou spfile ) de la base BDDR7.
*._no_recovery_through_resetlogs=TRUE
*.cluster_database=false
Dans le cas de clonage d’une base en RAC vers une base en RAC, il faut modifier les paramètres suivants dans le fichier d’initialisation ( pfile ou spfile ) de la base BDDR7.
*._no_recovery_through_resetlogs=TRUE
*.cluster_database=false
Dans le cas de clonage d’une base en RAC vers une base en standalone, il faut modifier le paramètre suivant dans le fichier d’initialisation ( pfile ou spfile ) de la base BDDR7
*._no_recovery_through_resetlogs=TRUE
- Mise a jour du fichier tnsnames.ora
Le serveur sur lequel la base de recette est installée doit pouvoir se connecter à la base de données de production. Il faut donc configurer le fichier tnsnames.ora en conséquence.
- mise en place de l’environnement TSM si TSM est utilisé
Si on utilise TSM et TDPO pour effectuer les sauvegardes, il faut que le serveur supportant la base clone puisse lire les sauvegardes de la base de production. Pour cela, il faut récupérer des fichiers de paramétrage TDPO du le serveur de production pour les copier sur le serveur de recette en les renommant.
Les fichiers à récupérer sont :
/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt
à renommer en
/opt/tivoli/tsm/client/oracle/bin64/tdpo_${TARGET_HOST}.opt
et
/opt/tivoli/tsm/client/oracle/bin64/TDPO.${TARGET_HOST}_ORA
à ne surtout pas renommer.
- Dans le cas de sauvegarde sur disque,
les fichiers de sauvegardes doivent être visibles des 2 environnements recette et production.
création du script de clonage mon_scripts_rman.
CONNECT TARGET sys/${SYS_PWD}@${TARGET_SID};
CONNECT AUXILIARY / ;
run
{
allocate auxiliary channel c1 type ‘SBT_TAPE’ parms ‘ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo_${TARGET_HOST}.opt)’;
allocate auxiliary channel c2 type ‘SBT_TAPE’ parms ‘ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo_${TARGET_HOST}.opt)’;
duplicate target database to ${ORACLE_SID}
db_file_name_convert = (
‘/localisation/control/file’,'/nouvelle/localisation/control/file’
,’/localisation/data/files_1′,’/nouvelle/localisation/data/files_1′
,’/localisation/temp/files’,'/nouvelle/localisation/temp/files’
,’/localisation/undo/dbf}’,'/nouvelle/localisation/undo/dbf’
)
until time “to_date(’2012-03-03:14:00:00′,’YYYY-MM-DD:HH24:MI:SS’)”
logfile
GROUP 1 ( ‘/localisation/redo/log/redo1a.rdo’ , ‘/nouvelle/localisation/redo/log/redo1b.rdo’ ) size 204800K ,
GROUP 2 ( ‘/localisation/redo/log/redo2b.rdo’ , ‘/nouvelle/localisation/redo/log/redo2a.rdo’ ) size 204800K ,
GROUP 3 ( ‘/localisation/redo/log/redo3b.rdo’ , ‘/nouvelle/localisation/redo/log/redo3a.rdo’ ) size 204800K ;
}
Lancement du scripts de clonage
- avec catalogue Rman
rman rcvcat ${RMAN_USR}/${RMAN_PWD}@${RMAN_BDD}
@mon_script_rman
- Sans catalogue Rman
rman
@mon_script_rman
- mise a jour du paramétrage de la base clone
Dans le cas de clonage d’une base en standlone vers une base en RAC, il faut modifier les paramètres suivants dans le fichier d’initialisation ( pfile ou spfile ) de la base BDDR7.
*.cluster_database=TRUE
et supprimer le paramètre *._no_recovery_through_resetlogs des paramètres d’initialisation
Dans le cas de clonage d’une base en RAC vers une base en RAC, il faut modifier les paramètres suivants dans le fichier d’initialisation ( pfile ou spfile ) de la base BDDR7.
*.cluster_database=TRUE
et supprimer le paramètre *._no_recovery_through_resetlogs des paramètres d’initialisation
Dans le cas de clonage d’une base en RAC vers une base en standalone, il faut
supprimer le paramètre *._no_recovery_through_resetlogs des paramètres d’initialisation de la base BDDR7
Actions complémentaires liées au clonage de base standalone vers RAC
Une fois l’instance 1 du RAC cloné démarrée, il y a des opérations supplémentaires à effectuer. En effet lors du clonage d’une base en standalone, les redologs associés aux threads utilisés par les autres instances du RAC ne sont pas créés. Ils n’existent pas sur l’instance d’origine. Il faut donc les créés de toute pièce.
Pour cela, on se connecte sys sur l’instance1 du RAC.
On crée de nouveaux groupes de redologs attachés au thread des autres instances du RAC
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 21 (+NOUVELLE/localisation/redo/log/redo_21.log') SIZE 10240K
On Active les différents threads ainsi créés.
ALTER DATABASE ENABLE THREAD 2
On crée les undos tablespaces supplémentaires, 1 par instance supplémentaire du RAC :
CREATE SMALLFILE UNDO TABLESPACE "UNDOTBS2" DATAFILE '+NOUVELLE/localisation/undo/dbf/undotbs02.dbf' SIZE 1024M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE 10240M
On peut maintenant démarrer les autres instances du RAC.
Cet article décrit les bonnes pratiques à mettre en oeuvre dans un environnement Maximum Availability Architecture (MAA) pour que les clients Oracle basculent automatiquement sur la base de secours lorsque la base de production devient inaccessible soit du fait que le ou les serveurs de la base de données soient défaillants ou que nous soyons en présence d’un désastre partiel de site.
Environnement Oracle Maximum Availability Architecture (MAA)
L’environnement Oracle se compose de deux clusters Oracle RAC 11gr2 constitués chacun de deux nœuds qui sont répartis sur deux sites distincts.
Un site héberge la base de production que nous désignons par ‘PRODUCTION’ alors que l’autre site héberge la base de secours dont la synchronisation repose sur les mécanismes Dataguard et que nous dénommons ‘SECOURS’.
Un service ‘oltp’ spécialisé dans les transactions est associé à la base de production alors qu’un service de ‘reporting’ est publié sur la base de secours qui utilise la nouvelle option d’Oracle 11gR2 ‘Active Dataguard’ qui permet d’accéder en lecture la base de secours en même temps que celle-ci est synchronisée (RECOVER).
Configuration des services Oracle au niveau du clusterware
La définition des services doit être unique en fonction de la nature de la connexion du client qui peut être soit OCI ou JDBC, ainsi chaque type de client dispose d’un dispositif de notification différent pour détecter la disponibilité ou non du service. Le dispositif de notification pour les clients OCI repose sur Oracle Advanced Queue (AQ) alors que les clients JDBC utilisent Oracle Notification Service (ONS).
En premier lieu il convient de configurer par exemple les services oltp, reporting au niveau du cluster Oracle pour que l’application puisse se connecter à la base de données. Le service devra être créé et accessible en fonction du rôle de la base de données (Primary, Standby). Ainsi le service oltp sera disponible pour la base de données primaire (Primary) alors que le service reporting sera uniquement accessible sur la base de données de données de secours (Standby).
Configuration des services client OCI
La configuration des services sera donc fonction du rôle de la base de données dans le cluster Oracle.
- Cluster de production
srvctl add service –d production –s oltp_oci –r instance1,instance2 –l PRIMARY –q TRUE –e SESSION –m BASIC –w 10 –z 150 srvctl add service –d production –s reporting_oci –r instance1,instance2 –l PHYSICAL_STANDBY –q TRUE –e SESSION –m BASIC –w 10 –z 150
- Cluster de secours
srvctl add service –d secours –s oltp_oci –r instance1, instance2 –l PRIMARY –q TRUE –e SESSION –m BASIC –w 10 –z 150 srvctl add service –d secours –s reporting_oci –r instance1, instance2 –l PHYSICAL_STANDBY –q TRUE –e SESSION –m BASIC –w 10 –z 150
- Au niveau de la base de production (Primary) les services doivent être déclarés pour qu’ils soient propagés et appliqués sur la base de secours (Standby), ainsi tout client OCI qui se connecte au service hérite implicitement des attributs du service définis au niveau de la base de données, aussi il n’est pas utile de configurer TAF du côté du client dans le fichier tnsnames.ora
SQL> exec dbms_service.create_service(‘oltp_oci’,’oltp_oci’,NULL,NULL,TRUE,’BASIC’,’SESSION’,150,10,NULL); exec dbms_service.create_service(‘reporting_oci’,’reporting_oci’,NULL,NULL,TRUE,’BASIC’,’SESSION’,150,10,NULL);
Configuration des services pour client JDBC
Les clients JDBC ne supportent pas TAF, aussi la configuration des services jdbc devraient être la suivante :
- Cluster de production
srvctl add service –d production –s oltp_jdbc –r instance1, instance2 –l PRIMARY –q NONE –e NONE –m BASIC –w 0 –z 0 srvctl add service –d production –s reporting_jdbc –r instance1, instance2 –l PHYSICAL_STANDBY –q NONE –e NONE –m BASIC –w 0 –z 0
- Cluster de secours
srvctl add service –d secours –s oltp_jdbc –r instance1, instance2 –l PRIMARY –q NONE –e NONE –m BASIC –w 0 –z 0 srvctl add service –d secours –s reporting_jdbc –r instance1, instance2 –l PHYSICAL_STANDBY –q NONE –e NONE –m BASIC –w 0 –z 0
- Au niveau de la base de production (Primary) les services doivent être déclarés pour qu’ils soient propagés et appliqués sur la base de secours (Standby)
SQL> exec dbms_service.create_service(‘oltp_jdbc’,’oltp_jdbc’,NULL,NULL,FALSE,’NONE’,’NONE’,0,0,NULL); exec dbms_service.create_service(‘olpt_jdbc’,’reporting_oci’,NULL,NULL,FALSE,’NONE’,’NONE’,0,0,NULL);
Configuration de la bascule pour les clients OCI et JDBC sans FAN
Dans cette section nous nous concentrerons uniquement sur la bascule automatique des clients qui ne supportent pas Fast Application Notification (FAN).
Bascule automatique pour les clients OCI
Pour une meilleure exécution l’alias réseau d’Oracle Net devrait initialiser l’option LOAD_BALANCE=OFF au niveau DESCRIPTION_LIST ainsi avec cette configuration les tentatives de connexion sur la deuxième DESCRIPTION ne seront effectives que si toutes les tentatives de connexion sur la première DESCRIPTION ont échoué.
- Les clients OCI 11gR2 peuvent directement faire référence à l’alias réseau du SCAN introduit avec cette nouvelle version.
oltp_oci =
(DESCRIPTION_LIST=
(LOAD_BALANCE=OFF)
(FAILOVER=ON)
(DESCRIPTION=
(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=production-scan)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=oltp_oci)))
(DESCRIPTION=
(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=secours-scan)(PORT=1521))) (CONNECT_DATA=(SERVICE_NAME=oltp_oci))))
Le SCAN est constituée de 3 adresses IP si la connexion essayée à l’adresse IP ne répond pas dans les 3 secondes TRANSPORT_CONNECT_TIMEOUT l’adresse IP suivante sera alors tentée. Toutes les 3 adresses IP seront essayées pour un total de quatre fois (la tentative initiale plus RETRY_COUNT dans cet exemple). Si la tentative de connexion est infructueuse sur le site de production la connexion sera alors basculée sur le site de secours avec le même mécanisme d’exécution de la connexion.
- Alors que les clients OCI dont la version est antérieure à la 11gR2 doivent faire référence à l’alias réseau de la VIP ou l’adresse IP du SCAN.
oltp_oci =
(DESCRIPTION_LIST=
(LOAD_BALANCE=OFF)
(FAILOVER=ON)
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=production-vip1)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=production-vip2)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=oltp_oci)))
(DESCRIPTION=
(ADDRESS_LIST=
(LOAD_BALANCE=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=secours-vip1)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=secours-vip2)(PORT=1521)))
(CONNECT_DATA=(SERVICE_NAME=oltp_oci))))
Du coté du client il est recommandé d’initialiser dans le fichier ‘sqlnet.ora ‘ le paramètre SQLNET.OUTBOUND_CONNECT_TIMEOUT, ce paramètre permet de réduire la durée de tentative de connexion à chacun des serveurs indisponibles qui sont définis dans ADDRESS_LIST. Une valeur à 3 secondes pour ce paramètre convient dans la plupart des environnements.
Bascule automatique pour les clients JDBC
Comme nous l’avons dit précédemment les clients JDBC ne supportent pas TAF, aussi la logique de reconnexion doit être prise en compte par l’application pour répondre convenablement en cas de défaillance. Par exemple, quand une session du pool de connexion reçoit une exception qui engendre une déconnexion (comme une erreur ORA-3113), l’application devrait automatiquement essayer de reconnecter cette session. Les tentatives de reconnexion devraient être configurées pour qu’elles puissent durer aussi longtemps que la bascule des services est effective.
- Client JDBC 11gR2
String dbURL = "jdbc:oracle:thin:@" + "(DESCRIPTION_LIST=" + “(LOAD_BALANCE=off)” + "(FAILOVER=on)" + "(DESCRIPTION=" + "(ADDRESS_LIST=" + "(LOAD_BALANCE=on)" + "(ADDRESS=(PROTOCOL=TCP)(HOST=production-scan)(PORT=1521)))" + "(CONNECT_DATA=(SERVICE_NAME=oltp-jdbc)))" + "(DESCRIPTION=" + "(ADDRESS_LIST=" + "(LOAD_BALANCE=on)" + "(ADDRESS=(PROTOCOL=TCP)(HOST=secours-scan)(PORT=1521)))" + "(CONNECT_DATA=(SERVICE_NAME=oltp-jdbc))))";
- Client JDBC antérieur à la version 11gR2
String dbURL = "jdbc:oracle:thin:@" + "(DESCRIPTION_LIST=" + “(LOAD_BALANCE=off)” + "(FAILOVER=on)" + "(DESCRIPTION=" + "(ADDRESS_LIST=" + "(LOAD_BALANCE=on)" + "(ADDRESS=(PROTOCOL=TCP)(HOST=production-vip1)(PORT=1521))" + "(ADDRESS=(PROTOCOL=TCP)(HOST=production-vip2)(PORT=1521)))" + "(CONNECT_DATA=(SERVICE_NAME=oltp-jdbc)))" + "(DESCRIPTION=" + "(ADDRESS_LIST=" + "(LOAD_BALANCE=on)" + "(ADDRESS=(PROTOCOL=TCP)(HOST=secours-vip1)(PORT=1521))" + "(ADDRESS=(PROTOCOL=TCP)(HOST=secours-vip2)(PORT=1521)))" + "(CONNECT_DATA=(SERVICE_NAME=oltp-jdbc))))";
Dans un prochain article nous verrons comment configurer les clients Oracle avec FAN
ADF : Copier/Coller un ViewObject
Effectuer la copie
Il peut arriver de temps en temps de vouloir dupliquer un ViewObject pour une raison X ou Y. Ou plus particulièrement un Row dans un ViewObject.
La méthode de copie est très simple, la voici :
ViewObject bookVO = /* récupération du ViewObject */;
Row foundBookRow = /* récupération du Row à copier */;
Row newBookRow = bookVO.createRow(); // Le Row dans lequel on va coller
// On parcours tous les attributs du Row trouvé
for (String name : foundBookRow.getAttributeNames()) {
// On ne prend pas en compte l'ID du Row
// Sinon on va dupliquer la clé primaire
if (!"BookId".equals(name)) {
// On effectue la copie de l'attribut
newBookRow.setAttribute(name, foundBookRow.getAttribute(name));
}
}
// On génère un faux ID (un trigger en BDD génèrera le bon tout seul)
newBookRow.setAttribute("BookId", new Number(-new Random().nextInt(999999999)));
// On insère notre Row dans le ViewObject
bookVO.insertRow(newBookRow);
// N'oubliez pas d'effectuer un commit si besoin.
EASYTEAM organise le 14 Juin à PARIS un séminaire autour des solutions EXADATA et EXALOGIC, avec la présence des meilleurs experts de ces sujets. Ce séminaire vous permettra de découvrir les produits et les services d’EASYTEAM autour des solutions EXADATA et EXALOGIC, ainsi que d’appréhender plusieurs cas d’utilisation: Business Intelligence, Transactionnel, Exploitation SAP, Batchs etc…
Voir l’agenda du séminaire
My Oracle Support (MOS) : Premium et Extended Support
Aujourd’hui, je vais vous raconter une mésaventure survenue à un de nos clients, peut être se reconnaîtra-t-il, mais je resterais discret, en tout cas cela peut arriver à tous un jour ou l’autre et comme pour les contrats d’assurance c’est le petit détail auquel on a pas fait attention qui fait toute la différence ; intérêt supplémentaire cela donne l’occasion de parcourir le chemin qui serpente autour de toutes les informations sur le support des versions des produits Oracle, et particulièrement de la base de données. Voici les faits : Lire la suite…
DUPLICATE…FROM ACTIVE DATABASE
Avez-vous déjà tenté de cloner une base à chaud…sans aucune sauvegarde RMAN? Vous pensez peut être à un “DUPLICATE” RMAN ? Et bien oui, mais pas tout à fait ! Pourquoi ? Un duplicate nécessite une sauvegarde RMAN disponible pour pouvoir créer la copie de la base. Mais la solution qui vous est proposée ici est de cloner une base sans avoir au préalable une sauvegarde RMAN.
Avec la 11g, Oracle offre cette possibilité avec la commande “DUPLICATE….FROM ACTIVE DATABASE”. Dans ce chapitre, vous trouverez les différentes étapes pour implémenter cette solution.
Dans l’exemple ci-dessous, vous allez dupliquez une base en version 11.2.0.1 sur un serveur Windows (XP/64bits).
- Préparez l’arborescence qui va accueillir la nouvelle base :
C:\ORACLE_DB\SATURNE C:\ORACLE_DB\SATURNE\DATA C:\ORACLE_DB\SATURNE\REDO C:\ORACLE_DB\SATURNE\CTRL
- Générez un pfile de la base source :
C:\>set ORACLE_SID=NEPTUNE C:\>sqlplus / as sysdba SQL>create pfile='C:\app\oracle\product\11.2.0\dbhome_1\database\init_SATURNE.ora' from spfile; Fichier créé. SQL>exit
- Ouvrez le fichier init_SATURNE.ora généré sous “%ORACLE_HOME%/database”
Modifiez toutes les entrées du fichier en remplaçant le nom de la base source par le nom de la base dupliquée :
Dans l’exemple, la chaîne NEPTUNE est remplacée par SATURNE, vous obtenez un fichier de ce style là :
*.audit_file_dest='C:\app\oracle\admin\saturne\adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='C:\ORACLE_DB\SATURNE\DATA\control01.ctl','C:\ORACLE_DB\SATURNE\CTRL\control02.ctl' *.db_block_size=8192 *.db_domain='world' *.db_name='saturne' *.db_recovery_file_dest='C:\app\oracle\flash_recovery_area' *.db_recovery_file_dest_size=3117416448 *.diagnostic_dest='C:\app\oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=saturneXDB)' *.nls_language='FRENCH' *.nls_territory='FRANCE' *.open_cursors=300 *.pga_aggregate_target=106954752 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=220864256 *.undo_tablespace='UNDOTBS1'
- Créez le service windows associé à la nouvelle base
C:\oradim -new -sid SATURNE Instance créé.
- Créez un fichier passwordfile avec l’utilitaire “orapwd”:
C:\orapwd file=PWDSATURNE password=sys_pass01
- Ajoutez le descripteur de connexion dans le fichier TNSNAMES.ora
SATURNE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = saturne) ) )
- Ajoutez uen entrée dans le fichier LISTENER.ora pour éviter que la nouvelle base bloque les connexions lorsqu’elle est en mode NOMOUNT :
(SID_DESC = (SID_NAME = SATURNE) (ORACLE_HOME = C:\app\oracle\product\11.2.0\dbhome_1) )
- Rafraichissez les services du listener :
C:\lsnrctl reload ... Copyright (c) 1991, 2010, Oracle. All rights reserved. Connexion à (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) La commande a réussi
- Testez la connexion au service SATURNE
C:\tnsping SATURNE ... Adaptateur TNSNAMES utilisé pour la résolution de l'alias Tentative de contact de (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname )(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = saturne))) OK (90 msec)
- Démarrez la base en mode NOMOUNT avec le fichier init_SATURNE.ora
C:\ sqlplus / as sysdba SQL>startup nomount pfile='C:\app\oracle\product\11.2.0\dbhome_1\database\init_SATURNE.ora' Instance ORACLE lancée. Total System Global Area 221790208 bytes Fixed Size 1373684 bytes Variable Size 83888652 bytes Database Buffers 134217728 bytes Redo Buffers 2310144 bytes SQL>exit
- Connectez-vous à RMAN sur la base source (target) et sur la base cible (auxiliary) :
C:\rman RMAN> connect target sys/sys_pass123@NEPTUNE connecté à la base de données cible : NEPTUNE (DBID=123456789) RMAN> connect auxiliary sys/sys_pass01@SATURNE connexion établie avec la base de données auxiliaire : SATURNE (non montée) RMAN>
- Lancez la commande de duplication :
RMAN> duplicate target database to SATURNE from active database
2>db_file_name_convert ‘C:\ORACLE_DB\NEPTUNE\DATA\','C:\ORACLE_DB\SATURNE\DATA\';
executing command: SET NEWNAME
executing command: SET NEWNAME
....
contenu de script mémoire:
{
Alter clone database open resetlogs;
}
exécution de script mémoire
base de données ouverte
Fin de Duplicate Db dans 27/03/12
RMAN>
- Vérifiez l’état de votre nouvelle base :
C:\sqlplus / as sysdba SQL> select name from v$database; NAME --------- SATURNE SQL> select status from v$instance; STATUS ------------ OPEN SQL> select file_name from dba_data_files; FILE_NAME ------------------------------------------------------- C:\ORACLE_DB\SATURNE\DATA\SYSTEM01.DBF C:\ORACLE_DB\SATURNE\DATA\SYSAUX01.DBF C:\ORACLE_DB\SATURNE\DATA\UNDOTBS01.DBF C:\ORACLE_DB\SATURNE\DATA\USERS01.DBF C:\ORACLE_DB\SATURNE\DATA\DATA01.DBF C:\ORACLE_DB\SATURNE\DATA\INDXS01.DBF SQL>
Et voilà, la nouvelle base est prête !
Pensez donc à cette solution lorsque vous avez une base à cloner. Cette fonctionnalité permet aussi de créer une STANDBY. L’option ‘FROM ACTIVE DATABASE’ offre donc un gain de temps sur la duplication d’une base de données. Vous disposez de données récentes et d’une image parfaite de la base source. Si vous prenez le temps d’éplucher la log RMAN vous comprendrez mieux la notion “ACTIVE DATABASE”. En effet, vous y verrez les différentes étapes de duplication. Il n’est pas nécessaire d’analyser la totalité de la log, mais vous constaterez qu’à un moment, RMAN effectue une sauvegarde de la base source. C’est cette sauvegarde qui sert à la duplication.
Sources :
Oracle® Database Backup and Recovery Reference
11g Release 1 (11.1)
Vous qui développez avec le framework ADF, il vous est déjà arrivé – ou vous arrivera un jour – de vouloir comparer un oracle.jbo.domain.Number avec un nombre entier dans une Expression Language. Sûrement pour afficher un nombre d’éléments quelconques.
Supposons que vous ayez un bindings nommé CountElements de type Number qui vous fourni ce nombre. Vous avez envie d’écrire la ligne suivante dans votre jsff.
<af:outputText value="#{bindings.CountElements.inputValue} elements in my page" id="ot1"/>
Dans la ligne ci-dessus, vous remarquez que le mot “elements” sera toujours au pluriel, alors vous allez me proposer la solution suivante :
<af:outputText value="#{bindings.CountElements.inputValue} #{bindings.CountElements.inputValue>1?'elements':'element'} in my page" id="ot1"/>
Mais si vous testez ce code, vous obtiendrez dès la première exécution l’exception suivante :
java.lang.IllegalArgumentException: Cannot convert 5 of type class oracle.jbo.domain.Number to class java.lang.Long
Vérifier le fonctionnement du multicast sur le réseau privé de votre infrastructure Grid
Depuis, la version 11g (11.2.0.2), l’infrastructure Grid d’Oracle qui gère la couche de mise en grappe de “Oracle Real Application Cluster” ainsi que le stockage via “Oracle Automatic Storage Management” permet de créer de la redondance d’interfaces dans le réseau privé de la grappe (ie le plus important car il gère les échanges entre les noeuds). L’infrastructure Grid s’appuie pour cela sur le multicast IP et est nécessaire à l’installation. Il est donc important de bien vérifier que le multicast fonctionne correctement sur les commutateurs réseau avant de lancer un déploiement afin de pouvoir anticiper et résoudre les éventuels problèmes. Lire la suite…


