Rechercher dans ce blog

vendredi 30 octobre 2015

Monitoiring golden gate




1         Configuration :


En  fait  en  cluster  les processus  Golden  Gate de  tourne que sur un des nœuds.


Ce qu  il  faut  c’est  faire un script  indépendant  du  nœud ou on part le script, donc   aller chercher les  ressources  Golden Gate et  le nœud  dans le  cluster.
Après on peut exécuter des commandes de vérifications  Golden Gate.
Au   minimum le  trail  file  du radlkdmp  sur   la  source   doit  être  identique  au  trail file  du  replicat.
Autre  point  on doit  verifier le  lag, l avancement des  archivelog sur la  source.

2         Cote  extract

2.1       Les   variables :

En  rouges les  variables  a  adapter  selon  si on est   sur  la  source ou la target. 
#!/usr/bin/ksh
#set -x
DBID=RAPR
export  type=extract –- extract  ou  replicat
export  repname=RADLK –- extract a monitorer
export  GGS_HOME=/appl/oracle/ggates/12
export  ORACLE_HOME=/appl/oracle/11204
export  ORACLE_BASE=/appl/oracle
export  LD_LIBRARY_PATH=/appl/oracle/ggates/12:/appl/oracle/11204/lib
export  DIRLOG=$ORACLE_BASE/LOG
export  LOG=$DIRLOG/${DBID}GG.`date \+%Y-%m-%d_%H:%M:%S`.log
export  DIRBIN=/appl/oracle/BIN
export  GRID_HOME=/appl/grid/11204
gguser=ggs  --user
ggpass=xxxxxxx --password

2.2       Le  cluster :

Ici   on vérifie  ou est  la ressource  cluster si  elle  local on execute  la partie  golden gate, sinon on se connecte  au nœud qui a la ressource et   on poursuit.
Ca   donne  donc
pgrep  mgr  --ici on cherche si le process  mgr  est local ou pas retourne le PID
if [ $? -eq 1 ]  -- en jouant sur le code retour on déduit si local  ou pas
then  -- pas local on  va chercher le nœud  qui possède la ressource cluster
echo "----------------------------------------------"
export  IP=`$GRID_HOME/bin/crsctl status res ggateapp |  grep  STATE |  awk '{print  $3}'`
export STATUS=`$GRID_HOME/bin/crsctl status res ggateapp |  grep  TARGET |  awk -F'='  '{print  $2}'`
echo $IP
echo  $STATUS
ssh  $IP $DIRBIN/gginfoall.ksh -- on exécute le script sur le nœud qui possède la ressoure
echo "----------------------------------------------"
else
echo  "roule"  --on continue en mode local
echo  "-------------------------------------------------">$LOG
echo  info  resource  cluster >>$LOG
echo  "-------------------------------------------------">>$LOG
$GRID_HOME/bin/crsctl status res ggateapp >>$LOG
$GRID_HOME/bin/crsctl status res pprgg-vip >>$LOG
$GRID_HOME/bin/crsctl status  res ora.radppr.radggatesvc.svc >>$LOG
echo  "-------------------------------------------------">>$LOG
echo  "who am i">>$LOG  --extra ou sommes nous ? Résultat : la ou il y a le service.
echo  "-------------------------------------------------">>$LOG
$ORACLE_HOME/bin/sqlplus `/usr/bin/cat ${DIRBIN}/RADPPR_login` as sysdba <<EOF
spool  $LOG append
@$DIRBIN/who.sql
EOF

2.3       Golden   gate :

Ici  la variable  repname = RADLK
echo  "-------------------------------------------------">>$LOG
echo  info golden gate >>$LOG
echo  "-------------------------------------------------">>$LOG
PROCESSES="mgr extract"  --change selon si  on  est  en  mode extract  ou replicat
cd  $GGS_HOME
$GGS_HOME/ggsci   <<EOF >>$LOG
dblogin  userid ${gguser}@GGATE ,password ${ggpass}
info all  -- info checkpoint, lag synthetique
info  ${repname} ,detail – info sur les trail file, archivelog séquence
-- le path des fichiers de config
info  ${repname} ,showch – plus de detail sur les  trails, et archivelog
lag  ${type} ${repname}
stats ${type}   ${repname}   reportrate  hr  -- les modification par heure
info  rmttrail *  --       info  trail de la target
exit
EOF
En info  rmttrail :
Use INFO RMTTRAIL to retrieve configuration information for a remote trail. It shows the name of the trail, the Extract that writes to it, the position of the last data processed, and the assigned maximum file size.
Extract Trail: /appl/oracle/ggates/12/trail/radlk/lk
             Extract: RADLK
               Seqno: 56  à la  source le  numéro ne suis pas forcement le pump process
                 RBA: 5458935
           File Size: 200M

       Extract Trail: /appl/oracle/ggates/12/trail/radlk/lk
             Extract: RADLKDMP
               Seqno: 45  àle numéro  doit etre  egal  a info  radlk  sur la target
                 RBA: 6802968
           File Size: 200M
Ci-dessous  on retrouve les mêmes informations :
GGSCI (ppr-mtlunt116) 3> info  radlkdmp  showch

EXTRACT    RADLKDMP  Last Started 2015-10-28 15:39   Status RUNNING
Checkpoint Lag       00:00:00 (updated 00:00:07 ago)
Process ID           17299
Log Read Checkpoint  File /appl/oracle/ggates/12/trail/radlk/lk000056
                     2015-10-29 17:21:58.000000  RBA 10707865


Current Checkpoint Detail:

Read Checkpoint #1

  GGS Log Trail

  Startup Checkpoint (starting position in the data source):
    Sequence #: 54
    RBA: 875347
    Timestamp: 2015-10-28 14:58:40.000000
    Extract Trail: /appl/oracle/ggates/12/trail/radlk/lk

  Current Checkpoint (position of last record read in the data source):
    Sequence #: 56
    RBA: 10707865
    Timestamp: 2015-10-29 17:21:58.000000
    Extract Trail: /appl/oracle/ggates/12/trail/radlk/lk

Write Checkpoint #1

  GGS Log Trail

  Current Checkpoint (current write position):
    Sequence #: 45
    RBA: 12051898
    Timestamp: 2015-10-29 17:23:46.419482
    Extract Trail: /appl/oracle/ggates/12/trail/radlk/lk
    Trail Type: RMTTRAIL

Header:
  Version = 2
  Record Source = A
  Type = 1
  # Input Checkpoints = 1
  # Output Checkpoints = 1

File Information:
  Block Size = 2048
  Max Blocks = 100
  Record Length = 2048
  Current Offset = 0

Configuration:
  Data Source = 0
  Transaction Integrity = 1
  Task Type = 0

Status:
  Start Time = 2015-10-28 15:39:20
  Last Update Time = 2015-10-29 17:23:46
  Stop Status = A
  Last Result = 400

2.4       Les  process

echo  info process  et FS>>$LOG
echo  "-------------------------------------------------">>$LOG
df -h  |  grep   gg  -- FS ou sont les trails
for  GGPROC  in  $PROCESSES  -- process mgr, extract ou replicat
do
FLAG=`ps  -ef |  grep ${GGPROC} |  grep -v  grep |   awk '{print $2}'  ` --#process
if [ `ps  -ef |  grep ${GGPROC} |grep -v grep | wc -l` -gt 3 ] – nombre de process
then
echo  "no golden  gate" >>$LOG
else
echo  "--------------------- $GGPROC ---------------" >>$LOG
#ps  -ef | grep  $FLAG >>$LOG
/usr/bin/pargs $FLAG >>$LOG  -- argument des process  id
echo  "---------------------------------------------" >>$LOG
fi
done

2.5       Dba_tab_modifications

Les tables qui  ont subi  des modifications depuis  les derniers  statistiques  oracle.

3         Cote  replicat :

3.1       Golden  gate :

LA difference  pas  d extract
Pas de rmttrail
Sinon  c est  identiques :
PROCESSES="mgr replicat"
$GGS_HOME/ggsci   <<EOF >>$LOG
dblogin  userid  ggate@GG ,password xxxxxxx – pas de  variable a ameliorer
info all
info  ${repname} ,detail
info  ${repname} ,showch
lag  ${type} ${repname}
stats ${type}   ${repname}   reportrate  hr
exit
EOF

4         Logs :

Comme la   resource  est dans le cluster  on peut  se  referer a
/var/log/messages  en  cas d’erreur  exemple :
Oct 28 15:05:16 ppr-unt116 Oracle GoldenGate Capture for Oracle[12144]: [ID 702911 user.error] 2015-10-28 15:05:16  ERROR   OGG-01454  Oracle GoldenGate Capture for Oracle, radlk.prm:  Unable to lock file "/appl/oracle/ggates/12/trail/radlk/lk000054" (error 11, Resource temporarily unavailable).  Lock currently held by process id (PID) 23281.
Oct 28 15:05:49 ppr-unt116 Oracle GoldenGate Capture for Oracle[13797]: [ID 702911 user.error] 2015-10-28 15:05:49  ERROR   OGG-01031  Oracle GoldenGate Capture for Oracle, radlkdmp.prm:  There is a problem in network communication, a remote file problem, encryption keys for target and source do not match (if using ENCRYPT) or an unknown error. (Reply received is Unable to open file "/appl/oracle/ggates/12/trail/radlk/lk000043" (error 11, Resource temporarily unavailable)).
Oct 28 15:06:03 ppr-unt116 Oracle GoldenGate Capture for Oracle[16349]: [ID 702911 user.error] 2015-10-28 15:06:03  ERROR   OGG-01454  Oracle GoldenGate Capture for Oracle, radlk.prm:  Unable to lock file "/appl/oracle/ggates/12/trail/radlk/lk000054" (error 11, Resource temporarily unavailable).  Lock currently held by process id (PID) 23281.
Oct 28 15:07:58 ppr-unt116 Oracle GoldenGate Capture for Oracle[29686]: [ID 702911 user.error] 2015-10-28 15:07:58  ERROR   OGG-01031  Oracle GoldenGate Capture for Oracle, radlkdmp.prm:  There is a problem in network communication, a remote file problem, encryption keys for target and source do not match (if using ENCRYPT) or an unknown error. (Reply received is Unable to open file "/appl/oracle/ggates/12/trail/radlk/lk000043" (error 11, Resource temporarily unavailable)).

Autre  sources:
Pour le volet  cluster
/appl/grid/11204/log/`uname  -n`/agent/crsd/scriptagent_oracle/scriptagent_oracle.log
Pour le  volet golden  gate:
$GGS_HOME/gserr.log

5         Annexe

5.1       Script  de  monitoring coté  extract :

#!/usr/bin/ksh
#set -x
DBID=RAPR
export  type=extract
export  repname=RADLK
export  GGS_HOME=/appl/oracle/ggates/12
export  ORACLE_HOME=/appl/oracle/11204
export  ORACLE_BASE=/appl/oracle
export  LD_LIBRARY_PATH=/appl/oracle/ggates/12:/appl/oracle/11204/lib
export  DIRLOG=$ORACLE_BASE/LOG
export  LOG=$DIRLOG/${DBID}GG.`date \+%Y-%m-%d_%H:%M:%S`.log
export  DIRBIN=/appl/oracle/BIN
export  GRID_HOME=/appl/grid/11204
gguser=XXXXX
ggpass=xxxxx

pgrep  mgr
if [ $? -eq 1 ]
then
echo "----------------------------------------------"
export  IP=`$GRID_HOME/bin/crsctl status res ggateapp |  grep  STATE |  awk '{print  $3}'`
export STATUS=`$GRID_HOME/bin/crsctl status res ggateapp |  grep  TARGET |  awk -F'='  '{print  $2}'`
echo $IP
echo  $STATUS
ssh  $IP $DIRBIN/gginfoall.ksh
echo "----------------------------------------------"
else
echo  "roule"
echo  "-------------------------------------------------">$LOG
echo  info  resource  cluster >>$LOG
echo  "-------------------------------------------------">>$LOG
$GRID_HOME/bin/crsctl status res ggateapp >>$LOG
$GRID_HOME/bin/crsctl status res pprgg-vip >>$LOG
$GRID_HOME/bin/crsctl status  res ora.radppr.radggatesvc.svc >>$LOG
echo  "-------------------------------------------------">>$LOG
echo  "who am i">>$LOG
echo  "-------------------------------------------------">>$LOG
$ORACLE_HOME/bin/sqlplus `/usr/bin/cat ${DIRBIN}/RADPPR_login` as sysdba <<EOF
spool  $LOG append
@$DIRBIN/who.sql
EOF
echo  "-------------------------------------------------">>$LOG
echo  info golden gate >>$LOG
echo  "-------------------------------------------------">>$LOG
PROCESSES="mgr extract"
cd  $GGS_HOME
$GGS_HOME/ggsci   <<EOF >>$LOG
dblogin  userid ${gguser}@GGATE ,password ${ggpass}
info all
info  ${repname} ,detail
info  ${repname} ,showch
lag  ${type} ${repname}
stats ${type}   ${repname}   reportrate  hr
info  rmttrail *
exit
EOF
echo  "-------------------------------------------------">>$LOG
echo  "-------------------------------------------------">>$LOG
echo  info process  et FS>>$LOG
echo  "-------------------------------------------------">>$LOG
df -h  |  grep   gg
for  GGPROC  in  $PROCESSES
do
FLAG=`ps  -ef |  grep ${GGPROC} |  grep -v  grep |   awk '{print $2}'  `
if [ `ps  -ef |  grep ${GGPROC} |grep -v grep | wc -l` -gt 3 ]
then
echo  "no golden  gate" >>$LOG
else
echo  "--------------------- $GGPROC ---------------" >>$LOG
#ps  -ef | grep  $FLAG >>$LOG
/usr/bin/pargs $FLAG >>$LOG
echo  "---------------------------------------------" >>$LOG
fi
done
echo  "-------------------------------------------------">>$LOG
echo  info table :  les  modifications, stats >>$LOG
echo  "-------------------------------------------------">>$LOG
$ORACLE_HOME/bin/sqlplus `/usr/bin/cat ${DIRBIN}/RAPR_login` as sysdba <<EOF
spool  $LOG append
@$DIRBIN/dba_tab_modification.sql
EOF
mailx  -s "GGATE PPR "  xxxxxxxx@tra.com <$LOG
find  $DIRLOG  -name ''${DBID}'GG*'  -mtime +7  -exec rm  {} \;
fi

5.2       Script  de  monitoring coté replicat :

#!/usr/bin/ksh
#set -x
DBID=RAPRLK
export  type=replicat
export  repname=RADLK
export  GGS_HOME=/appl/oracle/ggates/12
export  ORACLE_HOME=/appl/oracle/12102
export  ORACLE_BASE=/appl/oracle
export  LD_LIBRARY_PATH=/appl/oracle/ggates/12:/appl/oracle/12102/lib
export  DIRLOG=$ORACLE_BASE/LOG
export  LOG=$DIRLOG/${DBID}GG.`date \+%Y-%m-%d_%H:%M:%S`.log
export  DIRBIN=/appl/oracle/BIN
export  GRID_HOME=/appl/grid/12102
export  IP=`$GRID_HOME/bin/crsctl status res ggateapp |  grep  STATE |  awk '{print  $3}'`
export STATUS=`$GRID_HOME/bin/crsctl status res ggateapp |  grep  TARGET |  awk -F'='  '{print  $2}'`
echo $IP
echo  $STATUS
pgrep  mgr
if [ $? -eq 1 ]
then
echo "----------------------------------------------"
export  IP=`$GRID_HOME/bin/crsctl status res ggateapp |  grep  STATE |  awk '{print  $3}'`
export STATUS=`$GRID_HOME/bin/crsctl status res ggateapp |  grep  TARGET |  awk -F'='  '{print  $2}'`
echo $IP
echo  $STATUS
ssh  $IP $DIRBIN/gginfoall.ksh
echo "----------------------------------------------"
else
echo  "roule"
echo  "-------------------------------------------------">$LOG
echo  info  resource  cluster >>$LOG
echo  "-------------------------------------------------">>$LOG
$GRID_HOME/bin/crsctl status res ggateapp >>$LOG
$GRID_HOME/bin/crsctl status res pprgg-vip >>$LOG
$GRID_HOME/bin/crsctl status  res ora.radpprlk.radggatelkpprsvc.svc >>$LOG
echo  "-------------------------------------------------">>$LOG
echo  "who am i">>$LOG
echo  "-------------------------------------------------">>$LOG
$ORACLE_HOME/bin/sqlplus `/usr/bin/cat ${DIRBIN}/RAPRLK_login` as sysdba <<EOF
spool  $LOG append
@$DIRBIN/who.sql
EOF
echo  "-------------------------------------------------">>$LOG
echo  info golden gate >>$LOG
echo  "-------------------------------------------------">>$LOG
PROCESSES="mgr replicat"
$GGS_HOME/ggsci   <<EOF >>$LOG
dblogin  userid  ggate@xxxx ,password XXXXXXX
info all
info  ${repname} ,detail
info  ${repname} ,showch
lag  ${type} ${repname}
stats ${type}   ${repname}   reportrate  hr
exit
EOF
echo  "-------------------------------------------------">>$LOG
echo  "-------------------------------------------------">>$LOG
echo  "-------------------------------------------------">>$LOG
echo  info process  et FS>>$LOG
echo  "-------------------------------------------------">>$LOG
for  GGPROC  in  $PROCESSES
do
FLAG=`ps  -ef |  grep ${GGPROC} |  grep -v  grep |   awk '{print $2}'  `
if [ `ps  -ef |  grep ${GGPROC} |grep -v grep | wc -l` -gt 3 ]
then
echo  "no golden  gate" >>$LOG
else
echo  "--------------------- $GGPROC ---------------" >>$LOG
#ps  -ef | grep  $FLAG >>$LOG
/usr/bin/pargs $FLAG >>$LOG
df -h |  grep gg>>$LOG
echo  "---------------------------------------------" >>$LOG
fi
done
echo  "-------------------------------------------------">>$LOG
echo  info table :  les  modifications, stats >>$LOG
echo  "-------------------------------------------------">>$LOG
$ORACLE_HOME/bin/sqlplus `/usr/bin/cat ${DIRBIN}/RAPRLK_login` as sysdba <<EOF
spool  $LOG append
@$DIRBIN/dba_tab_modification.sql
EOF
$ORACLE_HOME/bin/sqlplus `/usr/bin/cat ${DIRBIN}/RAPRLK_login` as sysdba <<EOF
spool  $LOG append
@$DIRBIN/infosynchro.sql
EOF
mailx  -s "GGATE PPR "  xxxxxx@tra.com <$LOG
find  $DIRLOG  -name ''${DBID}'GG*'  -mtime +7  -exec rm  {} \;
fi

jeudi 29 octobre 2015

PROFILE

PROFILE

create  profile  monitoring_profile
limit
COMPOSITE_LIMIT            DEFAULT
SESSIONS_PER_USER          default
CPU_PER_SESSION            default
CPU_PER_CALL               default
LOGICAL_READS_PER_SESSION  default
LOGICAL_READS_PER_CALL     default
IDLE_TIME                  default
CONNECT_TIME               default
PRIVATE_SGA                default
FAILED_LOGIN_ATTEMPTS      default
PASSWORD_LIFE_TIME         UNLIMITED
PASSWORD_REUSE_TIME        UNLIMITED
PASSWORD_REUSE_MAX         UNLIMITED
PASSWORD_VERIFY_FUNCTION   default
PASSWORD_LOCK_TIME         UNLIMITED
PASSWORD_GRACE_TIME        UNLIMITED
;
alter  user  MG profile tbx_profile;

alter   profile DEfault   limit  PASSWORD_LIFE_TIME unlimited;

alter   profile WEB   limit IDLE_TIME unlimited;
alter  profile USER_APPLICATIF  LIMIT  PASSWORD_LOCK_TIME 1;
 alter  profile USER_APPLICATIF  LIMIT  FAILED_LOGIN_ATTEMPTS 10;

mardi 20 octobre 2015

job de statistic par defaut:

job de statistic  par defaut:
SQL>  SELECT client_name, status FROM dba_autotask_operation;

CLIENT_NAME                                                      STATUS
---------------------------------------------------------------- --------
auto optimizer stats collection                                  ENABLED
auto space advisor                                               ENABLED
sql tuning advisor                                               ENABLED

Faire  un disable

SQL> BEGIN
  DBMS_AUTO_TASK_ADMIN.disABLE(
    client_name => 'auto optimizer stats collection',
    operation => NULL,
    window_name => NULL);
END;
/    2    3    4    5    6    7

PL/SQL procedure successfully completed.

SQL> SELECT client_name, status FROM dba_autotask_operation;

CLIENT_NAME                                                      STATUS
---------------------------------------------------------------- --------
auto optimizer stats collection                                  DISABLED
auto space advisor                                               ENABLED
sql tuning advisor                                               ENABLED

lundi 19 octobre 2015

Objets en mode debug :


Objets  en   mode debug :
 select  OBJECT_NAME,OBJECT_TYPE  from  dba_objects , sys.idl_char$  where OBJECT_ID=obj#  and  part=1  and owner='MG';



mardi 15 septembre 2015

oracle golden gate : oracle to SQLSERVER


3         Buts :

Faire de  la réplication Golden  gate  entre  oracle  et  SQLserver  pour la table res_charges afin d’avoir  très simplement une  image a un temps t  pour  une  table  qui coté  oracle  fait 20G  et  124  millions de rangées.
On va commencer les  test  par  un table  relativement simple  pour  être  a l’aise puis  on  ira vers res_charges.
Le  document  est  fait  dans  l’ordre  chronologique des actions mais on  aurait pu  le  diviser  en 4 parties :
1 – system   incluant  les . profiles les  tnsnames, les  passwords, les  resource  cluster
2 – les  Sql (DDL) ,
3 – les  configurations  golden gate  incluant  le  defgen,
4 – les tests .

4         Cluster :

Notre  base  source  est  en cluster RAC  sur linux.
Un aperçu  des  ressources  cluster :
On a  2  choses  a regarder  la  vip pocrac-gg  et la  resource  ggateapp
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.LISTENER.lsnr
               ONLINE  ONLINE       pocracm1
               ONLINE  ONLINE       pocracm2
ora.POCARCH.dg
               ONLINE  ONLINE       pocracm1
               ONLINE  ONLINE       pocracm2
ora.POCDB.dg
               ONLINE  ONLINE       pocracm1
               ONLINE  ONLINE       pocracm2
ora.POCOCR.dg
               ONLINE  ONLINE       pocracm1
               ONLINE  ONLINE       pocracm2
ora.POCREDO.dg
               ONLINE  ONLINE       pocracm1
               ONLINE  ONLINE       pocracm2
ora.asm
               ONLINE  ONLINE       pocracm1                 Started
               ONLINE  ONLINE       pocracm2
ora.gsd
               OFFLINE OFFLINE      pocracm1
               OFFLINE OFFLINE      pocracm2
ora.net1.network
               ONLINE  ONLINE       pocracm1
               ONLINE  ONLINE       pocracm2
ora.ons
               ONLINE  ONLINE       pocracm1
               ONLINE  ONLINE       pocracm2
ora.registry.acfs
               ONLINE  ONLINE       pocracm1

              ONLINE  ONLINE       pocracm2
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ggateapp
      1        ONLINE  ONLINE       pocracm1
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       pocracm2
ora.LISTENER_SCAN2.lsnr
      1        ONLINE  ONLINE       pocracm1
ora.LISTENER_SCAN3.lsnr
      1        ONLINE  ONLINE       pocracm1
ora.cvu
      1        ONLINE  ONLINE       pocracm1
ora.mg.db
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.oc4j
      1        ONLINE  ONLINE       pocracm1
ora.pocracm1.vip
      1        ONLINE  ONLINE       pocracm1
ora.pocracm2.vip
      1        ONLINE  ONLINE       pocracm2
ora.pocrad.db
      1        ONLINE  ONLINE       pocracm1                 Open
      2        ONLINE  ONLINE       pocracm2                 Open
ora.pocrad.mysrvb.svc
      1        ONLINE  ONLINE       pocracm1
      2        ONLINE  ONLINE       pocracm2
ora.pocrad.ocr_srv.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.pocrad.precosrvb.svc
      1        ONLINE  ONLINE       pocracm1
ora.pocrad.precosrvb_preconnect.svc
      1        ONLINE  ONLINE       pocracm2
ora.pocrad.radairrmpocsrv.noam.transat.local.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.pocrad.radentpocsrv.noam.transat.local.svc
      1        OFFLINE OFFLINE
ora.pocrad.radffspocsrv.noam.transat.local.svc
      1        ONLINE  ONLINE       pocracm1
      2        ONLINE  ONLINE       pocracm2
ora.pocrad.radgdstapocsrv.noam.transat.local.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.pocrad.radgdstbpocsrv.noam.transat.local.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.pocrad.radtsreportingpocsrv.noam.transat.local.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.pocrad.radwebjobprdsrv.svc
      1        ONLINE  ONLINE       pocracm1
ora.pocrad.radwebjobprdsrv_preconnect.svc
      1        ONLINE  ONLINE       pocracm2
ora.pocrad.radwebpocsrv.noam.transat.local.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.pocrad.sale_ro.svc
      1        OFFLINE OFFLINE
      2        OFFLINE OFFLINE
ora.pocrad.sale_rw.svc
      1        ONLINE  ONLINE       pocracm1
ora.pocrad.sale_rw_preconnect.svc
      1        ONLINE  ONLINE       pocracm2
ora.pocrad.sqlsrv.svc
      1        ONLINE  ONLINE       pocracm1
      2        ONLINE  ONLINE       pocracm2
ora.scan1.vip
      1        ONLINE  ONLINE       pocracm2
ora.scan2.vip
      1        ONLINE  ONLINE       pocracm1
ora.scan3.vip
      1        ONLINE  ONLINE       pocracm1
pocrac-gg
      1        ONLINE  ONLINE       pocracm1

5         Choix de la table pour les premiers tests :

Pour  la   replication il est  preferable  d avoir une  clefs unique a la source  et  a la  destination.
On  veut   avoir  plusieurs  colonnes  representatives  de  la  table  RES_charge  d  ou  les  ajouts
SQL> desc MG.test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 NUMBER

SQL> alter  table  MG.test add (description varchar2(10));
SQL> alter  table  MG.test add (mdate  date);
SQL>  alter  table  MG.test  add  (idnum float(9));
SQL>  create  index MG.IND_TEST   on MG.test (id);
SQL> alter  table  mg.test  add  (constraint  PK_TEST  primary key (id)  using  index  MG.IND_TEST  enable validate);
SQL> select  *  from  MG.test;
        ID DESCRIPTIO MDATE          IDNUM
---------- ---------- --------- ----------
         1
         2
         3

6         Réinitialiser les  password de ggs_owner :

6.1       Cote  instance ORACLE POCRAD :

[pocracm1.noam.transat.local:oracle:POCRAD1:/home/oracle]#  sqlplus  / as sysdba
SQL> alter  user  ggs_owner  identified  by xxxxx;

6.2       Coté  ASM :

 [pocracm1.noam.transat.local:oracle:POCRAD1:/home/oracle]# su  -  grid
 [pocracm1.noam.transat.local:grid:\:/home/grid]#export  ORACLE_HOME=$GRID_HOME
[pocracm1.noam.transat.local:grid:\:/home/grid]# export  ORACLE_SID=+ASM1
[pocracm1.noam.transat.local:grid:\:/home/grid]#sqlplus  / as  sysasm
SQL> alter  user  ggs_owner  identified  by  xxxxx;
SQL> exit

7         Mis  a jour des .profile du user unix oracle sur les  2 nœuds :

Ajout de :
La variable  GGS_HOME : /apps/oracle/ggates/12
Mis à jour de  la variable  Path de  $GGS_HOME
Mis à jour de  LD_LIB_PATH  pour  y  inclure  $GGS_HOME/lib

8          GOLDEN GATE le  manager :

[pocracm1.noam.transat.local:oracle:POCRAD1:/home/oracle]# cd  $GGS_HOME
[pocracm1.noam.transat.local:oracle:POCRAD1:/apps/oracle/ggates/12/dirprm]# vi mgr.prm
PORT 7809
LAGREPORTMINUTES 5 -- Interval at which lag is checked
LAGINFOMINUTES 5 -- Threshold at which lag is reported
LAGCRITICALMINUTES 15 -- Critical threshold reporting value
PURGEOLDEXTRACTS /apps/oracle/ggates/12/trail/poc/wsrad/* MINKEEPHOURS 3 FREQUENCYMINUTES 20
--------------
USERID ggs_owner@GGATE, PASSWORD xxxxxxxxx

8.1       TNS  service  oracle pour  ggate :

[pocracm1.noam.transat.local:oracle:POCRAD1:/apps/oracle/11.2.0.2/network/admin]# vi tnsnames.ora
GGATE=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = poccrs.noam.transat.local)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = sale_rw.noam.transat.local)
    )
Le  service  ne  me plait   pas.

8.2       Ajout  d  un  service  pour  ggate :

 # srvctl   add  service  -d  POCRAD -s ggatesvc -r POCRAD2 -a POCRAD1
# srvctl  start  service  -d POCRAD -s ggatesvc
# srvctl  status  service  -d POCRAD -s ggatesvc
Service ggatesvc is running on instance(s) POCRAD2
Ajout du  service  au tnsnames.ora  sur les 2  noeuds
GGATE=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = poccrs.noam.transat.local)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ggatesvc.noam.transat.local)
    )
  )
 Idem  sur le  noeud 2:
[pocracm1.noam.transat.local:oracle:POCRAD1:/apps/oracle/11.2.0.2/network/admin]# ssh  pocracm2
 [pocracm2.noam.transat.local:oracle:POCRAD2:/apps/oracle/11.2.0.2/network/admin]#vi /apps/oracle/11.2.0.2/network/admin/tnsnames.ora
GGATE=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = poccrs.noam.transat.local)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ggatesvc.noam.transat.local)
    )
  )

9         Creation des extracts :

 [pocracm1.noam.transat.local:oracle:POCRAD1:/apps/oracle/ggates/12]# cd  dirprm
[pocracm1.noam.transat.local:oracle:POCRAD1:/apps/oracle/ggates/12]# ggsci
GGSCI (pocracm1.noam.transat.local) 4> dblogin  userid ggs_owner@ggate,password U1509ggspoc
GGSCI (pocracm1.noam.transat.local as ggs_owner@POCRAD2) 5> add  extract  wsggradix tranlog, threads 2 , begin now
ERROR: Invalid group name (must be at most 8 characters).
Le nom de  l extract   doit être  <8  caracteres la c est  trop  long.
GGSCI (pocracm1.noam.transat.local as ggs_owner@POCRAD2) 6> exit
On va reduire les  noms  et recommencer
 [pocracm1.noam.transat.local:oracle:POCRAD1:/apps/oracle/ggates/12]# ggsci
GGSCI (pocracm1.noam.transat.local) 1> dblogin  userid ggs_owner@ggate,password U1509ggspoc
GGSCI (pocracm1.noam.transat.local as ggs_owner@POCRAD2) 2> add  extract wsrad tranlog, threads 2 , begin now
EXTRACT added.
GGSCI (pocracm1.noam.transat.local as ggs_owner@POCRAD2) 4> add  exttrail /apps/oracle/ggates/12/trail/poc/wsrad/ws ,extract wsrad
EXTTRAIL added.
GGSCI (pocracm1.noam.transat.local as ggs_owner@POCRAD2) 5> add  extract    wsraddp, EXTTRAILSOURCE /apps/oracle/ggates/12/trail/poc/wsrad/ws
GGSCI (pocracm1.noam.transat.local as ggs_owner@POCRAD2) 6> add  rmttrail  T:\GG_Radixx\ws, extract wsraddp

10    Switch over  goldengate :

On passe de  pocracm1 a pocracm2
 /apps/grid/bin]#./crsctl   start  resource ggateapp -n pocracm2.noam.transat.local
CRS-2672: Attempting to start 'ggateapp' on 'pocracm2'
CRS-2676: Start of 'ggateapp' on 'pocracm2' succeeded

11    Start  des extract :

GGSCI (pocracm2.noam.transat.local) 2> start  extract WSRAD
J’ai   une  erreur  alors  je  vérifie la  log :
/apps/oracle/ggates/12#tail -f ggserr.log
2015-09-08 14:22:15  INFO    OGG-01851  Oracle GoldenGate Capture for Oracle, wsrad.prm:  filecaching started: thread ID: 1257642304.
2015-09-08 14:22:15  WARNING OGG-01262  Oracle GoldenGate Capture for Oracle, wsrad.prm:  The call to the ggDirIsWritable() function from line 2862 in cm_cachedir_add()s/oracle/ggates/12/dirtmp to hold temporary cachefiles does not exist or is not writable'.
 /apps/oracle/ggates/12#mkdir -p /apps/oracle/ggates/12/dirtmp
/apps/oracle/ggates/12#./ggsci
GGSCI (pocracm2.noam.transat.local) 2> start  extract  WSRAD
GGSCI (pocracm2.noam.transat.local) 4> info  all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     ABENDED     R2DTP       00:00:00      4629:56:08
EXTRACT     ABENDED     RADPPR2     00:00:00      2813:25:05
EXTRACT     RUNNING     WSRAD       00:00:00      00:22:39
EXTRACT     STOPPED     WSRADDP     00:00:00      00:17:33
GGSCI (pocracm2.noam.transat.local) 3> edit  params WSRADDP
extract wsraddp
USERID GGS_OWNER@GGATE, PASSWORD xxxxxxxxxxxx
RMTHOST ppr-mFGFGbi005, MGRPORT 7809
RMTTRAIL T:\GG_Radixx\ws
GETTRUNCATES
PASSTHRU
table MG.TEST;
GGSCI (pocracm2.noam.transat.local) 5> start   extract WSRADDP
GGSCI (pocracm2.noam.transat.local) 6> info  all
GGSCI (pocracm2.noam.transat.local as ggs_owner@POCRAD2) 2> add  trandata  MG.test

12    Test #1 : TEST

[pocracm2.noam.transat.local:oracle:POCRAD2:/apps/oracle/ggates/12]#sqlplus / as  sysdba
SQL> truncate  table  MG.test;
SQL> insert  into  MG.test values (1,null,null,null);
SQL> commit;
SQL> select  *  from  Mg.test;
SQL> insert  into   mg.test  values  (2,null,null,null);
SQL> commit;
SQL>  select  *  from  Mg.test;

13    Defgen :

Sans  le  DEFgen  on  aura  une  erreur  lors des  update, delete…
 /apps/oracle/ggates/12#mkdir /net/mtlunt48/backup/ORACLE_SW/GOLDEN_GATE/poc/dirdef
/apps/oracle/ggates/12#ln -s /net/mtlunt48/backup/ORACLE_SW/GOLDEN_GATE/poc/dirdef dirdef
/apps/oracle/ggates/12#./ggsci
GGSCI (pocracm2.noam.transat.local) 3> edit  params  defgen
defsfile /apps/oracle/ggates/12/dirdef/test.def
USERID GGS_OWNER@GGATE, PASSWORD xxxxxxxx
table MG.test
#./defgen  paramfile "/net/mtlunt48/backup/ORACLE_SW/GOLDEN_GATE/poc/dirprm/defgen.prm"
 [pocracm2.noam.transat.local:oracle:POCRAD2:/apps/oracle/ggates/12/dirdef]#ls -alrt
-rw-r-----+ 1 oracle oinstall 1417 Sep  9 09:52 test.def
Ce fichier  doit  etre  envoye sur le  serveur  target   dans  le  repertoire 
$GGS_HOME/dirdef.

14    Replicat :

Voila  la  tete  du  cote  target SQLSERVER  le  parametrage du replicat :
REPLICAT WSRAD
TARGETDB GoldenGate, USERID svcggs, PASSWORD xxxxxxxx
--ASSUMETARGETDEFS
HANDLECOLLISIONS
GETTRUNCATES
SOURCEDEFS D:\ggs_121210_Windows_x64_MSSQL_64bit\dirdef\test.def
--SOURCEDEFS D:\ggs_121210_Windows_x64_MSSQL_64bit\dirdef\GG_Radixx.def
MAP mg.test, TARGET dbo.test;
--MAP mg.res_charges, TARGET dbo.res_charges;

15    Test  #2 :

[pocracm2.noam.transat.local:oracle:POCRAD2:/apps/oracle/ggates/12]#sqlplus  / as sysdba
SQL> insert  into  MG.test values  (3,'defgen',sysdate,3.00);
SQL> commit;
SQL> select   *   from  MG.test;
SQL> update  MG.test   set  idnum=3.01  where  idnum=3.00;
SQL> commit;
SQL> truncate  table  MG.test;
SQL> insert  into  MG.test values  (3,'defgen',sysdate,3.00);
SQL> commit;
SQL> update  MG.test   set  idnum=3.01  where  id=3;
SQL> commit;
SQL> delete  MG.test  where  id=3;
SQL> commit;
SQL> insert  into  MG.test values  (3,'defgen',sysdate,3.00);
SQL> commit;
SQL> update  MG.test   set  idnum=3.01  where  idnum=3.00;
SQL> commit;
SQL> insert  into  MG.test values (1,null,sysdate,1.00);
SQL> commit;
SQL> update  MG.test   set  idnum=1.01 where  id=1;
SQL> commit;
SQL> update  MG.test   set  idnum=1.02  where  id=1;
SQL> commit;
Tout est  parfait, insert,  delete, truncate et update.

16    La  table Res_charges  volet SQL :

16.1  Ajout  du  db_link  pour res_charges  vers  radixqa :

16.1.1  Tnsnames :

Dans le  tns  je ne  montre que ce que j’ai  modifié  pour pas allonger le document
 /apps/oracle/11.2.0.2/network/admin]#vi tnsnames.ora
radqa=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = devrtt98)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = rad)
    )
  )

16.1.2  Le  DDL  du db_link :

Pas de sécurité  a ce niveau  la!
create  public  database  link res_charges
connect  to  radqa identified  by xxxxxxx  using 'radqa';
select  count(1)  from COD_MEAL_PREFERENCE@res_charges;

16.2  Création de  la table  RES_CHARGES :

SQL>create  table  mg.res_charges  as( select *  from  res_charges@res_charges  where 1=2);
SQL> CREATE UNIQUE INDEX MG.PK_RES_CHARGES ON MG.RES_CHARGES
SQL> ALTER TABLE MG.RES_CHARGES ADD (
  CONSTRAINT PK_RES_CHARGES
  PRIMARY KEY
  (RES_CHARGE_ID)
  USING INDEX MG.PK_RES_CHARGES
  ENABLE VALIDATE);

17    Ajout de  res_charges  aux  extracts :

17.1  Les  paramétrages :

GGSCI (pocracm2.noam.transat.local) 2> edit   params WSRAD
extract wsrad
USERID GGS_OWNER@GGATE, PASSWORD xxxxxxxxxxxxxxx
TRANLOGOPTIONS ASMUSER ggs_owner@ASM, ASMPASSWORD xxxxxxxxxxxxx
EXTTRAIL /apps/oracle/ggates/12/trail/poc/wsrad/ws
table MG.TEST;
table MG.RES_CHARGES;
GGSCI (pocracm2.noam.transat.local) 4> edit  params WSRADDP
extract wsraddp
USERID GGS_OWNER@GGATE, PASSWORD U1509ggspoc
RMTHOST ppr-mtlbi005, MGRPORT 7809
RMTTRAIL T:\GG_Radixx\ws
GETTRUNCATES
PASSTHRU
table MG.TEST;
table MG.RES_CHARGES;

17.2  Defgen  ajout de res_charges :

GGSCI (pocracm2.noam.transat.local) 5> edit  params  defgen
defsfile /apps/oracle/ggates/12/dirdef/wsrad.def
USERID GGS_OWNER@GGATE, PASSWORD xxxxxxxxxxxxxxx
table MG.test;
table MG.RES_CHARGES;
GGSCI (pocracm2.noam.transat.local) 6> stop extract  wsrad*
/apps/oracle/ggates/12#./defgen paramfile "/net/mtlunt48/backup/ORACLE_SW/GOLDEN_GATE/poc/dirprm/defgen.prm"

18    TEST #3  : res_charges :

SQL> insert  into mg.test  values  (2,null,null,null);
SQL> commit;
SQL> select  * from  mg.test;
SQL> insert  into MG.res_charges
 (select  *  from  res_charges@res_charges   where  rownum <10);
SQL> commit;
SQL> update MG.res_charges  set
  code_type = 'AIR_'  2   where  res_charge_id=31793715;
SQL> commit;

18.1  Add  trandata :

GGSCI (pocracm2.noam.transat.local) 1> dblogin  userid ggs_owner, password xxxxxxxxxxx
GGSCI (pocracm2.noam.transat.local as ggs_owner@POCRAD2) 3> add  trandata  MG.RES_CHARGES
GGSCI (pocracm2.noam.transat.local as ggs_owner@POCRAD2) 5> info all
GGSCI (pocracm2.noam.transat.local as ggs_owner@POCRAD2) 6> stop extract wsrad*
GGSCI (pocracm2.noam.transat.local as ggs_owner@POCRAD2) 7> alter  extract WSRAD begin  now
GGSCI (pocracm2.noam.transat.local as ggs_owner@POCRAD2) 8> alter  extract WSRADDP begin  now
GGSCI (pocracm2.noam.transat.local as ggs_owner@POCRAD2) 9> start  extract  wsrad*

18.2  Test  #3 prise 2 :

[pocracm2.noam.transat.local:oracle:POCRAD2:/apps/oracle/ggates/12]#sqlplus  / as sysdba
SQL> truncate table  Mg.res_charges;
SQL> insert  into MG.res_charges  (select  *  from  res_charges@res_charges   where  rownum <106);
SQL> commit;
SQL> update MG.res_charges  set code_type = 'AIR_'     where  res_charge_id=31793715;
SQL> commit;
SQL> select code_type from MG.res_charges  where  res_charge_id=31793715;
SQL> select  max (res_charge_id)   from  MG.res_charges;
SQL> select  count(1)  from  res_charges@res_charges   where RES_CHARGE_ID>31800248   and  RES_CHARGE_ID<31800290;
SQL> insert  into MG.res_charges  (select  * from  res_charges@res_charges   where RES_CHARGE_ID>31800248   and  RES_CHARGE_ID<31800290);
SQL> commit;
SQL> select  count(1)  from MG.res_charges;
SQL> update  MG.res_charges  set CHARGE_COMMENT='MG GG JO'  where  RES_CHARGE_ID=31793744;
SQL> commit;
SQL> delete   from  Mg.res_charges   where  RES_CHARGE_ID=31800248;
SQL> commit;
SQL> delete   from  Mg.res_charges   where  RES_CHARGE_ID=31800249;
SQL> commit;
SQL>    truncate  table Mg.res_charges;
SQL> insert  into MG.res_charges  (select  *  from  res_charges@res_charges   where  rownum <100000);
SQL> commit;

19    Conclusion:


Faut passer par  une  étape  DEFGEN   voilà  la grosse  nouveauté.