Oracle 11g之LogMiner常用案例
1 LogMiner 案例 Enable Supplemental Logging Extract a LogMiner Dictionary(unless you plan to use the online catalog) Specify Redo Log Files for Analysis Start LogMiner Query V$LOGMNR_CONTENTS End the LogMiner Session 1.1 显式指定重做日志文
1 LogMiner案例
Enable Supplemental Logging
Extract a LogMiner Dictionary(unless you plan to use the online catalog)
Specify Redo Log Files for Analysis
Start LogMiner
Query V$LOGMNR_CONTENTS
End the LogMiner Session
1.1 显式指定重做日志文件的LogMiner实例
本节内容必须开启最小补充日志:
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;Copier après la connexion另外有些实例用到日期格式,这里事先设置日期格式:
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'dd-mon-yyyy hh24:mi:ss';Copier après la connexion
1.1.1 查询最新归档重做文件中所有的更改操作
最简单的检查数据库的修改历史是在源数据库中使用在线联机日志来解析重做日志文件,本节案例找出了数据库生成的最后的归档日志中的所有的修改操作(假定该数据不是RAC数据库)。
1.查找最新归档的重作日志。
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE FIRST_TIME = (SELECT MAX(FIRST_TIME) FROM V$ARCHIVED_LOG);Copier après la connexionCopier après la connexion
2.添加重做日志文件
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE( - LOGFILENAME => '/usr/oracle/data/db1arch_1_16_482701534.dbf', - OPTIONS => DBMS_LOGMNR.NEW);Copier après la connexion
3.开始分析
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR( - OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);Copier après la connexion
4.查询结果
SQL> SELECT username AS USR, (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) AS XID, SQL_REDO, SQL_UNDO FROM V$LOGMNR_CONTENTS WHERE username IN ('HR', 'OE');Copier après la connexion
5.关闭LogMiner会话
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR();Copier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexion
1.1.2 查询提交事务中的DML语句
如上节所示,默认情况下LogMiner显示重做日志文件中所有的修改操作,不管事务是否提交,由上节查询结果可知属于同一事务DML语句没有罗列在一起,查询结果不那么易读。虽然可以使用SQL来控制想要的输出结果,但是LogMiner提供了一个更简单的方法。在这个例子中,最新的归档重做日志文件将再次被分析,但它将只返回提交的事务。
除了分析步骤,其他步骤与上节完全一样,分析语句如下:
SQL>EXECUTE DBMS_LOGMNR.START_LOGMNR( - OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + - DBMS_LOGMNR.COMMITTED_DATA_ONLY);Copier après la connexion
1.1.3 重构SQL语句
如果想输出的结果更为直观易读,可以通过指定PRINT_PRETTY_SQL参数来美化输出结果。
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(- OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + - DBMS_LOGMNR.COMMITTED_DATA_ONLY + - DBMS_LOGMNR.PRINT_PRETTY_SQL);Copier après la connexionCopier après la connexion
1.1.4 使用重作日志文件中的LogMiner字典
当LogMiner字典存于在线联机日志文件中,必须在源数据库分析重做日志文件,而当LogMiner字典存于重作日志文件中,就可以在不同的数据库分析重做日志文件。
1.查找最新归档的重作日志。
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE FIRST_TIME = (SELECT MAX(FIRST_TIME) FROM V$ARCHIVED_LOG);Copier après la connexionCopier après la connexion
2.查找包含字典的重做日志文件
- 查找包含字典提取结束的重做日志文件
SQL> SELECT NAME, SEQUENCE#, DICTIONARY_BEGIN d_beg, DICTIONARY_END d_end FROM V$ARCHIVED_LOG WHERE SEQUENCE# = (SELECT MAX (SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DICTIONARY_END = 'YES' and SEQUENCE# <p></p>Copier après la connexion
- 查找包含字典提取开始的重做日志文件
SQL> SELECT NAME, SEQUENCE#, DICTIONARY_BEGIN d_beg, DICTIONARY_END d_end FROM V$ARCHIVED_LOG WHERE SEQUENCE# = (SELECT MAX (SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN = 'YES' and SEQUENCE# <p></p>Copier après la connexion
- 添加重做日志文件
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(- LOGFILENAME => '/usr/oracle/data/db1arch_1_210_482701534.dbf', - OPTIONS => DBMS_LOGMNR.NEW); SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(- LOGFILENAME => '/usr/oracle/data/db1arch_1_208_482701534.dbf'); SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE(- LOGFILENAME => '/usr/oracle/data/db1arch_1_207_482701534.dbf');Copier après la connexion
- 通过V$LOGMNR_LOGS查询重做日志文件分析列表
SQL> SELECT FILENAME AS name, LOW_TIME, HIGH_TIME FROM V$LOGMNR_LOGS;Copier après la connexion
3.开始分析
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(- OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + - DBMS_LOGMNR.COMMITTED_DATA_ONLY + - DBMS_LOGMNR.PRINT_PRETTY_SQL);Copier après la connexionCopier après la connexion
4.查询分析结果
SQL> SELECT USERNAME AS usr, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE SEG_OWNER IS NULL OR SEG_OWNER NOT IN ('SYS', 'SYSTEM') AND TIMESTAMP > '10-jan-2003 15:59:53';Copier après la connexion
5.关闭LogMiner会话
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR();Copier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexion
1.1.5 跟踪内部字典的DDL语句
其他步骤与上节相同,唯一不同的事步骤3开始分析,如下:
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(- OPTIONS => DBMS_LOGMNR.DICT_FROM_REDO_LOGS + - DBMS_LOGMNR.DDL_DICT_TRACKING + - DBMS_LOGMNR.COMMITTED_DATA_ONLY + - DBMS_LOGMNR.PRINT_PRETTY_SQL);Copier après la connexion
1.1.6 通过时间范围过滤输出
前面的例子中都是通过查询分析结果的时间限定的SQL子句来过滤输出结果,然而有一个更高效的方法来达到这个目的,这就是通过指定DBMS_LOGMNR.START_LOGMNR的时间范围。
1.创建重做日志列表
-- -- my_add_logfiles -- Add all archived logs generated after a specified start_time. -- CREATE OR REPLACE PROCEDURE my_add_logfiles (in_start_time IN DATE) AS CURSOR c_log IS SELECT NAME FROM V$ARCHIVED_LOG WHERE FIRST_TIME >= in_start_time; count pls_integer := 0; my_option pls_integer := DBMS_LOGMNR.NEW; BEGIN FOR c_log_rec IN c_log LOOP DBMS_LOGMNR.ADD_LOGFILE(LOGFILENAME => c_log_rec.name, OPTIONS => my_option); my_option := DBMS_LOGMNR.ADDFILE; DBMS_OUTPUT.PUT_LINE('Added logfile ' || c_log_rec.name); END LOOP; END; / EXECUTE my_add_logfiles(in_start_time => '13-jan-2003 14:00:00');Copier après la connexion
2.查询V$LOGMNR_LOGS确定重做日志文件列表
SQL> SELECT FILENAME name, LOW_TIME start_time, FILESIZE bytes FROM V$LOGMNR_LOGS;Copier après la connexion
3.调整重做日志列表
假定要分析的时产生于3 p.m.到4 p.m的重做日志文件:
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(- STARTTIME => '13-jan-2003 15:00:00', - ENDTIME => '13-jan-2003 16:00:00', - OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + - DBMS_LOGMNR.COMMITTED_DATA_ONLY + - DBMS_LOGMNR.PRINT_PRETTY_SQL);Copier après la connexion
4.查询V$LOGMNR_CONTENTS
SQL> SELECT TIMESTAMP, (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) AS XID, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE SEG_OWNER = 'OE';Copier après la connexion
5.关闭LogMiner会话
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR();Copier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexion
1.2 未指定重做日志文件列表的LogMiner实例
上一节的诸多实例都是显式指定要分析的重做日志文件或者归档文件,但是,对于同一数据库生成的重做日志文件,可以通过指定时间或者SCN范围来确定要分析的重做日志列表,这个可以通过使用DBMS_LOGMNR.START_LOGMNR过程的DBMS_LOGMNR.CONTINUOUS_MINE来完成。
1.2.1 在给定的时间范围内分析重做日志
1.确定包含数据字典起始的重做日志文件时间戳
SQL> SELECT NAME, FIRST_TIME FROM V$ARCHIVED_LOG WHERE SEQUENCE# = (SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN = 'YES');Copier après la connexion
2.查出该时间戳到现在所有的重做日志
该步骤不是必须的,但是它可以用来证明CONTINUOUS_MINE是按预期来进行的,用来步骤4作对比。
SQL> SELECT FILENAME name FROM V$LOGMNR_LOGS WHERE LOW_TIME > '10-jan-2003 12:01:34';Copier après la connexion
3.开始分析
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(- STARTTIME => '10-jan-2003 12:01:34', - ENDTIME => SYSDATE, - OPTIONS => DBMS_LOGMNR.DICT_FROM_REDO_LOGS + - DBMS_LOGMNR.COMMITTED_DATA_ONLY + - DBMS_LOGMNR.PRINT_PRETTY_SQL + - DBMS_LOGMNR.CONTINUOUS_MINE);Copier après la connexion
4.查询V$LOGMNR_LOGS
该步骤用来显示带有CONTINUOUS_MINE参数的DBMS_LOGMNR.START_LOGMNR过程所执行的所有的重做日志文件,参见步骤2.
SQL> SELECT FILENAME name FROM V$LOGMNR_LOGS;Copier après la connexion
5.查询V$LOGMNR_CONTENTS
SQL> SELECT USERNAME AS usr,(XIDUSN || '.' || XIDSLT || '.' || XIDSQN) as XID, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE SEG_OWNER IS NULL OR SEG_OWNER NOT IN ('SYS', 'SYSTEM') AND TIMESTAMP > '10-jan-2003 15:59:53';Copier après la connexion
6.关闭LogMiner会话
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR();Copier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexion
1.2.2 在给定的SCN范围内分析重做日志
1.确定上一检查点的SCN
SQL> SELECT CHECKPOINT_CHANGE#, CURRENT_SCN FROM V$DATABASE;Copier après la connexion
2.开始LogMiner并指定CONTINUOUS_MINE
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(- STARTSCN => 56453576, - ENDSCN => 56454208, - OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + - DBMS_LOGMNR.COMMITTED_DATA_ONLY + - DBMS_LOGMNR.PRINT_PRETTY_SQL + - DBMS_LOGMNR.CONTINUOUS_MINE);Copier après la connexion
3.查询LogMiner中的重做日志列表
SQL> SELECT FILENAME name, LOW_SCN, NEXT_SCN FROM V$LOGMNR_LOGS;Copier après la connexion
请注意,LogMiner添加的重做日志文件不包括整个SCN范围,当用指定CONTINUOUS_MINE参数来执行DBMS_LOGMNR.START_LOGMNR时,LogMiner仅仅是添加归档日志。根据查询需要,LogMiner会自动添加SCN范围内其他的在线重做日志,用如下的SQL来确定最新的归档文件中是否包含了该重做日志文件。
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE SEQUENCE# = (SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG);Copier après la connexion
4.查询V$LOGMNR_CONTENTS
该查询不返回1.6.1911事务的SET TRANSACTION READ WRITE和COMMIT语句,因为这些语句没有SEG_OWNER。
SQL> SELECT SCN, (XIDUSN || '.' || XIDSLT || '.' || XIDSQN) as XID, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE SEG_OWNER NOT IN ('SYS', 'SYSTEM');Copier après la connexion
5.关闭LogMiner会话
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR();Copier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexion
1.2.3 在包含未来值的查询中使用连续分析
指定一个查询到指定的时间或者SCN才停止,可以通过设置DBMS_LOGMNR.START_LOGMNR的CONTINUOUS_MINE参数和设置一个未来时间点的ENDTIME或未来的ENDSCN参数来达到目的。
下面的例子,假设你想使用在线字典来监控hr.employees表现在开始到5小时后所有的变化,
1.开始LogMiner
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(- STARTTIME => SYSDATE, - ENDTIME => SYSDATE + 5/24, - OPTIONS => DBMS_LOGMNR.CONTINUOUS_MINE + - DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);Copier après la connexion
2.查询V$LOGMNR_CONTENTS
该查询操作直到查到指定的时间范围内(5小时后)生成的第一个重做日志文件记录才会停止,当然你也可以通过Ctrl+C结束查询。本例中“SET ARRAYSIZE”语句使得查询结果格式可以跟它在重做日志文件中一样,如果不这样设置,那么查询结果的SQL会填满行才换行,不够美观易读。
SQL> SET ARRAYSIZE 1; SQL> SELECT USERNAME AS usr, SQL_REDO FROM V$LOGMNR_CONTENTS WHERE SEG_OWNER = 'HR' AND TABLE_NAME = 'EMPLOYEES';Copier après la connexion
3.停止LogMiner
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR();Copier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexionCopier après la connexion本文参阅Oracle官方文档翻译,不足之处欢迎批评指正!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pour interroger la taille de l'espace de table Oracle, suivez les étapes suivantes: Déterminez le nom de l'espace de table en exécutant la requête: sélectionnez Tablespace_name dans dba_tablespaces; Requête la taille de l'espace de table en exécutant la requête: sélectionnez SUM (Bytes) comme total_size, sum (bytes_free) comme disponible_space, sum (bytes) - sum (bytes_free) comme used_space à partir de dba_data_files où tablespace_

Méthode d'importation de données: 1. Utilisez l'utilitaire SqlLoader: Préparez les fichiers de données, créez des fichiers de contrôle et exécutez SqlLoader; 2. Utilisez l'outil IMP / EXP: les données d'exportation, les données d'importation. Astuce: 1. Chargeur SQL * recommandé pour les ensembles de Big Data; 2. La table cible doit exister et la définition de la colonne correspond; 3. Après l'importation, l'intégrité des données doit être vérifiée.

Désinstaller la méthode pour la défaillance de l'installation d'Oracle: Fermez le service Oracle, supprimez les fichiers du programme Oracle et les clés de registre, désinstallez les variables d'environnement Oracle et redémarrez l'ordinateur. Si la désinstallation échoue, vous pouvez désinstaller manuellement à l'aide de l'outil Oracle Universal Disinstal.

Utilisez l'instruction ALTER TABLE, la syntaxe spécifique est la suivante: alter table table_name Ajouter Column_name data_type [contrainte-clause]. Où: TABLE_NAME est le nom de la table, Column_name est le nom de champ, DATA_TYPE est le type de données et la clause de contrainte est une contrainte facultative. Exemple: Alter Table Employés Ajouter un e-mail Varchar2 (100) Ajouter un champ de messagerie à la table des employés.

La création d'une table Oracle implique les étapes suivantes: Utilisez la syntaxe de la table Create pour spécifier les noms de table, les noms de colonne, les types de données, les contraintes et les valeurs par défaut. Le nom du tableau doit être concis et descriptif et ne doit pas dépasser 30 caractères. Le nom de la colonne doit être descriptif et le type de données spécifie le type de données stocké dans la colonne. La contrainte non nulle garantit que les valeurs nulles ne sont pas autorisées dans la colonne, et la clause par défaut spécifie les valeurs par défaut pour la colonne. Contraintes de clé primaire pour identifier l'enregistrement unique du tableau. La contrainte de clé étrangère spécifie que la colonne du tableau fait référence à la clé primaire dans un autre tableau. Voir la création des élèves de la table de l'échantillon, qui contient des clés primaires, des contraintes uniques et des valeurs par défaut.

Oracle Bragled Les problèmes peuvent être résolus en vérifiant le jeu de caractères de la base de données pour s'assurer qu'ils correspondent aux données. Définissez le jeu de caractères client pour correspondre à la base de données. Convertir les données ou modifier les jeux de caractères de colonne pour faire correspondre les jeux de caractères de base de données. Utilisez des jeux de caractères Unicode et évitez les jeux de caractères mulabyte. Vérifiez que les paramètres de langue de la base de données et du client sont corrects.

Oracle fournit plusieurs méthodes de requête de déduplication: le mot-clé distinct renvoie une valeur unique pour chaque colonne. Le groupe par clause regroupe les résultats et renvoie une valeur non réactive pour chaque groupe. Le mot-clé unique est utilisé pour créer un index ne contenant que des lignes uniques, et l'interrogation de l'index sera automatiquement déducteur. La fonction ROW_NUMBER () attribue des nombres uniques et filtre les résultats qui contiennent uniquement la ligne 1. La fonction min () ou max () renvoie les valeurs non réactives d'une colonne numérique. L'opérateur intersecte renvoie les valeurs communes des deux ensembles de résultats (pas de doublons).

Oracle View Encryption vous permet de crypter les données dans la vue, améliorant ainsi la sécurité des informations sensibles. Les étapes incluent: 1) la création de la clé de cryptage maître (MEK); 2) Création d'une vue cryptée, spécifiant la vue et MEK à crypter; 3) Autoriser les utilisateurs à accéder à la vue cryptée. Comment fonctionnent les vues cryptées: lorsqu'un utilisateur interroge pour une vue cryptée, Oracle utilise MEK pour décrypter les données, garantissant que seuls les utilisateurs autorisés peuvent accéder aux données lisibles.
