zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Oracle 日志组迁移

2023-09-14 09:01:48 时间

对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状态下迁移,在生产环境下面进行迁移要申请停机)