Dix étapes Dafa après --DBA comment localiser rapidement la base de données de défaut rencontré

contour

Plusieurs fois aussi longtemps que l'application d'un problème, peu importe quand, peu importe où, DBA toujours le premier a reçu un appel téléphonique, les cas graves sera une bombe téléphonique.

Rencontrés ces problèmes, la première est la mentalité, ne doit pas paniquer, être calme, audacieux mais prudent, tandis que l'autre est une des idées d'aide au diagnostic très importants et des scripts, présente aujourd'hui l'idée d'une rencontre des problèmes de traitement général lors du partage utilisé certains des scripts, pour aider à localiser rapidement et de résoudre les problèmes, réduire les événements d'interruption d'activité.

1, voir le système d'exploitation charge

Est monté dans le serveur de base de données, le premier est à travers l'unité centrale de confirmation de commande du système, de la mémoire E / S est anormale, la commande de chaque système est différent, un sommet commun, Topas, vmstat, iostat.

2, afficher les événements d'attente

Voir l'activité en attendant l'événement, qui est le contrôle, l'inspection, le moyen le plus de base de diagnostic base de données, habituellement 81% des problèmes peuvent être la cause par une période initiale d'attente d'un événement, il est la manifestation la plus directe de l'opération de la base de données, le script suivant est de regarder chaque le nombre d'événements d'attente, attendre longtemps, côte à côte, en plus de certains événements d'attente IDLE commune

événement col pour A45 SELECT INST_ID, EVENT, SUM (DECODE (WAIT_TIME, 0, 0, 1)) "Précédent", SUM (DECODE (WAIT_TIME, 0, 1, 0)) "Curr", COUNT (*) "Tot", somme (SECONDS_IN_WAIT ) SECONDS_IN_WAIT DE GV $ SESSION_WAIT OU PAS événement IN ( 'smon timer', 'pmon timer', 'SGBDR un message ipc', 'message SQL * Net du client', 'GCS de message à distance') ET événement NOT LIKE '% idle%' ET événement NOT LIKE '% Idle%' ET événement NOT LIKE '% Streams AQ%' GROUP BY INST_ID, EVENT ORDER BY 1,5 desc;

Ici, il est nécessaire d'avoir une cause commune attente anormale pour un événement, et la formation d'un réflexe conditionné, comme le verrouillage du cache bibliothèque, lu par d'autres session, verrouillage du cache de ligne, tampon d'attente occupé, verrouillage: piscine partagée, gc tampon occupé, curseur: broche S sur X , chemin lecture directe, la synchronisation du fichier journal, enq: TX - contention d'index, PX Deq crédit: blkd, verrou libre, enq: TX - row lock contention, etc., si le nombre d'événements anormaux et d'attendre le temps d'attente est longue, l'entrée est sur l'enquête et les raisons ici.

3, en fonction de la session d'examen attend un événement

Après avoir attendu un événement pour obtenir une exception, nous attendrons l'événement pour vérifier la session en fonction des détails, qui est, pour voir quelles sessions pour effectuer ce que SQL est en attente, et vérifiez également le nom d'utilisateur et nom de la machine, et si elle est bloquée. En outre le script peut être réécrite comme suit selon session de recherche de l'utilisateur, etc., selon la vérification session de SQL_ID.

SELECT / * + règle * / sid, s.serial #, SPID, événement, sql_id, seconds_in_wait ws, row_wait_obj # obj, s.username, s.machine, BLOCKING_INSTANCE || '' || blocking_session b_sess DE de v $ session, v processus $ p OÙ événement = '& event_name' ET s.paddr = ordre p.addr par 6;

4, interroger un détails de la session

Après avoir obtenu une liste de conversations, les détails d'une conversation peut être basée sur la requête SQL suivante, comme la dernière exécution de SQL_ID, le temps de connexion, qui peut être réécrite en plusieurs SQL.

SELECT S.sid, s.serial #, SPID, événement, sql_id, PREV_SQL_ID, seconds_in_wait ws, row_wait_obj # obj, s.username, s.machine, module, blocking_session b_sess, logon_time DE de v $ session, v processus $ p Où sid = '& sid' ET s.paddr = p.addr;

5, les informations d'objet de requête

Les détails peuvent être de l'objet ID de la session d'attendre les deux précédents SQL, vous pouvez par objet de requête SQL

col OBJECT_NAME pour A30 sélectionnez propriétaire, object_name, subobject_name, object_type de dba_objects où object_id = & oid;

6, la requête SQL

Selon SQL_ID, la déclaration de hash_value SQL. Si v SQLAREA de $ dans la recherche, vous pouvez essayer DBA_HIST_SQLTEXT requête de vue.

sélectionnez sql_id, SQL_fullTEXT de SQLAREA v $ où (sql_id = '& SQLID' ou hash_value = to_number ( '& hashvale')) et rownum < 2

7, session de requête d'obstruction

Par la requête SQL après une session bloquer un certain nombre de sessions.

select count (*), blocking_session de v $ session où blocking_session est non nulle par groupe blocking_session;

8, interroger la base de données de verrouillage

Une séance de requête de verrouillage par SQL, il était ce que TM, serrures TX, et verrouille la session associée à la requête et le SQL, attention application désignée ici SQL ctime plus de 100 secondes, 30% des cas de blocage de la table d'erreur humaine, conduit à bloqué et ne peut fonctionner.

- Recherche d'un verrou de la session sélectionner / * + règle * / SESSION_ID, OBJECT_ID, ORACLE_USERNAME, OS_USER_NAME, PROCESSUS, LOCKED_MODE à partir gv $ locked_object où session_id = & sid; - Query TM, TX verrouillage sélectionner / * + règle * / * de v $ lock où ctime > 100 et du type dans ( 'TX', 'TM') afin de 3,9; - Verrouiller la base de données de requête sélectionnez /*+rule*/s.sid,p.spid,l.type,round(max(l.ctime)/60,0) lock_min, s.sql_id, s.username, b.owner, b.object_type, b.object_name de v verrouillage $ processus de $ de session, v p, v $ l, v $ locked_object o, DBA_OBJECTS b où o.SESSION_ID = S.sid et S.sid = l.sid et o.OBJECT_ID = b.OBJECT_ID et s.paddr = p.addr et l.ctime > 100 et dans l.type ( 'TX', 'TM', 'FB') par groupe S.sid, p.spid, l.type, s.sql_id, s.username, b.owner, b.object_type, b.object_name par ordre 9,1,3

9, séance kill

En règle générale, après une période initiale de questions afin de rétablir rapidement le service, vous devez tuer quelques séances, en lot particulier tuer une session, parfois tuer directement tous LOCAL = NO dans le processus, assurez-vous de vérifier que, lorsque la session mise au rebut, plus ne peut être exécuté sur d'autres noeuds ou d'autres serveurs.

ligne série 199 col format de l'événement A35 - tuer un SID de la session SELECT / * + règle * / sid, s.serial #, 'kill -9' || SPID, événement, blocking_session b_sess DE v processus, v $ de session $ p où sid = '& sid' ET s.paddr = ordre p.addr par 1; - D'après la session kill SQL_ID SELECT / * + règle * / sid, s.serial #, 'kill -9' || SPID, événement, blocking_session b_sess DE v processus, v $ de session $ p où sql_id = '& sql_id' ET s.paddr = ordre de p.addr par 1; - D'après la session en attendant l'événement pour tuer SELECT / * + règle * / sid, s.serial #, 'kill -9' || SPID, événement, blocking_session b_sess DE de v $ session, v processus $ p où l'événement = '& événement' ET s.paddr = ordre p.addr par 1; - Tuer la session utilisateur SELECT / * + règle * / sid, s.serial #, 'kill -9' || SPID, événement, blocking_session b_sess DE de v $ session, v $ process p où le nom d'utilisateur = '& username' ET s.paddr = ordre p.addr par 1; --kill tout processus local = NO ps -ef | grep LOCAL = NO | grep $ ORACLE_SID | grep -v grep | awk '{print $ 2}' | xargs kill -9

10, redémarrez Dafa

Si vous avez besoin de modifier les paramètres statiques, tels que des problèmes de mémoire, nécessaire de redémarrer la base de données, ne sont pas Sike cause du problème à l'heure actuelle, la recherche, notre priorité est de rétablir l'entreprise.

tail -f alert_.log alter point de contrôle du système; alter log commutateur système; arrêt immédiat; démarrage

Ce sont les problèmes rencontrés une base de données de script utilisé, en particulier, la réponse de l'application lente, le cas de la carte, a également recommandé au script d'abord, puis utiliser assez familier, vous pouvez également réécrire en fonction de leur propre environnement. Devops et plus tard partageront les aspects DBA plus de contenu, des amis intéressés peuvent regarder -

Ali 20 milliards d'investissement, bonjour voyage ce « cheval noir » est de savoir comment Trempé?
Précédent
Laissez en attente d'arrêt Ma, prendre l'initiative de serrer la main, qui sont-ils exactement?
Prochain
mécanisme WAL pour expliquer la base de données MySQL - pour écrire le journal, le disque d'écriture
Fonctionnaire + rédacteur de carrière ! Le dernier recrutement de milliers de personnes du Hebei, dépêchez-vous de vous inscrire
Pour éviter les abus de cette technologie
Pour étudier le sous-jacent de stockage de base de données Oracle --- ordre des octets et jeu de caractères
Juin 70 ville prix des maisons sont sortis, nous avons trouvé trois réalité brutale
10 jours, trois jeunes médecins mort subite, la raison est triste .......
Détaillée gestion de l'espace de table de base de données MySQL - espace de table partagé et l'espace table séparée
Ho jeter 2,9 milliards, l'ambition ne produit finalement exposé
Basé sur la même plate-forme avec la prochaine version de la base de données Linux RMAN différente migration de machine (Partie II)
Shenzhen prix des logements ont « disparu » cache quelque chose
De blog à écrire actions cotées A, soutenu par les recettes Jingdong Ali a insisté pour que la société quoi?
Basé sur la même plate-forme avec la prochaine version de la base de données Linux RMAN différente migration de machine (première partie)