3 、管理ASM磁盘中的文件

3 、管理ASM磁盘中的文件

  ASM 中的磁盘与物理磁盘并非完全一一对应,由于ASM在存储数据时是打散处理,ASM中的(同一个)文件在保存时也并非保存在某个磁盘中,而是完全由ASM自动控制,甚至连创建文件时的文件名,都由ASM通过OMF(Oracle managed files)管理。

  接下来,三思跟大家一起聊聊ASM中文件的那些事儿~~~

1 、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

Data Pump dumpset

Automatically generated control file backup

Cross-platform transportable datafiles

  如果想向ASM中存储任意类型的文件,FTP会是个好方式,yangtingkun的这篇BLOG详细描述了这一方法: http://space.itpub.net/4227/viewspace-448289 ,通过这一方式,可以将任意文件放入ASM中,而不用考虑是否能够被直接支持,这其实提供了很大的灵活度,ASM不再是个严丝合缝的黑匣子,它也是有缝儿的~~

2、ASM中的文件名

  ASM 创建的文件均由系统自动命名,这种命名方式官方定义为 完全定义文件名 (Fully Qualified Filename) ,这种方式命名的文件包含完整的文件路径,比如像这样的形式:

    +ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831

  上述名称是在文件创建时完全由ASM自动生成,事上述名称的生成格式为:

    +diskgroup/dbname/file_type/file_type_tag.file.incarnation
  • +diskgroup :磁盘组名称;
  • dbname :数据库的DB_UNIQUE_NAME参数值;
  • file_type :创建的文件类型,比如CONTROLFILE/DATAFILE/ONLINELOG/ARCHIVELOG/TEMPFILE/BACKUPSET/FLASHBACK等等,类型众多此处不一一例举;
  • file_type_tag :文件类型的标签,比如表空间对应的通常为该表空间名称;
  • file.incarnation :文件序号+incarnation,用来确保文件的唯一;

  实际上,即使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了,之前的三思笔记系统文章中对此已有描述,此处不再重复深度,感兴趣的朋友可以翻看之前的三思笔记系统文章,或者浏览官方文档。