oracle重命名日志成员出错,Oracle日志文件
一、一些oracle日志的常用命令
oracle的日志文件是記錄數據庫變化的一個憑證,就是oracle對于一切數據庫的操作的記錄方便以后查找分析錯誤。有可以恢復數據等作用。oracle的文件可以分為數據文件、控制文件和重做日志文件(也就是咱們平時說的redo), oracle的日志文件時分組存放的,一個oracle數據庫最少使用3個日志文件存放這些信息,以防寫滿之后的溢出,為了防止數據庫的災難性宕機,日志文件可以提供一個支持,可以把數據庫恢復到宕機之前的某個時間點,我們也經常對日志文件做一些操作,常用的操作如下:
Oracle日志文件
1.查詢系統使用的是哪一組日志文件:
select * from v$log;
2.查詢正在使用的組所對應的日志文件:
select * from v$logfile;
3.強制日志切換:
alter system switch logfile;
4.查詢歷史日志:
select * from v$log_history;
5.查詢日志的歸檔模式:
Select
dbid,name,created,log_mode from v$database;
6.查詢歸檔日志的信息:
select recid,stamp,thread#,sequence#,name
from v$archived_log;
7.增加與刪除日志文件組
alter database add logfile group 1
('/home1/oracle/oradata/ora8i/log1a.log'),'/home2/oracle/oradata/ora8i/log1b.log')
size 100M;
alter database drop logfile group 1;
8.增加與刪除日志成員
alter database add logfile member
'/home1/oracle/oradata/ora8i/log1a.log' to group
1,'/home1/oracle/oradata/ora8i/log2a.log' to group 2;
alter database drop logfile member '/home1/oracle/oradata/ora8i/log1a.log'
;
9.日志文件移動
alter database rename file
'/home1/oracle/oradata/ora8i/log1a.log' to
'/home2/oracle/oradata/ora8i/log1a.log';
執行該命令之前必須保證該日志文件物理上已經移動到新目錄
10.清除日志文件
alter database clear logfile
'/home1/oracle/oradata/ora8i/log1a.log';
該命令用于不能用刪除組及組成員命令刪除日志時使用
二、oracle日志文件類型及日志管理
如果是安全關閉數據庫.數據庫處于一致狀態:
SQL> startup nomount
SQL> create controlfile reuse database "TEST
" resetlogs archivelog
SQL> alter database open tesetlogs;
馬上備份
如果不是非安全關閉:
非當前日志就是
SQL> alter database clear unarchived logfile group n;
SQL> alter database clear logfile
'C:\oracle\product\10.1.0\oradata\hupan\REDO01
.LOG' group 1;
當前日志:
在initsid> .ora中加入如下參數:
_allow_resetlogs_corruption=TRUE
alter system set "_allow_resetlogs_corruption"
= true scope = spfile;
SQL> recover database until cancel;
Cancel
如果出錯,不再理會,發出
SQL> alter database open resetlogs;
1、Oracle中的幾類日志文件
Redo log
files????? -->聯機重做日志
Archive log
files?? -->歸檔日志
Alert log
files???? -->告警日志
Trace
files???????? -->跟蹤日志
user_dump_dest????????? -->用戶跟蹤日志
backupground_dump_dest? -->進程跟蹤日志
--查看后臺進程相關目錄
SQL> show parameter dump
NAME????????????????? ??TYPE
VALUE
-------------------- ????-----------
------------------------------
background_core_dump???? ????string
partial
background_dump_dest?? ??????string????? /u01/app/oracle/admin/orcl/bdump
core_dump_dest??? ???????????string????? /u01/app/oracle/admin/orcl/cdump
max_dump_file_size???????? ??string
UNLIMITED
shadow_core_dump??????????? ?string
partial
user_dump_dest????? ?????????string
/u01/app/oracle/admin/orcl/udump
關于Oracle常用目錄及路徑請參考:Oracle常用目錄結構(10g)
關于Oracle體系結構請參考:Oracle實例和Oracle數據庫(Oracle體系結構)
2、聯機重做日志的規劃管理
1.聯機重做日志
記錄了數據的所有變化(DML,DDL或管理員對數據所作的結構性更改等)
提供恢復機制(對于意外刪除或宕機利用日志文件實現數據恢復)
可以被分組管理
2.聯機重做日志組
由一個或多個相同的聯機日志文件組成一個聯機重做日志組
至少兩個日志組,每組一個成員(建議每組兩個成員,分散放開到不同的磁盤)
由LGWR后臺進程同時將日志內容寫入到一個組的所有成員
LGWR的觸發條件
在事務提交的時候(COMMIT)
Redo Log Buffer三分之一滿
Redo Log Buffer多于一兆的變化記錄
在DBWn寫入數據文件之前
3.聯機重做日志成員
重做日志組內的每一個聯機日志文件稱為一個成員
一個組內的每一個成員具有相同的日志序列號(log sequence number),且成員的大小相同
每次日志切換時,Oracle服務器分配一個新的LSN號給即將寫入日志的日志文件組
LSN號用于唯一區分每一個聯機日志組和歸檔日志
處于歸檔模式的聯機日志,LSN號在歸檔時也被寫入到歸檔日志之中
4.日志文件的工作方式
日志文件采用按順序循環寫的方式
當一組聯機日志組寫滿,LGWR則將日志寫入到下一組,當最后一組寫滿則從第一組開始寫入
寫入下一組的過程稱為日志切換
切換時發生檢查點過程
檢查點的信息同時寫入到控制文件
5.聯機日志文件的規劃
總原則
分散放開,多路復用
日志所在的磁盤應當具有較高的I/O
一般日志組大小應滿足自動切換間隔至少15-20分鐘左右業務需求
建議使用rdo結尾的日志文件名,避免誤刪日志文件。如redo1.rdo,redo2.rdo
規劃樣例
Redo
Log Group1???? Redo Log Group2???? Redo Log Group3
Member1???????????? Member1????????????? Member1??????????? -->Physical Disk 1
Member2???????????? Member2????????????? Member2?????? ?????-->Physical Disk 2
Member3???????????? Member3????????????? Member3??????????? -->Physical Disk 3
6.日志切換和檢查點切換
ALTER
SYSTEM SWITCH LOGFILE;?? --強制手動切換
ALTER SYSTEM CHECKPOINT;
強制設置檢查點間隔
ALTER
SYSTEM SET FAST_START_MTTR_TARGET = n
7.添加日志文件組
ALTER
DATABASE ADD LOGFILE [GROUP n]
('$ORACLE_BASE/oradata/u01/logn1.rdo',
'$ORACLE_BASE/oradata/u01/logn2.rdo')
SIZE mM;
8.添加日志成員
ALTER
DATABASE ADD LOGFILE MEMBER
'$ORACLE_BASE/oradata/u01/logn1.rdo' TO GROUP 1,
'$ORACLE_BASE/oradata/u01/logn2.rdo' TO GROUP 2;
9.刪除日志成員
不能刪除組內的唯一一個成員
不能刪除處于active和current狀態組內的成員
刪除處于active和current狀態組內的成員,應使用日志切換使其處于INACTIVE狀態后再刪除
對于組內如果一個成員為NULL值,一個為INVALID,且組處入INACTIVE,僅能刪除INVALID狀態成員
刪除日志成員,物理文件并沒有真正刪除,需要手動刪除
刪除日志文件后,控制文件被更新
對于處于歸檔模式下的數據庫,刪除成員時確保日志已被歸檔,查看v$log視圖獲得歸檔信息
ALTER
DATABASE DROP LOGFILE MEMBER '$ORACLE_BASE/oradata/u01/logn1.rdo'
10.刪除日志組
一個實例至少需要兩個聯機日志文件組
活動或當前的日志組不能被刪除
組內成員狀態有NULL值或INVALID狀態并存,組不可刪除
日志組被刪除后,物理文件需要手動刪除(對于非OMF)
ALTER
DATABASE DROP LOGFILE GROUP n
11.日志的重定位及重命名
所需權限
ALTER DATABASE系統權限
復制文件到目的位置操作系統權限(寫權限)
CURRENT狀態組內的成員不能被重命名
建議該行為之前備份數據庫
重命名或重定位之后建議立即備份控制文件
重定位及重命名的兩種方法
添加一個新成員到日志組,然后刪除一個舊的成員
使用ALTER
DATABASE RENAME FILE命令(不區分歸檔與非歸檔模式)
復制聯機日志文件到新路徑:ho cp
執行ALTER
DATABASE RENAME FILE '' TO ''
對于處于CURRENT狀態的需要改名且不切換的情況下
辦法是切換到MOUNT狀態下再執行上述操作
12.清空日志文件組
ALTER DATABASE CLEAR
LOGIFLE GROUP n
ALTER DATABASE CLEAR
UNARCHIVED LOGFILE GROUP n
--使用unarchived避免歸檔
13.日志周期循環及切換分析
Group
1????? Group 2????? Group 3
Current????? Inactive???? Inactive
----------
Log Switch -------------
Active?????? Current????? Inactive
----------
Log Switch -------------
Active?????? Active?????? Current
---------- Log Switch -------------
Current????? Inactive???? Inactive
--Active和Current稱之為在一個循環周期之內(按順序寫日志)
--Inactive稱為一個周期之外(一個新的循環)
--新一輪循環開始如在歸檔狀態則先歸檔再清空,否則直接清空日志
--數據庫啟動時Active和Current狀態的日志不能丟失,否則出錯
對于CURRENT組的也可以使用隱藏參數來解決
步驟:
alter system
set "_allow_resetlogs_corruption" = true scope = spfile;
recover
database using bakcup controlfile;
alter database
open resetlogs;
shutdown
immediate;
startup
mount;
alter
database open resetlogs;
alter
system reset "_allow_resetlogs_corruption" scope = spfile sid = '*'
對于歸檔模式下的日志文件丟失,同樣可以按上述步驟處理
REDO01.LOG文件誤刪除后恢復的方法如下:
conn
sys/sys@數據庫服務名稱as sysdba;
SQL>shutdown
immediate;
SQL>startup
mount;
SQL>recover
database until cancel;
SQL>alter
database open resetlogs;
SQL>shutdown;
SQL>startup;
三、歸檔日志文件的操作
1.將數據庫日志模式由非歸檔改為歸檔模式
Startup
mount
Alter
database archivelog;
2.查看v$log和v$logfile
Desc
v$log,desc v$logfile
Group#表示組別,members表示成員多少,arc表示是否歸檔保存了,status中current表示當前正在使用的日志文件,不能刪除,INACTIVE表示已經歸檔出去了的日志,可以刪除,要想刪除當前日志,必須先切換日志(alter
system switch logfile),讓其歸檔出去,然后status變成ACTIVE,然后利用檢查點來刪除(alter system
checkpoint,alter database drop logfile member‘’,或者alter database drop logfile group 1)
3.增加一個日志文件組4,組中放入一個成員(redo04.log)
Alter
database add logfile group 4
(‘I:\oracle\product\10.2.0\oradata\orcl\redo04.log’)
size 10M;
4.向日志文件組4再增加一個成員(redo04a.log)
Alter
database add logfile member ‘…\redo04a.log’ to group 4;
5.將redo01.log移動到一個新的地方
(日志文件的移動重命名
1.關閉數據庫
2.使用操作系統命令拷貝,移動或重命名重做日志文件
3.啟動
4.使用alter database rename file‘original name’to‘new
name’ 命令更新控制文件
5.打開數據庫)
Sql>Shutdown
immediate
手動移走redo01.log文件
Sql>startup
報錯說找不到redo01.log文件
Sql>alter
database rename file‘原路徑’to‘新路徑’
Alter
database open;
6.刪除日志成員和日志文件組
Alter
database drop logfile member‘路徑’;
Alter
database drop logfile group 4;
7.設置歸檔目的地并測試文檔
Alter
system set log_archive_dest_1=’location:d:\arch’;
每當進行日志切換的時候,日志文件就被備份到歸檔日志里;
8.日志文件修復
當status為INACTIVE時
SQL>alter
database clear logfile group 4;
SQL>alter
database clear unarchived logfile group 4;
SQL>shutdown
immediate;
SQL>startup
mount;
SQL>recover
database until cancel;
SQL>alter
database open resetlogs;
SQL>archive
log list;
總結
以上是生活随笔為你收集整理的oracle重命名日志成员出错,Oracle日志文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 意外事件,Oracle数据
- 下一篇: oracle布尔true 1,将.NET