je travaille avec SQL Server, mais je dois migrer vers une application avec Oracle DB Y at-il quelque chose d'équivalent pour Oracle?
Vous pouvez utiliser Oracle Enterprise Manager pour surveiller les sessions actives, avec la requête en cours d'exécution, son plan d'exécution, ses verrous, des statistiques et même une barre de progression pour les tâches plus longues.
Voir: http://download.Oracle.com/docs/cd/B10501_01/em.920/a96674/db_admin.htm#1013955
Allez sur Instance -> sessions et regardez l'onglet SQL de chaque session.
Il y a d'autres moyens. Enterprise Manager ajoute simplement avec de jolies couleurs ce qui est déjà disponible dans les vues spéciales telles que celles décrites ici: http://www.Oracle.com/pls/db92/db92.catalog_views?remark=homepage
Et, bien sûr, vous pouvez également utiliser l'outil EXPLAIN PLAN FOR, TRACE et bien d'autres méthodes d'instrumentalisation. Le gestionnaire d'entreprise contient des rapports sur les requêtes SQL les plus coûteuses. Vous pouvez également rechercher les requêtes récentes conservées dans le cache.
J'ai trouvé une solution facile
Étape 1. se connecter à la base de données avec un utilisateur admin utilisant PLSQL ou sqldeveloper ou toute autre interface de requête
Étape 2. lancez le script ci-dessous; dans la colonne S.SQL_TEXT, vous verrez les requêtes exécutées
SELECT
S.LAST_ACTIVE_TIME,
S.MODULE,
S.SQL_FULLTEXT,
S.SQL_PROFILE,
S.EXECUTIONS,
S.LAST_LOAD_TIME,
S.PARSING_USER_ID,
S.SERVICE
FROM
SYS.V_$SQL S,
SYS.ALL_USERS U
WHERE
S.PARSING_USER_ID=U.USER_ID
AND UPPER(U.USERNAME) IN ('Oracle user name here')
ORDER BY TO_DATE(S.LAST_LOAD_TIME, 'YYYY-MM-DD/HH24:MI:SS') desc;
Le seul problème avec cela est que je ne peux pas trouver un moyen d'afficher les valeurs des paramètres d'entrée (pour les appels de fonction), mais au moins nous pouvons voir ce qui est exécuté dans Oracle et son ordre sans utiliser d'outil spécifique.
alter system set timed_statistics=true
--ou
alter session set timed_statistics=true --if want to trace your own session
- doit être assez grand:
select value from v$parameter p
where name='max_dump_file_size'
- Découvrez le sid et le numéro de série de la session qui vous intéresse:
select sid, serial# from v$session
where ...your_search_params...
--vous pouvez commencer le traçage avec l'événement 10046, le quatrième paramètre définit le niveau de trace (12 est le plus grand):
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 12, '');
end;
- désactiver le traçage avec réglage du niveau zéro:
begin
sys.dbms_system.set_ev(sid, serial#, 10046, 0, '');
end;
/ * niveaux possibles: 0 - désactivé 1 - niveau minimal. Tout comme set sql_trace = true 4 - des variables de liaison sont ajoutées au fichier de trace 8 - des attentes sont ajoutées 12 - les deux valeurs de variable de liaison et les événements d'attente sont ajoutés * /
--same si vous voulez suivre votre propre session avec un plus grand niveau:
alter session set events '10046 trace name context forever, level 12';
--éteindre:
alter session set events '10046 trace name context off';
--file avec l'information de trace brute sera localisé:
select value from v$parameter p
where name='user_dump_dest'
--name du fichier (*. trc) contiendra spid:
select p.spid from v$session s, v$process p
where s.paddr=p.addr
and ...your_search_params...
--Vous pouvez également définir le nom vous-même:
alter session set tracefile_identifier='UniqueString';
--finally, utilisez TKPROF
pour rendre le fichier de trace plus lisible:
C:\Oracle\admin\databaseSID\udump>
C:\Oracle\admin\databaseSID\udump>tkprof my_trace_file.trc output=my_file.prf
TKPROF: Release 9.2.0.1.0 - Production on Wed Sep 22 18:05:00 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
C:\Oracle\admin\databaseSID\udump>
--pour voir l'état d'utilisation du fichier de trace:
set serveroutput on size 30000;
declare
ALevel binary_integer;
begin
SYS.DBMS_SYSTEM.Read_Ev(10046, ALevel);
if ALevel = 0 then
DBMS_OUTPUT.Put_Line('sql_trace is off');
else
DBMS_OUTPUT.Put_Line('sql_trace is on');
end if;
end;
/
Juste un peu traduit http://www.sql.ru/faq/faq_topic.aspx?fid=389 Original est plus complet, mais de toute façon c'est meilleur que ce que d'autres ont posté à mon humble avis
Essayez PL/SQL Developer car il dispose d’une interface graphique conviviale avec le profileur. C'est joli Nice, essayez le procès. Je jure par cet outil lorsque je travaille sur des bases de données Oracle.
http://www.allroundautomations.com/plsqldev.html?gclid=CM6pz8e04p0CFQjyDAodNXqPDw
Il s’agit d’un outil pour Oracle permettant de capturer des requêtes exécutées de manière similaire à SQL Server Profiler. Outil indispensable pour la maintenance des applications utilisant ce serveur de base de données.
vous pouvez le télécharger sur le site officiel iacosoft.com
Vu que je viens de voter une question récente comme un duplicata et indiqué dans cette direction. . .
Quelques autres - en SQL * Plus - SET AUTOTRACE ON - donneront un plan explicite et des statistiques pour chaque instruction exécutée.
TOAD permet également le profilage côté client.
L'inconvénient de ces deux méthodes est qu'elles ne vous indiquent que le plan d'exécution de l'instruction, mais pas la manière dont l'optimiseur est arrivé à ce plan - pour cela, vous aurez besoin d'un traçage côté serveur inférieur.
Les instantanés de Statspack sont un autre élément important à comprendre. Ils constituent un bon moyen d’analyser les performances de la base de données dans son ensemble. Le plan d’explication, etc., permet de trouver des instructions SQL individuelles constituant des goulots d’étranglement. Statspack sait bien que votre problème est qu’une simple déclaration avec un bon plan d’exécution est appelée 1 million de fois en une minute.
essayez ceci (c'est également gratuit): http://www.aboves.com/Statement_Tracer_for_Oracle.exe
La capture est une capture de tous les SQL exécutés entre deux instants. Comme le fait SQL Server.
Dans certaines situations, il est utile de capturer le code SQL qu'un utilisateur particulier exécute dans la base de données. Habituellement, vous activerez simplement le suivi de session pour cet utilisateur, mais cette approche présente deux problèmes potentiels.
Une solution simple et rapide au problème consiste à capturer toutes les instructions SQL exécutées entre deux instants.
La procédure suivante créera deux tables, chacune contenant un instantané de la base de données à un moment donné. Les tables seront ensuite interrogées pour produire une liste de tous les SQL exécutés au cours de cette période.
Si possible, utilisez un système de développement silencieux, sinon vous risquez de récupérer trop de données.
Prenez le premier instantané Exécutez le SQL suivant pour créer le premier instantané:
create table sql_exec_before as
select executions,hash_value
from v$sqlarea
/
Demandez à l'utilisateur d'effectuer sa tâche dans l'application.
Prenez le deuxième instantané.
create table sql_exec_after as
select executions, hash_value
from v$sqlarea
/
Vérifiez les résultats Maintenant que vous avez capturé le code SQL, il est temps d'interroger les résultats.
Cette première requête listera tous les hachages de requêtes exécutés:
select aft.hash_value
from sql_exec_after aft
left outer join sql_exec_before bef
on aft.hash_value = bef.hash_value
where aft.executions > bef.executions
or bef.executions is null;
/
Celui-ci affichera le hachage et le code SQL lui-même: Set pages 999 lignes 100 Break on hash_value
select hash_value, sql_text
from v$sqltext
where hash_value in (
select aft.hash_value
from sql_exec_after aft
left outer join sql_exec_before bef
on aft.hash_value = bef.hash_value
where aft.executions > bef.executions
or bef.executions is null;
)
order by
hash_value, piece
/
5 . Ranger N'oubliez pas de supprimer les tables d'instantanés une fois que vous avez terminé:
drop table sql_exec_before
/
drop table sql_exec_after
/
Il existe un outil commercial FlexTracer qui peut être utilisé pour suivre les requêtes Oracle SQL
Oracle, ainsi que d'autres bases de données, analyse une requête donnée pour créer un plan d'exécution. Ce plan est le moyen le plus efficace de récupérer les données.
Oracle fournit l'instruction 'explain plan
' qui analyse la requête mais ne l'exécute pas, mais remplit une table spéciale que vous pouvez interroger (la table de plan).
La syntaxe (version simple, il existe d'autres options telles que marquer les lignes dans la table de plan avec un ID spécial ou utiliser une table de plan différente) est la suivante:
explain plan for <sql query>
L'analyse de ces données est laissée à une autre question, ou à vos recherches ultérieures.
Ceci est une documentation Oracle expliquant comment tracer des requêtes SQL, y compris quelques outils (SQL Trace et tkprof)
Apparemment, il n'y a pas de petit utilitaire simple et peu coûteux qui aiderait à accomplir cette tâche. Il existe cependant 101 façons de le faire de manière compliquée et peu pratique.
L'article suivant en décrit plusieurs. Il en existe probablement des dizaines d'autres ... http://www.petefinnigan.com/ramblings/how_to_set_trace.htm