web-dev-qa-db-fra.com

Le basculement de la RAC Oracle ne fonctionne pas correctement

J'ai Oracle 11Gr2 mis en place sur un environnement RAC avec deux nœuds. J'ai la scan établie, par exemple: j'ai deux entrées sur le fichier DNS configuré pour que je puisse ping le nom de numérisation et atteindre l'un ou l'autre noeud. Je peux aussi ping tous les deux -vip adresses.

En théorie, la nouvelle fonctionnalité de numérisation doit fournir une fonctionnalité améliorée sur le basculement de l'application transparent (TAF), qui nécessitait une configuration supplémentaire dans chaque client. Avec Scan, je peux simplement vous connecter à l'adresse de numérisation et je devrais pouvoir:

  1. Connectez-vous à la base de données et vérifiez quelle instance je suis connectée à, par exemple (sur SQL * Plus):

    select instance_name, Host_name from v$instance;
    
  2. Arrêtez l'instance que je suis connectée à l'aide de shutdown abort (dans une session séparée)

  3. Dans la même session, où j'ai effectué l'étape 1, si je réécrivez la même instruction select, il doit automatiquement rebondir au nœud survivant.

Au lieu de cela, je reçois:

ORA-03113: end-of-file on communication channel
Process ID: XXXXX
Session ID: YYY Serial number: ZZ

Que se passe-t-il?

Remarque: Après l'étape 2, je peux quitter SQL * Plus et reconnecter tout simplement bien. Cela ne fonctionnera tout simplement pas si j'essaie de rester à la même session.


Si je modifie les Tnsnames.ora dans le client à quelque chose comme:

RAC =
  (DESCRIPTION =
    (LOAD_BALANCE = YES)
    (ADDRESS = (PROTOCOL = TCP)(Host = cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
      (FAILOVER_MODE =
       (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5)
       )
    )
  )

Ensuite, cela fonctionne comme je m'attends. Et c'est ce qui devait être fait avant 11gr2, mais Scan est censé gérer tout cela automatiquement, donc une simple entrée comme:

RAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(Host = cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

Devrait fonctionner exactement de la même manière.

5

Le balayage est censé vous donner un basculement de connexion, mais pas le basculement de temps d'exécution (comme TAF). Où avez-vous obtenu les informations (MISS) que Scan signifie également TAF?

7
Uwe Hesse

La numérisation n'est pas directement liée à un "meilleur basculement", la seule différence est que vous ne devez pas spécifier plusieurs entrées Host=, car elle ajoute toutes les adresses situées derrière le nom à la liste des hôtes. Ce n'est donc que pour une gestion plus facile (essentiellement en utilisant DNS comme répertoire de services).

Si vous voulez TAF, vous devez configurer cela en plus de numériser. La bonne chose est que vous pouvez configurer cela sur le service. Vous n'avez donc pas besoin de modifier vos chaînes de connexion.

DBMS_SERVICE.CREATE_SERVICE() Spécifiquement a failover_type=BASIC, failover_retries=100, failover_delay=5 Paramètres.

0
eckes