ORACLE 移动数据文件 控制文件 重做日志文件

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

ORACLE数据库有时候需要对存储进行调整,增加分区、IO调优等等,此时需要移动数据文件、重做日志文件、控制文件等等,下文结合例子总结一下这方面的知识点。

进行数据文件、重做日志文件、控制文件的迁移前,需要总体了解一下当前Linux服务器的磁盘、分区信息,以及服务器文件使用情况,如下所示

查看Linux服务器的文件使用情况

   1: [root@DB-Server ~]# df -h
   2:  
   3: Filesystem Size Used Avail Use% Mounted on
   4:  
   5: /dev/mapper/VolGroup00-LogVol00
   6:  
   7: 78G 7.1G 67G 10% /
   8:  
   9: /dev/sdb1 78G 184M 74G 1% /u02
  10:  
  11: /dev/sdc1 78G 184M 74G 1% /u03
  12:  
  13: /dev/sdd1 78G 9.1G 65G 13% /u04
  14:  
  15: /dev/sda1 99M 23M 71M 25% /boot
  16:  
  17: tmpfs 7.9G 0 7.9G 0% /dev/shm
  18:  

clip_image002

查看Linux 服务器的磁盘、分区情况。如下所示,这台服务器,4个物理硬盘,6个逻辑分区

   1: [root@DB-Server ~]# fdisk -l
   2:  
   3: Disk /dev/sda: 128.8 GB, 128849018880 bytes
   4: 255 heads, 63 sectors/track, 15665 cylinders
   5: Units = cylinders of 16065 * 512 = 8225280 bytes
   6:  
   7:    Device Boot      Start         End      Blocks   Id  System
   8: /dev/sda1   *           1          13      104391   83  Linux
   9: /dev/sda2              14       15665   125724690   8e  Linux LVM
  10:  
  11: Disk /dev/sdb: 85.8 GB, 85899345920 bytes
  12: 255 heads, 63 sectors/track, 10443 cylinders
  13: Units = cylinders of 16065 * 512 = 8225280 bytes
  14:  
  15:    Device Boot      Start         End      Blocks   Id  System
  16: /dev/sdb1   *           1       10443    83883366   83  Linux
  17:  
  18: Disk /dev/sdc: 85.8 GB, 85899345920 bytes
  19: 255 heads, 63 sectors/track, 10443 cylinders
  20: Units = cylinders of 16065 * 512 = 8225280 bytes
  21:  
  22:    Device Boot      Start         End      Blocks   Id  System
  23: /dev/sdc1   *           1       10443    83883366   83  Linux
  24:  
  25: Disk /dev/sdd: 85.8 GB, 85899345920 bytes
  26: 255 heads, 63 sectors/track, 10443 cylinders
  27: Units = cylinders of 16065 * 512 = 8225280 bytes
  28:  
  29:    Device Boot      Start         End      Blocks   Id  System
  30: /dev/sdd1   *           1       10443    83883366   83  Linux
  31:  
  32: Disk /dev/dm-0: 85.8 GB, 85899345920 bytes
  33: 255 heads, 63 sectors/track, 10443 cylinders
  34: Units = cylinders of 16065 * 512 = 8225280 bytes
  35:  
  36: Disk /dev/dm-0 doesn't contain a valid partition table
  37:  
  38: Disk /dev/dm-1: 18.9 GB, 18924699648 bytes
  39: 255 heads, 63 sectors/track, 2300 cylinders
  40: Units = cylinders of 16065 * 512 = 8225280 bytes
  41:  
  42: Disk /dev/dm-1 doesn't contain a valid partition table

clip_image004

控制文件移动

控制文件是ORACLE中最重要的文件之一,控制文件一般默认是三个。 ORACLE数据库系统在需要更新控制文件的时候,就会自动同时更新多个控制文件。当其中一个控制文件出现损坏时,系统会自动启用另外的控制文件。只有当 ORACLE数据库管理员运气比较背的时候,即所有控制文件都出现损坏,此时ORACLE数据库就无法正常启动了。

关于控制文件,通常采用分散放置,多路复用的原则。 即只要将控制文件多路复用在多块硬盘上,一般来说控制文件一起损坏的几率很小。所以采用多路复用控制文件可以在很大程度上提高控制文件的安全性。最重要的是,在控制文件转换的过程之中,不会有停机现象的产生。

关于多路复用的原理其实很简单,就是在ORACLE数据库服务器上将控制文件存放在多个磁盘分区或者多块硬盘上。所以通过把控制文件存放在不同的硬盘上,ORACLE数据库就能够避免出现单点故障的风险。

另外一个提高IO性能的方法就是将控制文件放置在裸设备(Raw device)上,记得三年前,第一次在AIX上看到控制文件为/dev/raw/raw1这种方式时,当时很是迷惑,同事告知是裸设备时,才知道有这么东东。

   1: [oracle@DB-Server ~]$ sqlplus / as sysdba
   2:  
   3: SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 11 09:10:53 2014
   4:  
   5: Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
   6:  
   7:  
   8: Connected to:
   9: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
  10: With the Partitioning, OLAP, Data Mining and Real Application Testing options
  11:  
  12: SQL> desc v$controlfile;
  13:  Name                                      Null?    Type
  14:  ----------------------------------------- -------- ----------------------------
  15:  STATUS                                             VARCHAR2(7)
  16:  NAME                                               VARCHAR2(513)
  17:  IS_RECOVERY_DEST_FILE                              VARCHAR2(3)
  18:  BLOCK_SIZE                                         NUMBER
  19:  FILE_SIZE_BLKS                                     NUMBER
  20:  
  21: SQL> SET LINESIZE 1400;   
  22: SQL> COL STATUS FOR A7
  23: SQL> COL NAME FOR A60 
  24: SQL> COL BLOCK_SIZE FOR 999999
  25: SQL> COL FILE_SIZE_BLKS FOR 9999999
  26: SQL> SELECT * FROM V$CONTROLFILE;
  27:  
  28: STATUS  NAME                                                         IS_ BLOCK_SIZE FILE_SIZE_BLKS
  29: ------- ------------------------------------------------------------ --- ---------- --------------
  30:         /u01/app/oracle/oradata/epps/control01.ctl                   NO       16384            430
  31:         /u01/app/oracle/oradata/epps/control02.ctl                   NO       16384            430
  32:         /u01/app/oracle/oradata/epps/control03.ctl                   NO       16384            430
  33:  
  34: SQL> 

 

clip_image006

如上所示,所有的控制文件都位于/u01/app/oracle /oradata/epps目录下,也就是说位于逻辑分区/dev/sda2 ,磁盘/dev/sda中。这个显然是不合理的。完全违反分散放置,多路复用的原则。例如我将控制文件分散放置到硬盘sda、sdb、sdc上。可以分散 IO。提高IO性能。下面是操作步骤。

Step 1: 在/u02, /u03等目录新建文件夹/oradata/epps

   1: [oracle@DB-Server u02]$ mkdir -p ./oradata/epps
   2: [oracle@DB-Server u02]$ cd /u03
   3: [oracle@DB-Server u03]$ mkdir -p ./oradata/epps
   4:  
   5:  
   6: [oracle@DB-Server u01]$ mkdir oradata
   7: [oracle@DB-Server u01]$ cd oradata/
   8: [oracle@DB-Server oradata]$ ls
   9: [oracle@DB-Server oradata]$ mkdir epps

Step 2: 检查是否以spfile启动

   1: SQL> show parameter spfile;
   2:  
   3: NAME                                 TYPE        VALUE
   4: ------------------------------------ ----------- ------------------------------
   5: spfile                               string      /u01/app/oracle/product/10.2.0
   6:                                                  /db_1/dbs/spfileepps.ora

Step 3: 修改控制文件位置

   1: SQL> alter system set control_files=
   2:   2  '/u01/oradata/epps/control01.ctl',
   3:   3  '/u02/oradata/epps/control02.ctl',
   4:   4  '/u03/oradata/epps/control03.ctl'
   5:   5  scope=spfile;
   6:  
   7: System altered.

Step 4:关闭数据库实例

   1: SQL> shutdown immediate;
   2: Database closed.
   3: Database dismounted.
   4: ORACLE instance shut down.

Step 5:移动控制文件

   1: SQL> ! mv /u01/app/oracle/oradata/epps/control01.ctl  /u01/oradata/epps 
   2:  
   3: SQL> ! mv /u01/app/oracle/oradata/epps/control02.ctl  /u02/oradata/epps/             
   4:  
   5: SQL> ! mv /u01/app/oracle/oradata/epps/control03.ctl  /u03/oradata/epps/

Step 6:启动数据库

   1: SQL> startup
   2: ORACLE instance started.
   3:  
   4: Total System Global Area 5033164800 bytes
   5: Fixed Size                  2090848 bytes
   6: Variable Size             956303520 bytes
   7: Database Buffers         4060086272 bytes
   8: Redo Buffers               14684160 bytes
   9: Database mounted.
  10: Database opened.

Step 7:验证控制文件是否移动到其它分区

   1: SQL> SELECT * FROM V$CONTROLFILE;
   2:  
   3: STATUS  NAME                                                         IS_ BLOCK_SIZE FILE_SIZE_BLKS
   4: ------- ------------------------------------------------------------ --- ---------- --------------
   5:         /u01/oradata/epps/control01.ctl                              NO       16384            430
   6:         /u02/oradata/epps/control02.ctl                              NO       16384            430
   7:         /u03/oradata/epps/control03.ctl                              NO       16384            430
   8:  
   9: SQL>

clip_image008

移动重做日志文件

联机日志文件又叫重做日志文件,记录了对数据库修改的信息,包括用户对数 据修改和数据库管理员对数据库结构的修改。它主要用于在发生故障的时候和数据库备份文件配合恢复数据库,一般发生故障有2个情况:一个是介质损坏另外一个 是用户误操作。每个数据库至少有两个日志文件组,每组至少包含1个或者多个日志成员,这里要多个日志成员的原因是防止日志文件组内某个日志文件损坏后及时 提供备份,所以同一组的日志成员一般内容信息相同,但是存放位置不同,就就是采用多路复用。

如下所示,这里有个问题:重做日志每个组只有一个组成员 (member),没有采用多路复用,那么我们先将这三个重做日志文件移动至/u01/oradata/epps/目录下,然后增加组成员,采用多路复 用。避免redo log files 的单点故障。重做日志在ORACLE数据库中IO操作非常频繁,所以需要将同一组的成员分散至不同的磁盘。关于联机重做日志,一般是将redo log file移动到裸设备或I/0快的磁盘中

   1: SQL> col status for a8
   2: SQL> select * from v$log;
   3:  
   4:  GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS   FIRST_CHANGE# FIRST_TIM
   5: ------- ---------- ---------- ---------- ---------- --- -------- ------------- ---------
   6:       1          1         38   52428800          1 NO  INACTIVE       1092664 10-APR-14
   7:       2          1         39   52428800          1 NO  CURRENT        1116851 10-APR-14
   8:       3          1         37   52428800          1 NO  INACTIVE       1069283 10-APR-14
   9:  
  10: SQL> col member for a60
  11: SQL> col is_recovery_dest_file for a3
  12: SQL> select * from v$logfile;
  13:  
  14:  GROUP# STATUS   TYPE    MEMBER                                                       IS_
  15: ------- -------- ------- ------------------------------------------------------------ ---
  16:       3 STALE    ONLINE  /u01/app/oracle/oradata/epps/redo03.log                      NO
  17:       2          ONLINE  /u01/app/oracle/oradata/epps/redo02.log                      NO
  18:       1          ONLINE  /u01/app/oracle/oradata/epps/redo01.log                      NO
  19:  
  20: SQL> shutdown immediate;
  21: Database closed.
  22: Database dismounted.
  23: ORACLE instance shut down.
  24: SQL> ! mv /u01/app/oracle/oradata/epps/redo03.log /u01/oradata/epps/     
  25:  
  26: SQL> ! mv /u01/app/oracle/oradata/epps/redo01.log /u01/oradata/epps/
  27:  
  28: SQL> ! mv /u01/app/oracle/oradata/epps/redo02.log /u02/oradata/epps/
  29:  
  30: SQL> ! mv /u02/oradata/epps/redo02.log  /u01/oradata/epps/
  31:  
  32: SQL> startup mount;
  33: ORACLE instance started.
  34:  
  35: Total System Global Area 5033164800 bytes
  36: Fixed Size                  2090848 bytes
  37: Variable Size             956303520 bytes
  38: Database Buffers         4060086272 bytes
  39: Redo Buffers               14684160 bytes
  40: Database mounted.
  41: SQL> alter database rename file '/u01/app/oracle/oradata/epps/redo01.log'
  42:   2  to '/u01/oradata/epps/redo01.log';
  43:  
  44: Database altered.
  45:  
  46:  
  47: SQL> alter database rename file '/u01/app/oracle/oradata/epps/redo02.log'
  48:   2  to '/u01/oradata/epps/redo02.log';
  49:  
  50: Database altered.
  51:  
  52: SQL> alter database rename file '/u01/app/oracle/oradata/epps/redo03.log'
  53:   2  to '/u01/oradata/epps/redo03.log';
  54:  
  55: Database altered.
  56:  
  57: SQL> alter database open;
  58:  
  59: Database altered.
  60:  
  61: SQL> 

clip_image010

   1: SQL> alter database add logfile member '/u03/oradata/epps/redo01_02.log' to group 1;
   2:  
   3: Database altered.
   4:  
   5: SQL> alter database add logfile member '/u03/oradata/epps/redo02_02.log' to group 2;
   6:  
   7: Database altered.
   8:  
   9: SQL> alter database add logfile member '/u03/oradata/epps/redo03_03.log' to group 3;
  10:  
  11: Database altered.
  12:  
  13: SQL> col member for a60
  14: SQL> col is_recovery_dest_file for a3
  15: SQL> select * from v$logfile;
  16:  
  17:     GROUP# STATUS  TYPE    MEMBER                                                       IS_
  18: ---------- ------- ------- ------------------------------------------------------------ ---
  19:          3         ONLINE  /u01/oradata/epps/redo03.log                                 NO
  20:          2         ONLINE  /u01/oradata/epps/redo02.log                                 NO
  21:          1         ONLINE  /u01/oradata/epps/redo01.log                                 NO
  22:          1 INVALID ONLINE  /u03/oradata/epps/redo01_02.log                              NO
  23:          2 INVALID ONLINE  /u03/oradata/epps/redo02_02.log                              NO
  24:          3 INVALID ONLINE  /u03/oradata/epps/redo03_03.log                              NO
  25:  
  26: 6 rows selected.
  27:  
  28: SQL> alter system switch logfile;
  29:  
  30: System altered.
  31:  
  32: SQL> alter system switch logfile;
  33:  
  34: System altered.
  35:  
  36: SQL> alter system switch logfile;
  37:  
  38: System altered.
  39:  
  40: SQL> select * from v$logfile;
  41:  
  42:     GROUP# STATUS  TYPE    MEMBER                                                       IS_
  43: ---------- ------- ------- ------------------------------------------------------------ ---
  44:          3         ONLINE  /u01/oradata/epps/redo03.log                                 NO
  45:          2         ONLINE  /u01/oradata/epps/redo02.log                                 NO
  46:          1         ONLINE  /u01/oradata/epps/redo01.log                                 NO
  47:          1         ONLINE  /u03/oradata/epps/redo01_02.log                              NO
  48:          2         ONLINE  /u03/oradata/epps/redo02_02.log                              NO
  49:          3         ONLINE  /u03/oradata/epps/redo03_03.log                              NO
  50:  
  51: 6 rows selected.
  52:  
  53: SQL> 

clip_image012

数据文件调优

由于采用基本安装方式,像system、uno、temp等表空间的数据 文件都放置于/u01/app/oracle/oradata/epps/下,下面我将这些系统表空间的数据文件移动至/u01/oradata /epps下,因为我们需要定期备份/u01/app这个目录,而数据文件通过RMAN备份,所以将这些系统表空间数据从/u01/app/目录下移走就 有必要.

   1: [oracle@DB-Server epps]$ ls
   2: example01.dbf  sysaux01.dbf  system01.dbf  temp01.dbf  undotbs01.dbf  users01.dbf
   3: [oracle@DB-Server epps]$ pwd
   4: /u01/app/oracle/oradata/epps
   5: [oracle@DB-Server epps]$ pwd
   6: /u01/app/oracle/oradata/epps
   7: [oracle@DB-Server epps]$ exit
   8: exit
   9:  
  10: SQL> select tablespace_name from dba_tablespaces;
  11:  
  12: TABLESPACE_NAME
  13: ------------------------------
  14: SYSTEM
  15: UNDOTBS1
  16: SYSAUX
  17: TEMP
  18: USERS
  19: EXAMPLE
  20:  
  21: 6 rows selected.

表空间example数据文件移动

   1: SQL> alter tablespace example offline normal;
   2:  
   3: Tablespace altered.
   4:  
   5: SQL> ! mv /u01/app/oracle/oradata/epps/example01.dbf  /u01/oradata/epps/
   6:  
   7: SQL> alter database rename file '/u01/app/oracle/oradata/epps/example01.dbf'
   8:   2  to '/u01/oradata/epps/example01.dbf';
   9:  
  10: Database altered.
  11:  
  12: SQL> alter tablespace example online;
  13:  
  14: Tablespace altered.
  15:  
  16: SQL> 

表空间sysaux数据文件移动

   1: SQL> alter tablespace sysaux offline normal;
   2:  
   3: Tablespace altered.
   4:  
   5: SQL> ! mv /u01/app/oracle/oradata/epps/sysaux01.dbf  /u01/oradata/epps/
   6:  
   7: SQL> alter database rename file '/u01/app/oracle/oradata/epps/sysaux01.dbf'
   8:   2  to '/u01/oradata/epps/sysaux01.dbf';
   9:  
  10: Database altered.
  11:  
  12: SQL> alter tablespace sysaux online;
  13:  
  14: Tablespace altered.

表空间users数据文件移动

   1: SQL> alter tablespace users offline normal;
   2:  
   3: Tablespace altered.
   4:  
   5: SQL> ! mv /u01/app/oracle/oradata/epps/users01.dbf  /u01/oradata/epps/
   6: SQL> alter tablespace users rename datafile '/u01/app/oracle/oradata/epps/users01.dbf'
   7:   2  to '/u01/oradata/epps/users01.dbf';
   8:  
   9: Tablespace altered.
  10:  
  11: SQL> alter tablespace users online;
  12:  
  13: Tablespace altered.

UNDO表空间调整

   1: SQL> create undo tablespace undotbs
   2:   2  datafile '/u01/oradata/epps/undotbs.dbf' size 2G
   3:   3  autoextend on
   4:   4  next 100m
   5:   5  maxsize 8G;
   6:  
   7: Tablespace created.
   8:  
   9: SQL> select count(1) from v$transaction;
  10:  
  11:   COUNT(1)
  12: ----------
  13:          0
  14:  
  15:  
  16:  
  17: SQL> alter system set undo_tablespace=undotbs scope=both;
  18:  
  19: System altered.
  20:  
  21: SQL> drop tablespace undotbs1 including contents and datafiles;
  22:  
  23: Tablespace dropped.

临时表空间调整

   1: SQL> create temporary tablespace TEMP1
   2:   2  tempfile '/u02/oradata/epps/temp01.dbf'
   3:   3  size 2G 
   4:   4  autoextend on
   5:   5  next 100m
   6:   6  maxsize unlimited;
   7:  
   8: Tablespace created.
   9:  
  10: SQL> alter database default temporary tablespace temp1;
  11:  
  12: Database altered.
  13:  
  14:  
  15: SQL> drop tablespace temp including contents and datafiles;
  16:  
  17: Tablespace dropped.

System表空间调整

   1: SQL> shutdown immediate;
   2: Database closed.
   3: Database dismounted.
   4: ORACLE instance shut down.
   5: SQL> ! mv /u01/app/oracle/oradata/epps/system01.dbf /u01/oradata/epps/
   6:  
   7:  
   8: SQL> startup mount;
   9: ORACLE instance started.
  10:  
  11: Total System Global Area 5033164800 bytes
  12: Fixed Size                  2090848 bytes
  13: Variable Size             956303520 bytes
  14: Database Buffers         4060086272 bytes
  15: Redo Buffers               14684160 bytes
  16: Database mounted.
  17: SQL> alter database rename file '/u01/app/oracle/oradata/epps/system01.dbf'
  18:   2  to '/u01/oradata/epps/system01.dbf';
  19:  
  20: Database altered.
  21:  
  22: SQL> alter database open;
  23:  
  24: Database altered.
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
135 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
1月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
27天前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
|
1月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
Oracle 关系型数据库 数据库管理
oracle 移动数据文件
1.先将相应的数据文件 offline ALTER DATABASE DATAFILE'D:/ORACLE/ORADATA/DBA/TEST01.
573 0
|
2月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
190 64
|
8天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
41 11
|
21天前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
27天前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。

推荐镜像

更多