对oracle的日志组迁移有两个要点,一个是日志组文件进行改名,另外一个是对日志组文件进行迁移。
在前期规划的时候,数据库日志文件,归档文件,数据文件应该放到不同的存储设备上面,从I/O性能和安全方面来说都可以保证数据库的高效。
如果日志文件不满足上面的要求,可以在后期对日志组进行迁移来满足要求。如果要做日志组的迁移,那么就需要在数据库mount状态做迁移,在open状态下是不能做迁移的,因为在open状态下,日志组是被访问的,是不能做迁移的。
SQL> startup mount;
ORACLE instance started.
Total System Global Area 1068937216 bytes
Fixed Size 2260088 bytes
Variable Size 671089544 bytes
Database Buffers 390070272 bytes
Redo Buffers 5517312 bytes
Database mounted.
SQL> select group#,member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
1 /u01/app/oracle/oradata/oradb/redo01a.log
2 /u01/app/oracle/oradata/oradb/redo02.log
3 /u01/app/oracle/oradata/oradb/redo03.log
4 /u01/app/oracle/oradata/oradb/redo04a.log
4 /u01/app/oracle/oradata/oradb/redo04b.log
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/oradb/system01.dbf
/u01/app/oracle/oradata/oradb/sysaux01.dbf
/u01/app/oracle/oradata/oradb/undotbs01.dbf
日志文件和数据文件放在同一个存储下面的/u01目录下面,这样是不规范的,数据文件和日志文件应该放在不同的存储上面。
这里是模拟出两块不同的存储设备disk1,disk2,下面是迁移日志组4的成员到其他存储设备上面
[root@Database2 ~]# mkdir -p /disk2/oradata/oradb
[root@Database2 ~]# mkdir -p /disk1/oradata/oradb
[root@Database2 ~]# chown -R oracle:oinstall /disk2/
[root@Database2 ~]# chown -R oracle:oinstall /disk1/
将成员组的日志组两个成员拷贝到两块盘上面
[oracle@Database2 ~]$ cp /u01/app/oracle/oradata/oradb/redo04a.log /disk1/oradata/oradb/
[oracle@Database2 ~]$ cp /u01/app/oracle/oradata/oradb/redo04b.log /disk2/oradata/oradb/
尽管对日志文件做了拷贝,这是在操作系统层面进行的拷贝,v$logfile是从从控制文件里面读取的信息,alter database rename file这个命令是修改redo日志在控制文件里面的记录的信息,这个命令其实就是用来修改更新控制文件里面的信息。
SQL> alter database rename file '/u01/app/oracle/oradata/oradb/redo04a.log' to '/disk1/oradata/oradb/redo04a.log';
Database altered.
SQL> alter database rename file '/u01/app/oracle/oradata/oradb/redo04b.log' to '/disk2/oradata/oradb/redo04b.log';
Database altered.
修改完之后,数据库不启动到open状态,再去看看日志文件的存储信息,可以看到控制文件里面日志文件存储的信息发生了改变
SQL> select group#,member from v$logfile;
GROUP# MEMBER
---------- --------------------------------------------------
1 /u01/app/oracle/oradata/oradb/redo01a.log
2 /u01/app/oracle/oradata/oradb/redo02.log
3 /u01/app/oracle/oradata/oradb/redo03.log
4 /disk1/oradata/oradb/redo04a.log
4 /disk2/oradata/oradb/redo04b.log
SQL> alter database open;
Database altered.
SQL> alter system switch logfile;
System altered.
SQL> select group#,sequence#,status from v$log;
GROUP# SEQUENCE# STATUS
---------- ---------- ----------------
1 16 INACTIVE
2 18 CURRENT
3 15 INACTIVE
4 17 ACTIVE
迁移完之后将之前的日志组成员删除
[oracle@Database2 ~]$ rm -rf /u01/app/oracle/oradata/oradb/redo04a.log
[oracle@Database2 ~]$ rm -rf /u01/app/oracle/oradata/oradb/redo04b.log
最后可以看得到将之前全部在/u01下面的日志组4迁移到不同的磁盘disk1,disk2下面了,其他日志组迁移也照葫芦画瓢。(redo日志组迁移必须在mount状态下迁移,在生产环境下面进行迁移要申请停机)