设为首页 收藏本站
查看: 300|回复: 0

[经验分享] 14_Oracle_Admin_联机重做日志文件的增删改

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-28 09:49:36 | 显示全部楼层 |阅读模式
一、增加联机重做日志的组和组成员
1. 增加组
wKiom1Qkek_yumG5AAGo7hcJ92A547.jpg

SQL> desc v$logfile;
1
2
3
4
5
6
7
Name                                     Null?    Type
------------------------------------------------- --------------------
GROUP#                                          NUMBER
STATUS                                           VARCHAR2(7)
TYPE                                              VARCHAR2(7)
MEMBER                                          VARCHAR2(513)
IS_RECOVERY_DEST_FILE                           VARCHAR2(3)




SQL> col member format a40
SQL> select * from v$logfile;
1
2
3
4
5
6
7
  
    GROUP# STATUS  TYPE   MEMBER                             IS_
---------- ------- ----------------------------------------------------
         3         ONLINE /oracle/oradata/orcl/redo03.log         NO
         2         ONLINE /oracle/oradata/orcl/redo02.log         NO
         1         ONLINE /oracle/oradata/orcl/redo01.log         NO
-- 当前的联机重做日志文件一共有三组,每组有一个组成员






SQL> alter database add logfile group 4
2 ('/oracle/oradata/orcl/redo04.log') size 50M;
1
2
3
-- 新增第四组
  
Database altered.




SQL> select * from v$logfile;

1
2
3
4
5
6
    GROUP# STATUS  TYPE   MEMBER                               IS_
---------- ------- ---------------------------------------------------
         3         ONLINE /oracle/oradata/orcl/redo03.log        NO
         2        ONLINE /oracle/oradata/orcl/redo02.log         NO
         1         ONLINE /oracle/oradata/orcl/redo01.log        NO
         4         ONLINE /oracle/oradata/orcl/redo04.log        NO




[oracle@localhost~]$ cd /oracle/oradata/orcl
[oracle@localhostorcl]$ ll
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
total 1745000
-rw-r-----. 1 oracle oinstall   9748480 Aug 29 19:10 control01.ctl
-rw-r-----. 1 oracle oinstall   9748480 Aug 27 09:21 control02.ctl
-rw-r-----. 1 oracle oinstall   9748480 Aug 27 09:21 control03.ctl
-rw-r-----. 1 oracle oinstall 104865792 Aug 29 18:56example01.dbf
-rw-r-----. 1 oracle oinstall  52429312 Aug 29 19:10 redo01.log
-rw-r-----. 1 oracle oinstall  52429312 Aug 29 18:18 redo02.log
-rw-r-----. 1 oracle oinstall  52429312 Aug 29 18:19 redo03.log
-rw-r-----. 1 oracle oinstall  52429312 Aug 29 19:09 redo04.log
-- 可以看到第四个组了
-rw-r-----. 1 oracle oinstall 650125312 Aug 29 19:07sysaux01.dbf
-rw-r-----. 1 oracle oinstall 723525632 Aug 29 19:07system01.dbf
-rw-r-----. 1 oracle oinstall  20979712 Aug 29 16:26 temp01.dbf
-rw-r-----. 1 oracle oinstall  57679872 Aug 29 19:10 undotbs01.dbf
-rw-r-----. 1 oracle oinstall   5251072 Aug 29 18:56 users01.dbf




2. 增加组成员

wKioL1QkeoawHju0AAIE3yjExLs620.jpg
建议将文件名起为rdo,以防止误删除。

SQL> alter database add logfile member
2 '/oracle/oradata/orcl/redo04a.log' to group 4;
1
2
3
-- 增加组成员无需指定大小,会自动和现有组成员的大小保持一致。
  
Database altered.




SQL> select * from v$logfile;

1
2
3
4
5
6
7
8
    GROUP# STATUS  TYPE   MEMBER                                  IS_
---------- ------- ------- ---------------------------------------- ---
         3         ONLINE /oracle/oradata/orcl/redo03.log         NO
         2         ONLINE /oracle/oradata/orcl/redo02.log         NO
         1         ONLINE /oracle/oradata/orcl/redo01.log         NO
         4         ONLINE /oracle/oradata/orcl/redo04.log         NO
         4 INVALID ONLINE  /oracle/oradata/orcl/redo04a.log       NO
-- 新增了一个组成员redo04a.log




[oracle@localhost~]$ cd /oracle/oradata/orcl
[oracle@localhostorcl]$ ll
1
2
3
4
5
6
7
8
9
total 1796204
-rw-r-----. 1 oracle oinstall   9748480 Aug 29 19:17 control01.ctl

-rw-r-----. 1 oracle oinstall  52429312 Aug 29 19:17 redo01.log
-rw-r-----. 1 oracle oinstall  52429312 Aug 29 18:18 redo02.log
-rw-r-----. 1 oracle oinstall  52429312 Aug 29 18:19 redo03.log
-rw-r-----. 1 oracle oinstall  52429312 Aug 29 19:15 redo04a.log
-- 新增的组成员
-rw-r-----. 1 oracle oinstall  52429312 Aug 29 19:09 redo04.log




二、删除联机重做日志的组和组成员

A. 删除组成员
wKiom1QkenDDd254AAL_WMTPyy8044.jpg

如果删除了组成员,则会出组成员不对称的情况。这样的操作是允许的,但应该是临时的,一旦进行了这样的操作,需要马上纠正,以保障每个组至少有两个成员,以防止单点故障。

wKiom1Qkenyg2Gt-AAKv1n9XkUE806.jpg

一个数据库实例启动后,至少要保证有两组联机重做日志文件,以确保可以循环写入。组成员的状态如果是INVALID,则数据库无法访问该联机重做日志文件。无法删除的情况如下:
1. 如果一个组中只剩最后一个组成员(或该组有多个组成员,但只有一个是有效(VALID)的),则该组将无法删除;
2. 如果该组成员属于ACTIVE CURRENT状态的组,也无法删除,如果一定要删除,可先执行LogSwitches操作。

事实上,删除RedoLog Memebre并不是真正的删除了这个文件,而是对ControlFile中的相关参数进行修改,当删除成功后,再通过操作系统的相关命令删除真实的文件。在删除一个组成员前,务必保证该成员已经被归档。

wKioL1QkerDC_f6TAAG_l3y0FG8088.jpg

SQL> select * from v$logfile;

1
2
3
4
5
6
7
    GROUP# STATUS  TYPE   MEMBER                                  IS_
---------- ------- ----------------------------------------------------
         3         ONLINE /oracle/oradata/orcl/redo03.log         NO
         2         ONLINE /oracle/oradata/orcl/redo02.log         NO
         1         ONLINE /oracle/oradata/orcl/redo01.log         NO
         4         ONLINE /oracle/oradata/orcl/redo04.log         NO
         4         ONLINE /oracle/oradata/orcl/redo04a.log        NO




SQL> alter database drop logfile member'/oracle/oradata/orcl/redo04a.log';
1
2
3
4
5
6
7
alter database drop logfile member'/oracle/oradata/orcl/redo04a.log'
*
ERROR at line 1:
ORA-01609: log 4 is the current log for thread 1 - cannotdrop members
ORA-00312: online log 4 thread 1:'/oracle/oradata/orcl/redo04.log'
ORA-00312: online log 4 thread 1:'/oracle/oradata/orcl/redo04a.log'
-- 无法删除,因为当前的组状态是CURRENT






SQL> alter system switch logfile;
1
2
-- 执行Log Switches操作
System altered.




SQL> alter system checkpoint;
1
2
-- 执行检查点操作
System altered.




SQL> select group#, thread#, sequence#,status from v$log;
1
2
3
4
5
6
7
-- 以保证要删除的组处于INACTIVE状态
    GROUP#    THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
         1          1         38 CURRENT
         2          1         36 INACTIVE
         3          1         37 INACTIVE
         4          1         35 INACTIVE




SQL> alter database drop logfile member'/oracle/oradata/orcl/redo04a.log';
1
2
-- 这一次成功删除了组成员
Database altered.




SQL> select * from v$logfile;

1
2
3
4
5
6
7
    GROUP# STATUS  TYPE   MEMBER                                 IS_
---------- ------- ---------------------------------------------------
         3         ONLINE /oracle/oradata/orcl/redo03.log         NO
         2         ONLINE /oracle/oradata/orcl/redo02.log         NO
         1         ONLINE /oracle/oradata/orcl/redo01.log         NO
         4         ONLINE /oracle/oradata/orcl/redo04.log         NO
-- 第四组已经没有redo04a.log这个组成员了




[oracle@localhost ~]$ cd /oracle/oradata/orcl
[oracle@localhost orcl]$ ll
1
2
3
4
5
6
7
8
9
total 1712800
-rw-r-----. 1 oracle oinstall   9748480 Sep 10 05:06 control01.ctl
...
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:06 redo01.log
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:01 redo02.log
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:01 redo03.log
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:00 redo04a.log
-- 虽然删除了组成员,但文件任然保存在磁盘上
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:00 redo04.log



SQL> alter database drop logfile member'/oracle/oradata/orcl/redo04.log';
1
2
3
4
5
alter database drop logfile member'/oracle/oradata/orcl/redo04.log'
*
ERROR at line 1:
ORA-00361: cannot remove last log member/oracle/oradata/orcl/redo04.log for group 4
--无法进一步删除组成员redo04.log,因为这已经是最后一个组成员了。






B. 删除组

wKioL1QkesCghc1yAAG5isjtNmE574.jpg
当组处于ACTIVECURRENT状态时,无法删除组;组删除操作也是针对Control file,而非文件本身。

wKiom1QkeqiyGSVVAAGl3kbg67s760.jpg

SQL> select group#, thread#, sequence#, status from v$log;
1
2
3
4
5
6
7
  
    GROUP#    THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------------------------
         1          1         38 INACTIVE
         2          1         40 ACTIVE
         3          1         41 CURRENT
         4          1         39 INACTIVE




SQL> alter database drop logfile group 3;
1
2
3
4
5
6
alter database drop logfile group 3
*
ERROR at line 1:
ORA-01623: log 3 is current log for instance orcl (thread 1)- cannot drop
ORA-00312: online log 3 thread 1:'/oracle/oradata/orcl/redo03.log'
-- 不能DROP处于CURRENT状态的组






SQL> alter database drop logfile group 4;
1
2
-- 处于INACTIVE状态的第四组可以删除
Database altered.




SQL> select group#, thread#, sequence#, status from v$log;
1
2
3
4
5
6
  
    GROUP#    THREAD# SEQUENCE# STATUS
---------- ---------- ---------- ----------------
         1          1         38 INACTIVE
         2          1         40 ACTIVE
         3          1         41 CURRENT




[oracle@localhost ~]$ cd /oracle/oradata/orcl/
[oracle@localhost orcl]$ ll
1
2
3
4
5
6
7
8
9
total 1712800
-rw-r-----. 1 oracle oinstall   9748480 Sep 10 05:22 control01.ctl
...
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:17 redo01.log
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:18 redo02.log
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:22 redo03.log
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:00 redo04a.log
-rw-r-----. 1 oracle oinstall  52429312 Sep 10 05:17 redo04.log
# 第四组文件本身并没有被删除






[oracle@localhost orcl]$ rm -f redo04*
#手动删除操作系统下的文件

三、联机重做日志文件的重新定位和重命名

wKiom1QkerrTjJPFAAL_N5_yiSI041.jpg

为联机重做日志文件重新定位和重命名是进行备份时的必要操作,进行此项操作需要有ALTERDATABASE的权限,并具有相应的操作系统权限,如移动拷贝等。
在进行RelocateRename等操作(改变数据库的结构)前,请务必对现有数据库进行备份。当RelocateRename等操作结束后,也应该立即对数据库的control file进行备份。

wKiom1QkesfyUplyAAJFrg_vGrk921.jpg
进行relocaterename操作最简单的办法是新建一个成员,然后删除老成员。此外,还可以通过以下步骤来实现:
1. 关闭数据库
2.拷贝现有的onlineredo log files 到其他的位置
3.以mount模式启动数据库
4.执行ALTERDATABASE的命令
5.将数据库设为Open状态

SQL> select * from v$logfile;
1
2
3
4
5
6
  
    GROUP# STATUS  TYPE   MEMBER                                  IS_
---------- ------- ---------------------------------------------------
         3         ONLINE /oracle/oradata/orcl/redo03.log         NO
         2         ONLINE /oracle/oradata/orcl/redo02.log         NO
         1         ONLINE /oracle/oradata/orcl/redo01.log         NO




现在想移动redo03.log到上一级目录:

SQL> shutdown immediate
1
2
3
4
Database closed.
Database dismounted.
ORACLE instance shut down.
-- 关闭数据库






[oracle@localhost ~]$ cd /oracle/oradata
[oracle@localhost oradata]$ ll
1
2
3
total 8
drwxr-x---. 3 oracle oinstall 4096 Sep 10 05:24 orcl
drwxr-xr-x. 3 oracle oinstall 4096 Sep  9 16:43 smn




[oracle@localhost oradata]$ cp orcl/redo03.log ./
[oracle@localhost oradata]$ ll
1
2
3
4
5
total 51212
drwxr-x---. 3 oracle oinstall     4096 Sep 10 05:24 orcl
-rw-r-----. 1 oracle oinstall 52429312 Sep 10 05:39redo03.log
drwxr-xr-x. 3 oracle oinstall     4096 Sep 9 16:43 smn
-- 将redo03.log复制到/oracle/oradata/下






SQL> startup mount;
1
2
3
4
5
6
7
8
ORACLE instance started.
-- 以mount模式打开数据库
Total System Global Area 422670336 bytes
Fixed Size                 1336960 bytes
Variable Size            318769536 bytes
Database Buffers          96468992 bytes
Redo Buffers               6094848 bytes
Database mounted.



SQL> alter database rename file '/oracle/oradata/orcl/redo03.log' to
  2 '/oracle/oradata/redo03.log';
1
2
-- 执行alter database命令
Database altered.




SQL> alter database open;
1
2
-- 正常开启数据库
Database altered.




SQL> select * from v$logfile;
1
2
3
4
5
6
7
  
    GROUP# STATUS  TYPE   MEMBER                                 IS_
---------- ------- ---------------------------------------------------
         3         ONLINE /oracle/oradata/redo03.log              NO
-- redo03.log的位置发生了改变
         2         ONLINE /oracle/oradata/orcl/redo02.log         NO
         1         ONLINE /oracle/oradata/orcl/redo01.log         NO




四、清除联机重做日志文件

wKioL1Qkev7TNQSYAAHai9Qk88s244.jpg

Redo Log File使用一段时间后,文件可能会发生损坏,此时将无法再向其中写入数据了,这时就需要执行清空命令,对其进行重新初始化。这样的操作有可能造成数据丢失,因此不到万不得已,轻易不要进行这样的操作。

如果不希望清理这个损坏的RedoLog File时将其归档,可以增加UNARCHIVED命令。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-25459-1-1.html 上篇帖子: 13_Oracle_Admin_联机重做日志文件和检查点 下篇帖子: 15_Oracle_Admin_联机重做日志文件的配置和归档
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表