Chinaunix首页 | 论坛 | 博客
  • 博客访问: 103725452
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-20 21:23:11

    文章来源: 
  ASM 命令行工具

  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数据文件必须为空才能删除。无法删除表空间中的最后一个数据文件;必须删除表空间本身。同时,表空间必须处于联机和读写状态。

阅读(316) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~