Attention au Real Time Query !!!! by albanlepunk

Administration Oracle, dataguard pas de Commentaire »

Comment se prémunir d’un passage non souhaité en Real Time Query.

Comme vous le savez, dans une configuration Dataguard, il est possible de faire de la consultation “temps réel”!
C’est à dire que la base applique les redologs qu’elle reçoit de sa base primaire tout en étant ouverte en lecture seule.
C’est un Option de l’Enterprise Edition : Le Real Time Query.

Seulement lorsque votre serveur va redémarer, si vous n’avez pas géré ce cas particulier dans votre script de redémarrage,
votre base standby va démarrer en startup normal et se mettre par défaut dans le mode Real Time Query.

SQL> SELECT open_mode FROM   V$DATABASE;

READ ONLY WITH APPLY

Comment faire pour ne pas utiliser malgré soi cette option payante?

il faut positionner (comme souvent) un paramètre caché : ‘_query_on_physical’
Il va nous prémunir d’un démarrage en mode Real Time Query en renvoyant une erreur “ORA-16669 : instance cannot be opened because the Active Data Guard option is disabled.”
Mais on pourra toujours ouvrir la base en lecture seule manuellement.

SQL> alter system set “_query_on_physical”=false scope=spfile;

System altered.

SQL> shutdown immediate
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area  812529152 bytes

Fixed Size                  2264280 bytes

Variable Size             960781800 bytes

Database Buffers           54654432 bytes

Redo Buffers                3498640 bytes
Database mounted.
ORA-16669: instance cannot be opened because the Active Data Guard option is
disabled

SQL> alter database open read only;

Database altered.

SQL> select open_mode from v$database;

OPEN_MODE
——————–
READ ONLY

On est donc sûr de ne pas utiliser cette option malencontreusement!!!

Compatibilité Dataguard Logique en 10gR2

dataguard pas de Commentaire »

Avant de se lancer dans l’entreprise de mettre en place un dataguard, il est judicieux de vérifier si vos applications le supportent !

En effet Quelques fonctionnalités et types de données ne sont pas supportés par un Dataguard Logique (LOGICAL STANDBY DATABASE).

Principalement :

  • un certain nombre de types de données un peu ‘exotiques’
  • les segments compressés
  • certains packages standards (supplied packages)

En détail ca nous donne :

DATATYPES non supportés
BFILE
Collections : VARRAYS , NESTED TABLE
Encrypted columns
spatial : SDO_%
media : ORD%
still images : SI_%
ROWID, UROWID
User-defined types : TYPE
XMLType

SUPPLIED PACKAGES non supportés
DBMS_JAVA, DBMS_REGISTRY,DBMS_ALERT, DBMS_SPACE_ADMIN, DBMS_REFRESH,
DBMS_REDEFINITION, DBMS_SCHEDULER, et DBMS_AQ.

Voici de petits scripts qui permettent de générer un rapport sur la compatibilité de votre base de données avec une STandby database logique. Ils recherchent les schémas et/ou objets qui peuvent poser problème :

Prompt Schemas internes non supportés
SELECT OWNER FROM DBA_LOGSTDBY_SKIP
WHERE STATEMENT_OPT = ‘INTERNAL SCHEMA’
/

PROMPT “Nested Tables”
SELECT owner, table_name
FROM DBA_NESTED_TABLES
WHERE OWNER NOT LIKE ‘%SYS%’
ORDER by 1,2
/

PROMPT “Types non supportés”
SELECT OWNER,TABLE_NAME,COLUMN_NAME, DATA_TYPE
FROM DBA_TAB_COLUMNS
WHERE DATA_TYPE NOT IN
(
‘BINARY_DOUBLE’,
‘BINARY_FLOAT’,
‘BLOB’,
‘CHAR’,
‘CLOB’,
‘NCLOB’,
‘DATE’,
‘INTERVAL YEAR TO MONTH’,
‘INTERVAL DAY TO SECOND’,
‘LONG’,
‘LONG RAW’,
‘NCHAR’,
‘NUMBER’,
‘FLOAT’,
‘INTEGER’,
‘NVARCHAR2′,
‘RAW’,
‘VARCHAR2′,
‘VARCHAR’,
‘UNDEFINED’
)
AND DATA_TYPE NOT LIKE ‘TIMESTAMP%’
AND OWNER NOT LIKE ‘%SYS%’
AND OWNER <> ‘XDB’
ORDER BY 1,2,3
/

PROMPT “Segments compressés”
SELECT OWNER, TABLE_NAME
FROM DBA_TABLES
WHERE COMPRESSION=’ENABLED’
/

PROMPT Table sans identifiant unique
SELECT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_NOT_UNIQUE
WHERE (OWNER, TABLE_NAME) NOT IN
(SELECT DISTINCT OWNER, TABLE_NAME FROM DBA_LOGSTDBY_UNSUPPORTED)
AND BAD_COLUMN = ‘Y’
/

Rem : on pourrait utiliser une vue du dictionnaire apparemment faite pour ca : DBA_LOGSTDBY_UNSUPPORTED mais cette vue mélange “segment compression” et data type non supportés, et donne d’après ce que j’ai pu tester des résultats incomplets…
PROMPT “Rapport générique

SQL non supporté

Un certain nombre d’ordres SQL ne son pas répliqués sur la base STANDBY (Skipped SQL) :

ALTER DATABASE
ALTER MATERIALIZED VIEW
ALTER MATERIALIZED VIEW LOG
ALTER SESSION
ALTER SYSTEM
CREATE CONTROL FILE
CREATE DATABASE
CREATE DATABASE LINK
CREATE PFILE FROM SPFILE
CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW LOG
CREATE SCHEMA AUTHORIZATION
CREATE SPFILE FROM PFILE
DROP DATABASE LINK
DROP MATERIALIZED VIEW
DROP MATERIALIZED VIEW LOG
EXPLAIN
LOCK TABLE
SET CONSTRAINTS
SET ROLE
SET TRANSACTION

La plupart n’ont rien à faire dans une application standard et ne devraient donc pas poser de problème.

Attention !

on portera une attention particulière à l’instruction ‘ ALTER SESSION’ souvent utilisée soit pour changer l’identité d’un user applicatif, ou pour positionner des paramètres NLS et ainsi paramétrer les dates, langues et autres monnaies (NLS_DATE, NLS_LANGUAGE, NLS_CURRENCY, …).

Vérifiez bien que vos applicatifs n’utilisent pas cette instruction pour changer de contexte au démarrage…