测试环境:Solaris10+Oracle 10g (个人学习笔记)
OMF管理文件 和 手动管理文件比较
手动管理文件 需要手动指定文件存储位置,包括名字,路径,而ORACLE-MANAGE-FILE 这一切就交给数据库系统来完成,OMF管理包括控制还包括了OS文件:如果你手动管理 当删除一个数据文件 的时候只是讲控制文件里面的信息更改了,但是真正的OS文件仍然存在
OMF管理 数据文件
使用OMF 管理 数据文件需要指定 一个参数 :db_create_file_dest
默认的是100M,采用的是autoextend 自动扩展
SQL> show parameter db_create
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string
db_create_online_log_dest_1 string /thirddisk/root/redolog
db_create_online_log_dest_2 string /fourthdisk/root/redolog
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string
db_create_online_log_dest_1 string /thirddisk/root/redolog
db_create_online_log_dest_2 string /fourthdisk/root/redolog
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
我现在使用的是三面的几个参数 第一个 就是设置数据文件的自动存放位置
SQL>
alter system
set db_create_file_dest=
'/export/home/oracle/test' ;
alter system set db_create_file_dest= '/export/home/oracle/test'
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-01261: Parameter db_create_file_dest destination string cannot be
translated
ORA-01262: Stat failed on a file destination directory
Intel SVR4 UNIX Error: 2: No such file or directory
SQL> alter system set db_create_file_dest= '/export/home/oracle';
System altered.
SQL> show parameter db_create_file_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string /export/home/oracle
alter system set db_create_file_dest= '/export/home/oracle/test'
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-01261: Parameter db_create_file_dest destination string cannot be
translated
ORA-01262: Stat failed on a file destination directory
Intel SVR4 UNIX Error: 2: No such file or directory
SQL> alter system set db_create_file_dest= '/export/home/oracle';
System altered.
SQL> show parameter db_create_file_dest;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string /export/home/oracle
上面可以看到 设置目录 要保存目录存在,继续 我们还是先
1>手动添加一个数据文件
SQL> l
1* create tablespace t1 logging datafile '/export/home/oracle/t1.dbf' size 50M
SQL> /
Tablespace created.
SQL> !ls
afiedt.buf local.cshrc local.login local.profile t1.dbf
SQL> drop tablespace t1 including contents;
Tablespace dropped.
SQL> ls
SP2-0042: unknown command "ls" - rest of line ignored.
SQL> !ls
afiedt.buf local.cshrc local.login local.profile t1.dbf
1* create tablespace t1 logging datafile '/export/home/oracle/t1.dbf' size 50M
SQL> /
Tablespace created.
SQL> !ls
afiedt.buf local.cshrc local.login local.profile t1.dbf
SQL> drop tablespace t1 including contents;
Tablespace dropped.
SQL> ls
SP2-0042: unknown command "ls" - rest of line ignored.
SQL> !ls
afiedt.buf local.cshrc local.login local.profile t1.dbf
看看 当删除表空间的饿时候 t1.dbf仍然存在 没有节省空间,不过 ORACLE 10G也提供了 一个兼容的方式
SQL> !rm -r t1.dbf
SQL> !ls
afiedt.buf local.cshrc local.login local.profile
SQL> create tablespace t1 logging datafile '/export/home/oracle/t1.dbf' size 50M;
Tablespace created.
SQL> !ls
afiedt.buf local.cshrc local.login local.profile t1.dbf
SQL> drop tablespace t1 including contents and datafiles;
Tablespace dropped.
SQL> !ls
afiedt.buf local.cshrc local.login local.profile
这样 就删除了
2>OMF创建数据文件
SQL> create tablespace t1;
Tablespace created.
SQL> !ls ORCL/datafile
o1_mf_t1_54yn91dp_.dbf
Tablespace created.
SQL> !ls ORCL/datafile
o1_mf_t1_54yn91dp_.dbf
看到效果了吧! 我没有指定文件的存储位置 自动给我存储在了 上面设置的/export/home/oracle目录下 它自己简历了一个 SID/datafile目录
下面看看删除效果
SQL>
drop tablespace t1;
Tablespace dropped.
SQL> !ls ORCL/datafile
Tablespace dropped.
SQL> !ls ORCL/datafile
奇怪吧 没有文件了 Oracle RDMS 给我们自动讲OS文件删除了 OK
OMF管理 REDO日志文件
我没经验不过觉得这个比管理数据文件更重要(在系统安全方面),而OMF 管理数据文件 注重节约空间,首先 将将REDO文件 REDO文件 在数据恢复的时候起着非常大的作用,所以对于REDO 文件 我们需要格外注意(虽然有归档文件)但是 不排除该文件没有被归档 就给物理破坏了,如果 你的日志文件都在一个磁盘上如果磁盘坏掉那么系统不就DOWN掉了
redo文件是按照组来管理的 一个数据库 至少有两个组,一个组至少有一个成员
当在一个组日志写满了就自动切换到另外一个组进行循环的写日志,但是
当一个组的一个日志文件被破坏了 但是还有其他日志成员 此时数据库仍然能够正常工作
这个也体现了 日志文件的 备份 和 存放 在不痛物理介质的重要性了
创建数据库的时候 默认是建立三个组 每个组一个成员 此时 你可以手动 进行添加日志成员,将日志成员添加到 不同的物理介质上
SQL> select * from v$logfile;
rows will be truncated
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------
3 ONLINE /seconddisk/root/oracle/product/10.2.0/oradata/orcl/redo03. log
2 STALE ONLINE /seconddisk/root/oracle/product/10.2.0/oradata/orcl/redo02. log
1 STALE ONLINE /seconddisk/root/oracle/product/10.2.0/oradata/orcl/redo01. log
4 ONLINE /thirddisk/root/redolog/ORCL/onlinelog/o1_mf_4_54yln8n2_. log
4 ONLINE /fourthdisk/root/redolog/ORCL/onlinelog/o1_mf_4_54ylnfqx_. log
1 INVALID ONLINE /thirddisk/root/redolog/ORCL/onlinelog/redo01a. log
2 INVALID ONLINE /fourthdisk/root/redolog/ORCL/onlinelog/redo02a. log
7 rows selected.
SQL> alter database add logfile member '/fourthdisk/root/redolog/ORCL/onlinelog/redo03a.log' to group 3;
Database altered.
SQL> select * from v$logfile;
rows will be truncated
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------
3 ONLINE /seconddisk/root/oracle/product/10.2.0/oradata/orcl/redo03. log
2 STALE ONLINE /seconddisk/root/oracle/product/10.2.0/oradata/orcl/redo02. log
1 STALE ONLINE /seconddisk/root/oracle/product/10.2.0/oradata/orcl/redo01. log
4 ONLINE /thirddisk/root/redolog/ORCL/onlinelog/o1_mf_4_54yln8n2_. log
4 ONLINE /fourthdisk/root/redolog/ORCL/onlinelog/o1_mf_4_54ylnfqx_. log
1 INVALID ONLINE /thirddisk/root/redolog/ORCL/onlinelog/redo01a. log
2 INVALID ONLINE /fourthdisk/root/redolog/ORCL/onlinelog/redo02a. log
3 INVALID ONLINE /fourthdisk/root/redolog/ORCL/onlinelog/redo03a. log
8 rows selected.
上面就是 在3组添加了一个日志文件 redo03a.log 到 第四块硬盘上
达到了上面的要求 multiplex
下面使用OMF来创建日志组 就很方便了
SQL> show parameter db_create_online_log_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_online_log_dest_1 string /thirddisk/root/redolog
db_create_online_log_dest_2 string /fourthdisk/root/redolog
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
我设置了两个地方 当创建的时候 就在这两个地方分别创建一个日志组成员
SQL>
alter
database
add logfile
group 5;
Database altered.
Database altered.
看一下物理文件
SQL> !ls /fourthdisk/root/redolog/ORCL/onlinelog
o1_mf_4_54ylnfqx_. log o1_mf_5_54yo3bvx_. log redo02a. log redo03a. log
SQL> !ls /thirddisk/root/redolog/ORCL/onlinelog/
o1_mf_4_54yln8n2_. log o1_mf_5_54yo36xd_. log redo01a. log
分别多了一个文件 01_mf_5...log文件
下面尝试删除日志组
SQL>
alter
database
drop logfile
group 5;
Database altered.
SQL> !ls /fourthdisk/root/redolog/ORCL/onlinelog
o1_mf_4_54ylnfqx_. log redo02a. log redo03a. log
SQL> !ls /thirddisk/root/redolog/ORCL/onlinelog/
o1_mf_4_54yln8n2_. log redo01a. log
Database altered.
SQL> !ls /fourthdisk/root/redolog/ORCL/onlinelog
o1_mf_4_54ylnfqx_. log redo02a. log redo03a. log
SQL> !ls /thirddisk/root/redolog/ORCL/onlinelog/
o1_mf_4_54yln8n2_. log redo01a. log
OK 自动那个将OS文件删除了
下面说说什么时候 不能删除日志文件 或者 文件组
第一: 当当前日志在使用
第二:运行在归档模式下 没有归档 的 (可以通过archive log current进行归档)
第三:该日日志组只有一个成员
第四:当只有两个日志组 不能删除日志组
OMF 管理文件 给数据库管理员带来了极大的方面 ,他对数据库的主要文件 进行集中管理
附加:
创建表空间: 注意: 如果使用了local管理方式 就不能指定默认的storage存储参数
SQL>
create tablespace t1 extent management local autoallocate
2 default storage(initial 100K
3 next 100K
4 pctincrease 50
5 minextents 1
6 maxextents 500
7 )
8 /
create tablespace t1 extent management local autoallocate
*
ERROR at line 1:
ORA-25143: default storage clause is not compatible with allocation policy
2 default storage(initial 100K
3 next 100K
4 pctincrease 50
5 minextents 1
6 maxextents 500
7 )
8 /
create tablespace t1 extent management local autoallocate
*
ERROR at line 1:
ORA-25143: default storage clause is not compatible with allocation policy
报告了错误,使用autoallocate改成 uniform size 大小 指定福鼎分区大小 一样的效果
只有 采用字典管理才可以 指定存储参数
SQL>
create tablespace t1
2 extent management dictionary
3 default storage(
4 initial 100K
5 next 100K
6 pctincrease 50minextents 1
7 maxextents 500
8 )
9 /
Tablespace created.
2 extent management dictionary
3 default storage(
4 initial 100K
5 next 100K
6 pctincrease 50minextents 1
7 maxextents 500
8 )
9 /
Tablespace created.