Oracle 自动存储管理(ASM;请参阅本系列的第 1 部分)是 Oracle 数据库 10g 第 1 版中引入的专用文件系统,为数据文件的管理提供了急需的支持。
ASM 通过 SQL 命令管理,必要时也可以通过 Oracle Enterprise Manager 界面管理。同样,您也可以通过 SQL 接口或 GUI 看到它。大多数 DBA 都能接受该方法,但对那些不熟悉 SQL 的系统管理员来说学习 SQL 是件不大情愿的事。而作为一名 DBA,您可能不大愿意授予非 DBA Oracle Enterprise Manager 的访问权限。
在 Oracle 数据库 10g 第 2 版中,一个新的 ASM 命令行工具消除了这个隔阂。此接口称为 asmcmd,通过它您可以对 ASM 磁盘组中存储的数据文件(类似于文件系统和相应的文件)执行大量操作。该工具基于 Perl,因此后者应位于相应的路径中。如果未正确设置 Perl 的路径,则可能需要创建一个指向 Perl 所在目录的软链接,或只需修改文件 asmcmd 以反映 Perl 可执行文件的正确路径。
切记将 ORACLE_SID 设置为 ASM 实例(通常为 +ASM),而不是在服务器上运行的实际数据库实例。通过键入以下指令调用该命令
asmcmd -p使用 -p 选项可以在提示中显示当前路径。
现在,尝试一些非常简单的命令。调用命令行提示 (ASMCMD >) 后,键入 ls 查看已挂载的所有磁盘组。
ASMCMD [+] > ls DGROUP1/ DGROUP10/ DGROUP2/ DGROUP3/ DGROUP4/ DGROUP5/ DGROUP6/ DGROUP7/ DGROUP8/ DGROUP9/可以在此处看到在 ASM 实例中创建和挂载的所有磁盘组(DGROUP1 至 DGROUP10)。
现在,考察磁盘组 DGROUP1。可以使用 cd 命令像更改目录那样更改此磁盘组。
ASMCMD [+] > cd dgroup1甚至可以像在类 UNIX 或 Windows 这样的操作系统中那样,通过键入 cd .. 转到父目录。现在,确认在该磁盘组中创建了哪些文件。
ASMCMD [+dgroup1] > ls ORCL/好了,该磁盘组的下面增加了一个目录 ORCL。从它后面的正斜线 (/) 即可看出它是一个目录。使用 cd 命令进入该目录,然后执行命令 ls 显示内容。
ASMCMD [+dgroup1] > cd orcl ASMCMD [+dgroup1/orcl] > ls CONTROLFILE/ PARAMETERFILE/ control01.ctl => +DGROUP1/ORCL/CONTROLFILE/Current.256.551928759 spfileorcl.ora => +DGROUP1/ORCL/PARAMETERFILE/spfile.257.551932189 ASMCMD [+dgroup1/orcl] >除了 cd 和 ls 命令外,还可以使用其他类 UNIX 的命令,如 rm(用于删除目录或文件)、mkdir(用于创建目录)和 find(用于查找文件和目录)。
以下是一些其他命令:
lsdg(list diskgroup 的缩写)- 要查看该 ASM 实例挂载的磁盘,使用 lsdg 命令。
ASMCMD [+] > lsdg State Type Rebal Unbal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Name MOUNTED EXTERN N N 512 4096 1048576 100 40 0 40 0 DGROUP1/ MOUNTED EXTERN N N 512 4096 1048576 100 33 0 33 0 DGROUP10/ MOUNTED EXTERN N N 512 4096 1048576 100 41 0 41 0 DGROUP2/ MOUNTED EXTERN N N 512 4096 1048576 1000 787 0 787 0 DGROUP3/ MOUNTED EXTERN N N 512 4096 1048576 1000 537 0 537 0 DGROUP4/ MOUNTED EXTERN N N 512 4096 1048576 1000 928 0 928 0 DGROUP5/ MOUNTED EXTERN N N 512 4096 1048576 1000 742 0 742 0 DGROUP6/ MOUNTED EXTERN N N 512 4096 1048576 1000 943 0 943 0 DGROUP7/ MOUNTED EXTERN N N 512 4096 1048576 1000 950 0 950 0 DGROUP8/ MOUNTED EXTERN N N 512 4096 1048576 100 33 0 33 0 DGROUP9/除了显示磁盘名称以外,lsdg 还显示了其他相关信息,如已分配的空间大小、可用空间大小和脱机磁盘。该信息简化了问题的诊断。
du(disk utilization 的缩写)— 由于您已经在 ASM 磁盘上填充了数据,因此可能要查明磁盘组内部占用的空间大小。为此,可以像在 UNIX、Linux 或 Windows 中那样使用 du 命令。要了解目录内部已使用的空间大小,只需使用
ASMCMD [+] > du /dgroup1 Used_MB Mirror_used_MB 9 9以上命令显示已经使用了 9MB。由于您已经使用了外部镜像,因此所使用的磁盘空间总大小仍为 9MB (Mirror_used_MB)。如果使用了 ASM 磁盘的标准冗余参数,则该数字将有所不同。
help — 没有帮助那还叫什么工具!您不必记住每一个命令。只需键入 help 即可显示一个命令列表。然后,可以键入 help <command> 查看特定命令的信息。例如,在此您要查看 mkalias 命令。
ASMCMD [+] > help mkalias mkalias <system_alias> <user_alias> Create the specified user_alias for the system_alias.The user_alias must reside in the same diskgroup as the system_alias, and only one user_alias is permitted per file.The SQLPLUS equivalent is "alter diskgroup <dg_name> add alias <user_alias> for <system_alias>".您可以看到,这个丰富的命令集使 ASM 成为一个可管理性很高的文件系统,您甚至不需要研究 SQL 接口或 Oracle Enterprise Manager。还可以将这些命令轻松置于 shell 脚本中,从而为更多用户所接受。
删除空数据文件
假设您刚刚向错误目录或表空间中添加了一个数据文件 - 一个很常见的错误。并不会丢失一切;由于该数据文件不包含任何数据,因此您可以轻松地删除它,是这样吗?
遗憾的是,您无法删除它。在 Oracle 数据库 10g 第 2 版之前,删除数据文件的唯一有效方法就是删除整个表空间,然后在没有该特定文件的情况下重新构建它。如果表空间包含数据,则必须通过既费时又费力的过程将数据存储到单独的位置并恢复它。除了不方便以外,该过程还使表空间不可用。
幸运地是,在 Oracle 数据库 10g 第 2 版中,该过程已得到简化:您可以只删除数据文件。例如,以下命令将从表空间和服务器中删除指定的数据文件。
alter tablespace users drop datafile '/tmp/users01.dbf' /
但存在一些限制:1数据文件必须为空才能删除。无法删除表空间中的最后一个数据文件;必须删除表空间本身。同时,表空间必须处于联机和读写状态。