ORA-01291: missing logfile Oracle RAC 集群环境下日志文件结构

本文介绍了Oracle 11g RAC环境中日志管理的重要性及日志文件的位置,并提供了检查和配置补充日志的方法,有助于早期发现并解决问题。




在Oracle11g RAC环境中,对集群中的日志的定期检查是必不可少的。通过查看集群日志,可以早期定位集群环境中出现的问题,
以便将问题消灭在萌芽状态。

简单介绍一下有关Oracle集群环境中日志的结构,方便快速查找所需的日志文件。


1.Oracle集群日志藏匿之处
Oracle集群涉及的日志主要位于“$ORA_CRS_HOME/log”和“$ORACLE_HOME/log”目录中。

SQL> SELECT  capture_name,queue_name,RULE_SET_NAME,NEGATIVE_RULE_SET_NAME,status from dba_capture;

CAPTURE_NAME        QUEUE_NAME
------------------------------ ------------------------------
RULE_SET_NAME        NEGATIVE_RULE_SET_NAME       STATUS
------------------------------ ------------------------------ --------
CAPTURE_MES_QBJ         MES_QUEUE_QBJ
RULESET$_17       ABORTED

SQL> select error_message,status from dba_capture;

ERROR_MESSAGE
--------------------------------------------------------------------------------
STATUS
--------
ORA-01291: missing logfile
ORA-06512: at "SYS.DBMS_CAPTURE_ADM_INTERNAL", line 842
ORA-06512: at "SYS.DBMS_CAPTURE_PROCESS", line 397
ORA-06512: at line 1
ABORTED

我猜想 这个问题是 在RAC上

execute dbms_logmnr_d.set_tablespace('jxmes');

不应该使用这个 

在单实例上可以 


为什么要Supplemental Log(追加日志) 

|字号 订阅

前在配置logical standby database时, oracle文档中要求primary database需要添加附加日志

alter database add supplemental log data (primary key, unique index) columns;

在配置stream replication时,也要求参与复制的表传输附加日志:

alter table scott.dept add supplemental log group log_group_dept_pk (id) always;

但总是不太明白supplemental log的作用,总是担心如果不设置,会不会在某种情况下对数据库造成伤害,昨天看了一天文档,终于在oracle stream replication的online document中找到答案:

大致意思是说:

如果你的主键或唯一索引是组合的(复合的),就需要为表配置supplemental log,否则就不必,也就是说,如果你的所有表的主键是单列的,那你根本就不必去理会它是什么意思.

为什么会这样:

如果你更新了主键中的部分字段,那supplemental log的作用就是把该记录其余的组成部分的数据也传输到目标机,否则目标机就存在不确定性


分析日志的笔记 =====挺实用


select value from v$parameter where name = 'log_archive_dest';
SELECT member FROM v$logfile where rownum = 1;
exec SYS.DBMS_LOGMNR.ADD_LOGFILE('...../o1.log', sys.dbms_logmnr.New);
exec sys.dbms_logmnr.add_logfile(....._1_407.arc', dbms_logmnr.addfile);
select min(low_time),  max(high_time), min(low_scn),   max(next_scn) -1 from V$logmnr_logs;
exec  SYS.DBMS_LOGMNR.START_LOGMNR(Options => sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
select SCN, timestamp, sql_redo, session# session_num, username,session_info From V$LOGMNR_CONTENTS Order by 1;
exec SYS.DBMS_LOGMNR.END_LOGMNR();


这个错误是 Oracle 数据库中的一个 SQL 错误,出现在你尝试执行 `CREATE TABLESPACE` 语句时,但没有指定必要的 `DATAFILE` 或 `TEMPFILE` 子句。 --- ### ❌ 错误信息: ``` ERROR at line 1: ORA-02199: missing DATAFILE/TEMPFILE clause ``` ### ✅ 原因分析: 当你使用 `CREATE TABLESPACE` 创建一个永久表空间(permanent tablespace)时,必须通过 `DATAFILE` 指定一个或多个数据文件(.dbf 文件)。 对于临时表空间(temporary tablespace),则需要使用 `TEMPFILE`。 如果你的语句中缺少了这些子句,Oracle 就会报出 ORA-02199 错误。 --- ### ✅ 正确语法示例: #### 1. 创建普通(永久)表空间: ```sql CREATE TABLESPACE users_tbs DATAFILE '/u01/oradata/mydb/users_tbs01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 500M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; ``` #### 2. 创建临时表空间: ```sql CREATE TEMPORARY TABLESPACE temp_tbs TEMPFILE '/u01/oradata/mydb/temp_tbs01.dbf' SIZE 50M AUTOEXTEND ON NEXT 5M MAXSIZE 200M TABLESPACE GROUP '' EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M; ``` #### 3. 如果你要创建的是 bigfile 表空间(大文件表空间),也必须带 DATAFILE: ```sql CREATE BIGFILE TABLESPACE big_tbs DATAFILE '/u01/oradata/mydb/big_tbs01.dbf' SIZE 2G; ``` --- ### 🛠 常见错误写法(导致 ORA-02199): ```sql -- 错误!缺少 DATAFILE CREATE TABLESPACE test_tbs; -- 错误!拼写错误或路径格式不对(也可能被当作缺失) CREATE TABLESPACE test_tbs DATAFILE; ``` --- ### 🔍 排查建议: 1. 确保使用了 `DATAFILE`(永久表空间)或 `TEMPFILE`(临时表空间)。 2. 检查文件路径是否存在、Oracle 是否有读写权限。 3. 使用正确的大小单位(如 M、G)。 4. 在 RAC 环境中注意共享存储路径。 --- ### 💡 补充说明: - `DATAFILE`: 用于存储用户数据和模式对象。 - `TEMPFILE`: 用于排序操作等临时数据,属于临时表空间。 - 可以通过 `DBA_DATA_FILES` 和 `DBA_TEMP_FILES` 查看现有文件。 ```sql SELECT file_name, tablespace_name FROM DBA_DATA_FILES; SELECT file_name, tablespace_name FROM DBA_TEMP_FILES; ``` --- ### ✅ 总结: ORA-02199 的根本原因是 `CREATE TABLESPACE` 语句中遗漏了 `DATAFILE` 或 `TEMPFILE`。只要补上对应的数据文件定义,并确保语法正确即可解决。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值