Translate

vendredi 14 juillet 2017

Resize/Add datafile/tablespace on Snapshot StandBy database ?


Vous savez que les modifications sur la base de données Primaire vont être reflétées sur la Standby lorsque de la synchronisation est activée, cependant qu'est-ce que se passe lorsque vous travaillez sur une base de données ouverte en mode Snapshot et qu'il vous reste des heures (voir des jours) de travail avant de terminer sans pouvoir réactiver le mode Physical et que vous avez besoin de modifier les datafiles ?  

Je dois avouer que je n'avais pas testé ça avant, mais dans mon cas j'ai un processus qui roule sur ma base de données Standby depuis quelques jours sans arrêt, et un de mes datafiles approche de la limite, bien évidemment je ne voulais pas tout défaire pour recommencer une autre fois, je voulais donc, tester si en modifiant directement le datafile sur ma base de données en mode Snapshot je n'aurai pas de problèmes au moment de revenir sur le mode Physical.

Ce test a été réalisé sur une petite base de données 12c configurée en DataGuard, mais ma vraie base de données a quelques Tbytes. 

Note: 
   Il faut noter que ces modifications on été apportées et testées toujours en "Snapshot Mode".



###############
### PRIMAIRE : 
###############
Voici les datafiles sur ma base de données Primaire : 

DATABASE :
==========
TABLESPACE_NAME FILE_ID FILE_NAME                                            MAXDATAF_GB   DATAF_GB    USED_GB 
--------------- ------- ---------------------------------------------------- ----------- ---------- ---------- 
SYSAUX                2 +DATINXRWMYBD/QMYBD/datafile/sysaux.257.819804995             32       2.59        2.4 
SYSTEM                1 +DATINXRWMYBD/QMYBD/datafile/system.258.819804995             32       1.55       1.54 
UNDOTBS1              3 +DATINXRWMYBD/QMYBD/datafile/undotbs1.256.819804995           32        .67        .57 
USERS                 4 +DATINXRWMYBD/QMYBD/datafile/users.260.819804995              32          0          0 
                                                                    

############### 
### STANDBY :   
############### 
                                                                  
Sur la Standby, je viens de couper la synchronisation et de passe ne mode Snapshot :
               
(1) EN MODE SNAPSHOT : 
======================                                                                            

ASM :
======                                                                                     
Type      Redund  Striped  Time             Sys  Name                                    
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    SYSAUX.271.930583965                    
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    SYSTEM.277.930584081                    
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    UNDOTBS1.272.930584035                  
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    USERS.270.930583831                     

DATABASE :
==========
DB_UNIQUE_NAME      OPEN_MODE     DATABASE_ROLE    FLASHBACK_ON
------------------- ------------- ---------------- -------------
MDBAD               READ WRITE    SNAPSHOT STANDBY YES


SHOW PARAMETER STANDBY_FILE_MANAGEMENT 
NAME                                 TYPE        VALUE                                   
------------------------------------ ----------- ------------------------------          
standby_file_management              string      AUTO                                    
 
TABLESPACE_NAME FILE_ID FILE_NAME                                            MAXDATAF_GB   DATAF_GB    USED_GB 
--------------- ------- ---------------------------------------------------- ----------- ---------- ---------- 
SYSAUX                2 +DATINXRWMYBD/MMYBD/DATAFILE/sysaux.271.930583965             32       2.59       2.39 
SYSTEM                1 +DATINXRWMYBD/MMYBD/DATAFILE/system.277.930584081             32       1.55       1.54 
UNDOTBS1              3 +DATINXRWMYBD/MMYBD/DATAFILE/undotbs1.272.930584035           32        .67        .57 
USERS                 4 +DATINXRWMYBD/MMYBD/DATAFILE/users.270.930583831              32          0          0 

ALTER DATABASE DATAFILE '+DATINXRWMYBD/MMYBD/DATAFILE/users.270.930583831' AUTOEXTEND ON NEXT 110M MAXSIZE 10G ;

TABLESPACE_NAME FILE_ID FILE_NAME                                            MAXDATAF_GB   DATAF_GB    USED_GB 
--------------- ------- ---------------------------------------------------- ----------- ---------- ---------- 
SYSAUX                2 +DATINXRWMYBD/MMYBD/DATAFILE/sysaux.271.930583965             32       2.59       2.39 
SYSTEM                1 +DATINXRWMYBD/MMYBD/DATAFILE/system.277.930584081             32       1.55       1.54 
UNDOTBS1              3 +DATINXRWMYBD/MMYBD/DATAFILE/undotbs1.272.930584035           32        .67        .57 
USERS                 4 +DATINXRWMYBD/MMYBD/DATAFILE/users.270.930583831              10          0          0 

ALTER DATABASE DATAFILE '+DATINXRWMYBD/MMYBD/DATAFILE/users.270.930583831' RESIZE 500M ;

TABLESPACE_NAME FILE_ID FILE_NAME                                            MAXDATAF_GB   DATAF_GB    USED_GB 
--------------- ------- ---------------------------------------------------- ----------- ---------- ---------- 
SYSAUX                2 +DATINXRWMYBD/MMYBD/DATAFILE/sysaux.271.930583965             32       2.59       2.39 
SYSTEM                1 +DATINXRWMYBD/MMYBD/DATAFILE/system.277.930584081             32       1.55       1.54 
UNDOTBS1              3 +DATINXRWMYBD/MMYBD/DATAFILE/undotbs1.272.930584035           32        .67        .57 
USERS                 4 +DATINXRWMYBD/MMYBD/DATAFILE/users.270.930583831              10        .49          0 

Je vais maintenant ajouter un datafile à mon Tablespace :

ALTER TABLESPACE USERS ADD DATAFILE '+DATINXRWMYBD' AUTOEXTEND ON NEXT 30M MAXSIZE 2G ;

TABLESPACE_NAME FILE_ID FILE_NAME                                            MAXDATAF_GB   DATAF_GB    USED_GB 
--------------- ------- ---------------------------------------------------- ----------- ---------- ---------- 
SYSAUX                2 +DATINXRWMYBD/MMYBD/DATAFILE/sysaux.271.930583965             32       2.59       2.39 
SYSTEM                1 +DATINXRWMYBD/MMYBD/DATAFILE/system.277.930584081             32       1.55       1.54 
UNDOTBS1              3 +DATINXRWMYBD/MMYBD/DATAFILE/undotbs1.272.930584035           32        .67        .57 
USERS                 4 +DATINXRWMYBD/MMYBD/DATAFILE/users.270.930583831              10        .49          0 
USERS                10 +DATINXRWMYBD/MMYBD/DATAFILE/users.279.949315919               2         .1          0 

Le datafile apparaît dans mon ASM :

ASM : 
======
Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    SYSAUX.271.930583965
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    SYSTEM.277.930584081
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    UNDOTBS1.272.930584035
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    USERS.270.930583831
DATAFILE  UNPROT  COARSE   JUL 09 10:00:00  Y    USERS.279.949315919


Maintenant j'ajoute une table, et je réalise quelques opérations :

DATABASE :
==========
DROP TABLE TOTO PURGE ; 
CREATE TABLE TOTO ( COL_A INTEGER) TABLESPACE USERS ; 
CREATE INDEX IDX_TOTO ON TOTO (COL_A) TABLESPACE USERS ; 

INSERT INTO TOTO (COL_A) SELECT ROWNUM R FROM DUAL CONNECT BY ROWNUM <= 1000000 ;
COMMIT ;

SELECT MAX(COL_A) FROM TOTO ; 
MAX(COL_A)
----------
  1000000

ALTER TABLE TOTO ADD (COL_B INTEGER) ; 

UPDATE TOTO SET COL_B=COL_A+1;
COMMIT ;

TABLESPACE_NAME FILE_ID FILE_NAME                                            MAXDATAF_GB   DATAF_GB    USED_GB
--------------- ------- ---------------------------------------------------- ----------- ---------- ----------
SYSAUX                2 +DATINXRWMYBD/MMYBD/DATAFILE/sysaux.271.930583965             32       2.59       2.39
SYSTEM                1 +DATINXRWMYBD/MMYBD/DATAFILE/system.277.930584081             32       1.55       1.54
UNDOTBS1              3 +DATINXRWMYBD/MMYBD/DATAFILE/undotbs1.272.930584035           32        .67        .63
USERS                 4 +DATINXRWMYBD/MMYBD/DATAFILE/users.270.930583831              10        .49        .03
USERS                10 +DATINXRWMYBD/MMYBD/DATAFILE/users.279.949315919               2         .1        .03

ALTER SYSTEM ARCHIVE LOG CURRENT ;


Je reviens sur le mode Physicai pour resynchroniser la base de données :

(2) EN MODE PHYSICAL :
======================

DATABASE :
==========
DB_UNIQUE_NAME                 OPEN_MODE            DATABASE_ROLE    FLASHBACK_ON
------------------------------ -------------------- ---------------- ------------------
MMYBD                          MOUNTED              PHYSICAL STANDBY YES

SYS@MYBD>
CLIENT_P PROCESS    SEQUENCE# STATUS
-------- --------- ---------- ------------
ARCH     ARCH            1517 CLOSING
ARCH     ARCH               0 CONNECTED
ARCH     ARCH            1514 CLOSING
ARCH     ARCH            1515 CLOSING
ARCH     ARCH            1516 CLOSING
N/A      MRP0            1518 APPLYING_LOG
ARCH     RFS                0 IDLE
LGWR     RFS             1518 IDLE
UNKNOWN  RFS                0 IDLE

LOGS             TIME                  SEQUENCE# INCARNATION# 
---------------- -------------------- ---------- ------------ 
LAST APPLIED  :  09-JUL-2017 11:01:33       1516           10 
LAST RECEIVED :  09-JUL-2017 11:01:38       1517           10 


On voit que le datafile a disparu  :

NAME       FILE#  TS# FILENAME                                              BLOCK_SIZE    SIZE_GB STATUS
---------- ----- ---- ----------------------------------------------------- ---------- ---------- -------
SYSAUX         2    1 +DATINXRWMYBD/MMYBD/DATAFILE/sysaux.271.930583965           8192       2.59 ONLINE
SYSTEM         1    0 +DATINXRWMYBD/MMYBD/DATAFILE/system.277.930584081           8192       1.55 SYSTEM
UNDOTBS1       3    2 +DATINXRWMYBD/MMYBD/DATAFILE/undotbs1.272.930584035         8192        .67 ONLINE
USERS          4    4 +DATINXRWMYBD/MMYBD/DATAFILE/users.270.930583831            8192          0 ONLINE

Au niveau de mon ASM il a aussi disparu :

ASM : 
=====
Type      Redund  Striped  Time             Sys  Name
DATAFILE  UNPROT  COARSE   JUL 09 11:00:00  Y    SYSAUX.271.930583965
DATAFILE  UNPROT  COARSE   JUL 09 11:00:00  Y    SYSTEM.277.930584081
DATAFILE  UNPROT  COARSE   JUL 09 11:00:00  Y    UNDOTBS1.272.930584035
DATAFILE  UNPROT  COARSE   JUL 09 11:00:00  Y    USERS.270.930583831


La base de données ne montre pas d'erreur lors de la synchronisation de données et tout semble correct.

Est-ce qu'on peut ajouter un tablespace sans problème?   
Selon mes essais, oui, j'en ai ajouté un sur mon Standby, j'ai créé des tables sur lui et après de réactiver la synchronisation, il disparaît et apparemment la vie continue :).