我们今天说一说Oracle简化管理机制oracle managed files OMF
OMF是在oracle10G后出现的。
优点:不用指定数据文件路径大小,名字等。
以上描述等可以根据系统自动分配。
可以实现数据文件,日志文件,控制文件的自动管理
1.数据文件
这里取决一个参数
db_create_file_dest 文件路径在这里 默认大小为100M
在之前创建tablespace的时候为
create tablespace t datafile '/oracle/21321432432.dbf' size 100m;
现在采用的是
SQL> show parameter db_create_file_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/oracle/app/oracle/oradata/dd/system01.dbf
/oracle/app/oracle/oradata/dd/sysaux01.dbf
/oracle/app/oracle/oradata/dd/undotbs01.dbf
/oracle/app/oracle/oradata/dd/users01.dbf
SQL> alter system set db_create_file_dest = '/oracle/app/oracle/oradata/dd';
System altered.
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string oracle/app/oracle/oradata/dd
SQL>create tablespace t;
Tablespace created.
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/oracle/app/oracle/oradata/dd/system01.dbf
/oracle/app/oracle/oradata/dd/sysaux01.dbf
/oracle/app/oracle/oradata/dd/undotbs01.dbf
/oracle/app/oracle/oradata/dd/users01.dbf
/oracle/app/oracle/oradata/dd/DD/datafile/o1_mf_t_f4rkxzz1_.dbf
这里发现创建表空间的时候没有那么复杂,创建的数据文件会自动创建目录和名字,大小默认为100M,且为自扩展,步长为100M,increment_by为12800个块。
创建一个可控大小的数据文件:
create tablespace t1 datafile 10M ;
路径不用描述;
现在如果drop tablespace t;
那么datafile也会跟着删除;
在不使用OMF的时候,删除tablespace:
drop tablespace t ; 只会删除其表空间,但是数据文件依旧还在。
drop tablespace t include contents and datafiles; 这样删除会将数据文件跟着一起删除。
如果没有删除数据文件,想要创建一个表空间重用该数据文件:
create tablespace t datafile ' /oracle/t.dbf' reuse;即可
2. 日志文件的简化管理:
show patameter db_create_online
SQL> show parameter db_create_online_log_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
这里表示每个日志组下面存在五个成员。
一般情况下,一个组下有两个成员即可,现在启用前两个参数;
如果没有修改上面所提到的参数,直接添加日志组文件
alter database add logfile ;
这样直接添加的话会将日志文件直接添加到数据文件目录下,如果开启闪回区,也会在闪回区下创建一个文件。
因为show parameter db_recovery这也是一个OMF的路径。
SQL> show parameter db_recovery
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
现在操作日志组
select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------- ---
3 ONLINE /oracle/app/oracle/oradata/dd/redo03.log NO
2 ONLINE /oracle/app/oracle/oradata/dd/redo02.log NO
1 ONLINE /oracle/app/oracle/oradata/dd/redo01.log NO
SQL> alter database add logfile;
Database altered.
SQL> select member from v$logfile;
MEMBER
----------------------------------------
/oracle/app/oracle/oradata/dd/redo03.log
/oracle/app/oracle/oradata/dd/redo02.log
/oracle/app/oracle/oradata/dd/redo01.log
/oracle/app/oracle/oradata/dd/DD/onlinelog/o1_mf_4_f4rwkcq6_.log -----这里没有开启闪回区。
现在采用参数修改:
show parameter db_create_online
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
SQL>! mkdir /home/oracle/u01
SQL>! mkdir /home/oracle/u02
SQL> alter system set db_create_online_log_dest_1 = '/home/oracle/u01';
System altered.
SQL> alter system set db_create_online_log_dest_2='/home/oracle/u02';
System altered.
SQL> show parameter db_create_online
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_online_log_dest_1 string /home/oracle/u01
db_create_online_log_dest_2 string /home/oracle/u02
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
SQL>
SQL> alter database add logfile;
Database altered.
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES BLOCKSIZE MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------- ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- --------- ------------ ---------
1 1 4 52428800 512 1 NO CURRENT 972490 03-JAN-18 2.8147E+14
2 1 2 52428800 512 1 NO INACTIVE 948090 02-JAN-18 960763 02-JAN-18
3 1 3 52428800 512 1 NO INACTIVE 960763 02-JAN-18 972490 03-JAN-18
4 1 0 104857600 512 1 YES UNUSED 0 0
5 1 0 104857600 512 2 YES UNUSED 0 0
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER IS_
---------- ------- ------- ---------------------------------------------------------------------- ---
3 ONLINE /oracle/app/oracle/oradata/dd/redo03.log NO
2 ONLINE /oracle/app/oracle/oradata/dd/redo02.log NO
1 ONLINE /oracle/app/oracle/oradata/dd/redo01.log NO
4 ONLINE /oracle/app/oracle/oradata/dd/DD/onlinelog/o1_mf_4_f4rwkcq6_.log NO
5 ONLINE /home/oracle/u01/DD/onlinelog/o1_mf_5_f4rxo5xr_.log NO
5 ONLINE /home/oracle/u02/DD/onlinelog/o1_mf_5_f4rxo9l2_.log NO
6 rows selected.
每个日志组下具有两个成员。
也可以指定一个组:
alter database add logfile group 6; 这个只能创建一个新的组,一个不存在的组。
OMF不可以添加组的成员,但是可以添加组。
之前不使用OMF的时候,可以添加组成员的语句是
alter database add logfile member '/oracle/app/oracle/oradata/dd/dd/redo04.log' to group 3;
删除日志文件
alter database drop logfile group 7; 物理文件也会被删除。
3.控制文件的OMF
这里想要使用OMF的时候需要将parameter当中的control_file的参数reset 掉,否则没有办法使用OMF
alter system reset control_files scope=spfile sid=dd;
这里的参数
使用的和日志文件一样
db_create_online_log_dest的路径,指定几个路径,在创建控制文件的时候也会创建几个。在手工建库的时候会有此种情况
本文分享自微信公众号 - 最帅dba工作笔记,如有侵权,请联系 service001@enmotech.com 删除。




