全面学习和应用ORACLE ASM特性--(4)管理asm磁盘组中目录和文件
2.3 mount/unmount 磁盘组
只有被mount的磁盘组才能被数据库使用并执行add/drop等磁盘操作,ASM中
的磁盘组默认会在ASM实例启动时自动加载,当然也可以手动通过命令行语句
mount/unmount磁盘组。
查询ASM实例中创建的磁盘组可以通过V$ASM_DISKGROUP视图查看,例如:
SQL> select group_number,name,state,total_mb,free_mb from v$asm_diskgroup;
GROUP_NUMBER NAME STATE TOTAL_MB FREE_MB
------------ ------------------------------ ----------- ---------- ----------
1 ASMDISK1 MOUNTED 20472 18667
2 ASMDISK2 MOUNTED 16378 14621
当前两个磁盘组均为MOUNT状态,要将其置为UNMOUNT,执行语句如下,例如
将ASMDISK2磁盘组UNMOUNT:
SQL> alter diskgroup asmdisk2 dismount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 ASMDISK1 MOUNTED
0 ASMDISK2 DISMOUNTED
注意哟,UNMOUNT磁盘组的话务必慎重操作,要确保UNMOUNT的磁盘组中保存的
文件对应的数据库当前未启动,而且该操作也会直接导致数据库SHUTDOWN。
再将其置回MOUNT状态,操作如下:
SQL> alter diskgroup asmdisk2 mount;
Diskgroup altered.
SQL> select group_number,name,state from v$asm_diskgroup;
GROUP_NUMBER NAME STATE
------------ ------------------------------ -----------
1 ASMDISK1 MOUNTED
2 ASMDISK2 MOUNTED
2.4 管理目录及文件
ASM 磁盘组中文件和目录的管理自动化水平相当高,应该说基本上完全不需要DBA
参与,它自己就能玩的很好,当然,如果你非要动动手,那也是可以的。
2.4.1 管理磁盘组目录
创建新目录:
SQL> alter diskgroup asmdisk2 add directory '+ASMDISK2/JSS1';
Diskgroup altered.
修改目录名:
SQL> alter diskgroup asmdisk2 rename directory '+ASMDISK2/JSS1'
2 to '+ASMDISK2/JSS2';
Diskgroup altered.
删除目录名:
SQL> alter diskgroup asmdisk2 drop directory '+ASMDISK2/JSS2';
Diskgroup altered.
实际上,ASM中目录和文件的管理,也可以通过ASMCMD命令行方式进行,该命令
行进入之后,是一个类似文件系统的管理界面,ORACLE提供了一些最基础的,如
cd、ls、mkdir、rm等等几个有限的操作命令,如果对这部分内容感兴趣,可以参考
官方文档中的介绍,或者搭个环境实践操作,可用命令很少且简单,熟悉Linux/Unix
的话极易上手。
2.4.2 管理别名(Alias Names)
别名就是外号,比如说当系统自动产生的名称太过复杂不怎么好记,DBA可以
通过别名,为它创建一个简单化的名称,而又不会对其现有名称造成任何影响。
ASM中创建别名是通过alter diskgroup的alias子句实现,支持增加/修改/删除等
多项操作。V$ASM_ALIAS视图中可以查询到当前实例中创建的别名。
例如,增加别名:
SQL> alter diskgroup asmdisk2 add alias '+ASMDISK2/repdb/datafile/temp01.dbf'
for '+ASMDISK2/repdb/TEMPFILE/TEMP.267.714576831';
修改别名:
SQL> alter diskgroup asmdisk2 rename alias '+ASMDISK2/repdb/datafile/temp01.dbf'
to '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
删除别名:
SQL> alter diskgroup asmdisk2 drop alias '+ASMDISK2/repdb/TEMPFILE/temp01.dbf';
不管是添加/删除或是修改别名,对原有文件路径均不会有影响。
2.4.3 删除磁盘组中文件/别名
破坏总是最简单的,当然我不是说删除就一定是破坏,不过从严谨的角度讲,删除这
样的操作要少做(没说不做),做前得再三确认,三思而行并留有备份,即使做错了,还
有恢复的可能。
当然啦,ASM中遇到删除文件这样需求的机率很低,但也不是完全没有,比如说执行
了数据库不完全恢复操作后,某部分数据文件就不再需要,而恢复操作不会处理这部分
文件,为合理利用空间,就会需要DBA手动删除这类文件,真遇到这样的需求,表急,
语法也是黑简单的呐,例如,删除磁盘组2上的别名temp01:
SQL> alter diskgroup asmdisk2 drop file '+ASMDISK2/repdb/datafile/temp01.dbf';
Diskgroup altered.
没错,即能删文件也能删别名,只不过如果删除的是文件的话,其关联的别名
(Alias)也会被自动删除。
2.4.4 删除磁盘组
太简单了,语法:drop diskgroup gpname即可!不演示了!需要注意一点,如果
删除的diskgroup非空的话,直接执行上述语句会报错,这时候可以通过附加including
contents子句,来自动删除该磁盘组中包含的文件。删除磁盘组的操作会自动修改spfile
中ASM_DISKGROUPS初始化参数的值(如果使用了SPFILE的话) .
全面学习和应用ORACLE ASM特性--(5)管理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,用来确保文件的唯一;
---------------------------------------------------------
下面是Oracle 11g R2 RAC下ASMCMD下看到的文件名称:
可以看到,建立test表空间,虽然自己指定了test01.dbf文件,但是
还是会生成一个TEST.340.740166807 文件与之对应。同样test02.dbf
对应TEST.341.740166937 。其中test01.dbf,test02.dbf是别名而已。
ASMCMD> pwd
+oradata/racdb/datafile
ASMCMD> ls
SYSAUX.261.739387301
SYSTEM.260.739387283
TEST.340.740166807
TEST.341.740166937
UNDOTBS1.262.739387315
UNDOTBS2.264.739387351
USERS.265.739387361
test01.dbf
test02.dbf
ASMCMD> ls -l
Type Redund Striped Time Sys Name
DATAFILE UNPROT COARSE JAN 12 22:00:00 Y SYSAUX.261.739387301
DATAFILE UNPROT COARSE JAN 11 17:00:00 Y SYSTEM.260.739387283
DATAFILE UNPROT COARSE JAN 11 17:00:00 Y TEST.340.740166807
DATAFILE UNPROT COARSE JAN 11 17:00:00 Y TEST.341.740166937
DATAFILE UNPROT COARSE JAN 11 17:00:00 Y UNDOTBS1.262.739387315
DATAFILE UNPROT COARSE JAN 11 17:00:00 Y UNDOTBS2.264.739387351
DATAFILE UNPROT COARSE JAN 11 17:00:00 Y USERS.265.739387361
N test01.dbf => +ORADATA/RACDB/DATAFILE/TEST.340.740166807
N test02.dbf => +ORADATA/RACDB/DATAFILE/TEST.341.740166937
---------------------------------------------------------
实际上,即使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.
看起来好像OK了,其实不然,到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了,之
前的三思笔记系统文章中对此已有描述,此处不再重复深度,感兴趣的朋友
可以翻看之前的三思笔记系统文章,或者浏览官方文档。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31448824/viewspace-2139532/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/31448824/viewspace-2139532/