使用asmcmd命令
asmcmd实用程序是Oracle 10g版本2的新增特性,它是一个命令行实用工具,提供了一种简单的方法,可以使用类似于Linux外壳命令(例如ls和mkdir)的命令集,浏览和维护ASM磁盘组中的对象。ASM实例所维护对象的分层性质适合于采用类似Linux文件系统中浏览和维护文件所使用的命令集。
在使用asmcmd之前,必须确保将环境变量ORACLE_BASE、ORACLE_HOME和ORACLE_SID设置为指向ASM实例。对于本章所使用的ASM实例,这些环境变量的设置如下所示:
ORACLE_BASE=/u01/app/oracle ORACLE_HOME=/u01/app/oracle/product/11.1.0/db_1 ORACLE_SID=+ASM |
此外,必须以dba组中的用户登录到操作系统,因为asmcmd实用程序使用SYSDBA权限连接到数据库。操作系统用户通常是oracle,但也可以是dba组中的任何其他用户。
可以采用asmcmd command格式,一次使用一条asmcmd命令,或者也可以在Linux外壳提示符下输入asmcmd来交互式地启动asmcmd。为获得可用命令列表,可以在ASMCMD>提示符下输入help,这会得到更多的详细信息。表4-7列出了asmcmd命令及其简单说明,注意有些asmcmd命令只在Oracle Database 11g中可用。
表4-7 asmcmd命令汇总
asmcmd命令 | 是否只在11g中可用 | 说 明 |
cd | 改变目录到指定目录 | |
cp | 是 | 在ASM磁盘组之间复制文件,既可以在相同实例中复制,也可以在远程实例中复制 |
du | 循环显示当前目录和所有子目录的总体磁盘利用率 | |
exit | 终止asmcmd,并返回到操作系统外壳提示符 | |
find | 从指定目录开始查找名称的所有匹配(也可以使用通配符) | |
help | 列出asmcmd命令 | |
ls | 列出当前目录的内容 | |
lsct | 列出当前ASM客户数据库的有关信息 | |
lsdg | 列出所有磁盘组及其属性 | |
lsdsk | 是 | 列出此ASM实例可见的所有磁盘 |
md_backup | 是 | 为指定磁盘组创建元数据备份脚本 |
md_restore | 是 | 从备份恢复磁盘组 |
mkalias | 为系统生成的ASM文件名创建一个别名 | |
mkdir | 创建一个ASM目录 | |
pwd | 显示当前的ASM目录 | |
remap | 是 | 修理磁盘上遭到破坏或损坏的一系列物理块 |
rm | 删除ASM文件或目录 | |
rmalias | 删除一个ASM别名,但不删除此别名的目标 |
当启动asmcmd命令时,从ASM实例的文件系统的根节点开始。与Linux文件系统不同,根节点不是由前导正斜杠(/)来指明,而是由加号(+)来指明,但以下各级目录则使用正斜杠。在此示例中,启动asmcmd命令,并查询现有的磁盘组以及所有磁盘组中使用的总磁盘空间:
[oracle@dw ~]$ asmcmd ASMCMD> ls -l State Type Rebal Unbal Name MOUNTED NORMAL N N DATA/ MOUNTED HIGH N N DATA2/ MOUNTED NORMAL N N RECOV/ ASMCMD> du Used_MB Mirror_used_MB 2143 4399 ASMCMD> pwd + ASMCMD> |
与Linux外壳的ls命令一样,如果想要得到此命令所检索出来的对象的详细信息,可以在ls命令后追加-l参数。ls命令显示了本章所用的ASM实例中的3个磁盘组+DATA、+DATA2和+RECOV。
另外需要注意的是,du命令只显示已用的磁盘空间以及跨镜像磁盘组所用的总磁盘空间。想要获得每个磁盘组中的空闲空间量,则需要使用lsdg命令。
此示例查找文件名中包含字符串user的所有文件:
ASMCMD> pwd + ASMCMD> find . user* +DATA/DW/DATAFILE/USERS.259.627432977 +DATA/DW/DATAFILE/USERS2.267.627782171 +DATA/purch/users.dbf +DATA2/DW/DATAFILE/USERS3.256.627786775 ASMCMD> ls -l +DATA/purch/users.dbf Type Redund Striped Time Sys Name N users.dbf => +DATA/DW/DATAFILE/USERS.259.627432977 ASMCMD> |
注意包含+DATA/purch/users.dbf的这一行:find命令查找所有ASM对象。在此例中,它查找一个别名以及与此模式相匹配的数据文件。
最后可以对外部文件系统甚至其他ASM实例进行文件备份。在此示例中,使用cp命令将数据库的SPFILE备份到主机文件系统的/tmp目录中:
ASMCMD> pwd +data/DW ASMCMD> ls CONTROLFILE/ DATAFILE/ ONLINELOG/ PARAMETERFILE/ TEMPFILE/ spfiledw.ora ASMCMD> cp spfiledw.ora /tmp/BACKUPspfiledw.ora source +data/DW/spfiledw.ora target /tmp/BACKUPspfiledw.ora copying file(s)... file, /tmp/BACKUPspfiledw.ora, copy committed. ASMCMD> exit [oracle@dw ~]$ ls -l /tmp/BACKUP* -rw-r----- 1 oracle oinstall 2560 Jul 13 09:47 /tmp/BACKUPspfiledw.ora [oracle@dw ~]$ |
此示例也展示了数据库dw的所有数据库文件是如何存储在ASM文件系统中的。看起来这些数据库文件好像存储在传统的主机文件系统中,但实际上是由ASM进行管理的,其所提供的内置性能和冗余特性(为用于Oracle Database 11g已进行了优化)使DBA可以更轻松地管理数据文件。