Compatibilité Dataguard Logique en 10gR2

dataguard Ajouter un 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…

Faire un commentaire