2013年(350)
分类: Oracle
2013-04-28 10:12:20
ASM 中的磁盘与物理磁盘并非完全一一对应,由于ASM在存储数据时是打散处理,ASM中的(同一个)文件在保存时也并非保存在某个磁盘中,而是完全由ASM自动控制,甚至连创建文件时的文件名,都由ASM通过OMF(Oracle managed files)。
接下来,三思跟大家一起聊聊ASM中文件的那些事儿~~~
大多数的ORACLE文件类型均能被ASM支持,注意,我说的是大多数,而没说全部,像trace文件、alert文件、dmp文件等还不能直接被存储到ASM中,注意,我说的是不能直接,没说不能间接。
下表列出了ASM直接支持的文件类型:
Control files |
Datafiles |
Redo log files |
Archive log files |
Trace files |
Temporary files |
Datafile backup pieces |
Datafile incremental backup pieces |
Archive log backup piece |
Datafile copy |
Persistent initialization parameter file (SPFILE) |
Disaster recovery configurations |
Flashback logs |
Change tracking file |
Pump dumpset |
Automatically generated control file backup |
Cross-platform. transportable datafiles |
如果想向ASM中存储任意类型的文件,FTP会是个好方式,yangtingkun的这篇BLOG详细描述了这一方法:http://space.itpub.net/4227/viewspace-448289,通过这一方式,可以将任意文件放入ASM中,而不用考虑是否能够被直接支持,这其实提供了很大的灵活度,ASM不再是个严丝合缝的黑匣子,它也是有缝儿的~~
ASM 创建的文件均由系统自动命名,这种命名方式官方定义为 完全定义文件名 (Fully Qualified Filename) ,这种方式命名的文件包含完整的文件路径,比如像这样的形式:
上述名称是在文件创建时完全由ASM自动生成,事上述名称的生成格式为:
实际上,即使DBA在创建时想手动指定这样格式的文件名也是不行的(即使指定了,创建的也只是别名),例如:
SQL> alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs.280.722005095' size 100m;
alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs.280.722005095' size 100m
*
ERROR at line 1:
ORA-01276: Cannot add file +ASMDISK2/repdb/datafile/jsstbs.280.722005095. File has an Oracle Managed Files file name.指定非OMF格式的方式名:
SQL> alter tablespace jsstbs add datafile '+ASMDISK2/repdb/datafile/jsstbs02.dbf' size 100m;
Tablespace altered.看起来o了,其实不然,到asmcmd下查看一下实际创建的文件:
ASMCMD> pwd
+ASMDISK2/repdb/datafile
ASMCMD> ls -l jsstbs*
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE JUN 18 12:00:00 Y JSSTBS.263.714575967
DATAFILE UNPROT COARSE JUN 18 13:00:00 Y JSSTBS.271.722005397
N jsstbs01.dbf => +ASMDISK2/repdb/datafile/JSSTBS.263.714575967
N jsstbs02.dbf => +ASMDISK2/repdb/datafile/JSSTBS.271.722005397由上可以看出,系统虽然创建了名为jsstb02.dbf的文件,但只是别名,实际指向了由系统自动命名的 JSSTBS.271.722005397 。
即然文件创建时无法指定实际文件名及路径,那么创建语句当然还可以更简化,例如:
SQL> alter tablespace jsstbs add datafile '+ASMDISK2' size 10m;
Tablespace altered.
SQL> select file_name from dba_data_files where tablespace_name='JSSTBS';
FILE_NAME
--------------------------------------------------
+ASMDISK2/repdb/datafile/jsstbs01.dbf
+ASMDISK2/repdb/datafile/jsstbs02.dbf
+ASMDISK2/repdb/datafile/jsstbs.272.722005653这样就完全由ORACLE的OMF控制和管理了。
如果设置了初始化参数db_create_file_dest,甚至连磁盘组名都不需要写了,例如:
SQL> show parameter db_create_file_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string +ASMDISK2
SQL> alter tablespace jsstbs add datafile size 10m;
Tablespace altered.通过上述示例,相信大家对于使用ASM做为存储的数据库,添加数据文件已无疑惑,不过如何添加其它类型文件,比如重做日志文件、归档文件(当然归档文件本来也就不需要特殊处理,只要LOG_ARCHIVE_DEST_n设置好即可)等还不明了,其实没有那么复杂,操作方式都是同理的。由上述示例可知,ASM中文件名完全可由其自行管理,因此在创建文件时,只需指定磁盘组路径即可,文件名嘛,就由ASM自己玩吧~~
对于现有系统想迁入ASM存储,最简单的方式,莫过于使用RMAN了,之前的系统文章中对此已有描述,此处不再重复深度,感兴趣的朋友可以翻看之前的三思笔记系统文章,或者浏览官方文档。