使用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可以更轻松地管理数据文件。