由于具备自动存储管理命令行工具、直连 SGA 访问、支持联机分区重定义等特性,这个自我管理的数据库变得更加强大。
这一部分涉及:
· ASM 命令行工具
· 删除空数据文件
· 针对挂起/低速系统的直连 SGA 访问
· 联机重新定义分区
· 在内存中检查数据块完整性,而非在磁盘上检查
· 联机限制更改
· 更快的启动
· 在 Oracle Enterprise Manager 中管理多个对象
· 自动的 Segment Advisor
· 基于事件的调度
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
ASMCMD [+] > help mkalias mkalias您可以看到,这个丰富的命令集使 ASM 成为一个可管理性很高的文件系统,您甚至不需要研究 SQL 接口或 Oracle Enterprise Manager。还可以将这些命令轻松置于 shell 脚本中,从而为更多用户所接受。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 add alias for ".
alter tablespace users drop datafile '/tmp/users01.dbf' /但存在一些限制:1数据文件必须为空才能删除。无法删除表空间中的最后一个数据文件;必须删除表空间本身。同时,表空间必须处于联机和读写状态。


SQL> create table accounts_int 2 tablespace accdata 3 as 4 select * from accounts 5 where 1=2 6 /注意分区现在所在的位置:
SQL> select partition_name, tablespace_name, num_rows 2 from user_tab_partitions 3 / PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------------ ---------- P1 USERS 1014 P2 USERS 1042 P3 USERS 1002 P4 USERS 964 P5 USERS 990 P6 USERS 1042 P7 USERS 915 P8 USERS 983 P9 USERS 1047 P10 USERS 1001 PMAX USERS 0 11 rows selected.所有分区均位于 USERS 表空间中。现在,将第一个分区 P1 移到表空间 ACCDATA 中。
SQL> begin 2 dbms_redefinition.start_redef_table ( 3 uname => 'ARUP', 4 orig_table => 'ACCOUNTS', 5 int_table => 'ACCOUNTS_INT', 6 part_name => 'P1' 7 ); 8 end; 9 / PL/SQL procedure successfully completed.注意第 6 行,其中的 part_name 参数指定要重新组织的分区。如果省略该参数,则将同时重新定义所有分区。 现在,将中间表与原始表同步。(仅当要对表 ACCOUNTS 进行更新时才需要执行该操作。)
SQL> begin 2 dbms_redefinition.sync_interim_table ( 3 uname => 'ARUP', 4 orig_table => 'ACCOUNTS', 5 int_table => 'ACCOUNTS_INT', 6 part_name => 'P1' 7 ); 8 end; 9 / PL/SQL procedure successfully completed.最后,完成重新定义过程。
SQL> begin 2 dbms_redefinition.finish_redef_table ( 3 uname => 'ARUP', 4 orig_table => 'ACCOUNTS', 5 int_table => 'ACCOUNTS_INT', 6 part_name => 'P1' 7 ); 8 end; 9 / PL/SQL procedure successfully completed.确认分区 P1 确已移到表空间 ACCDATA 中。
SQL> select partition_name, tablespace_name, num_rows 2 from user_tab_partitions 3 / PARTITION_NAME TABLESPACE_NAME NUM_ROWS ------------------------------ ------------------------------ ---------- P1 ACCDATA 1014 P2 USERS 1042 P3 USERS 1002 P4 USERS 964 P5 USERS 990 P6 USERS 1042 P7 USERS 915 P8 USERS 983 P9 USERS 1047 P10 USERS 1001 PMAX USERS 0 11 rows selected.行了!对其他分区重复该过程。 相比而言,如果您重新组织了整个表,则将 (a) 需要一个大小与整个表相等的空间,(b) 为整个表生成重做(必须存在),否则将产生错误。但通过对单个分区执行此过程,将减少单个分区的空间要求,并减少只为该分区生成的重做。 使用这个强大而有用的特性,您可以联机重新组织非常大的对象(就像大多数已分区对象一样)。此外,还应注意如何将统计信息复制到已重新定义的表上(如以上查询中的 NUM_RWS 值所示);您不必为新建的表或分区重新生成统计信息。

audit_file_dest = '/auditfs' audit_trail = xml并重新启动该实例。但这两个参数不是动态的;一旦设置,将把审计跟踪写入目录 /auditfs 中。参数 audit_file_dest 是可选的;默认为 $ORACLE_HOME/rdbms/audit 目录。这些审计跟踪文件将为扩展名为 .xml 的 XML 文件。 以下是一个 XML 格式的审计跟踪示例:
-这些跟踪文件可被 XML 分析器轻松分析,从中提取有用的信息。您甚至可以将它们作为 XML 类型加载到数据库中,然后使用 XML 查询(详见本系列第 1 部分中的介绍)在 SQL 内部查询它们。 在 Oracle 数据库 10g 第 2 版中,可以将此 XML 文件与 SQL 查询相结合,从中进行选择,就好像它是来自一个 SQL 源似的。还有一个预定义的动态视图 V$XML_AUDIT_TRAIL,用于从固定表 X$XML_AUDIT_TRAIL 中进行选择。此动态视图在结构方面类似于常规审计跟踪视图 DBA_AUDIT_TRAIL。 对于 DBA 而言,使用 XML 格式的审计跟踪就可以通过第三方的 XML 分析器和编辑器操作文件,并可以通过接受 XML 作为输入的工具发布报表。您不再需要编写自己的分析器来解释这些审计跟踪文件。10.2 -8 1 2005-03-05T20:52:51.012045 / oracle oradba 18067 pts/0 0 0 SYSDBA CONNECT
select * from table (dbms_space.asa_recommendations());由于列数较多,因此看清楚输出不太容易。以下只是一个以垂直格式显示的记录。
TABLESPACE_NAME :USERS SEGMENT_OWNER :ARUP SEGMENT_NAME :ACCOUNTS SEGMENT_TYPE :TABLE PARTITION PARTITION_NAME :P7 ALLOCATED_SPACE : 0 USED_SPACE : 0 RECLAIMABLE_SPACE : 0 CHAIN_ROWEXCESS : 17 RECOMMENDATIONS :The object has chained rows that can be removed by re-org. C1 : C2 : C3 : TASK_ID : 261 MESG_ID : 0此处您将看到,模式 ARUP 中表 ACCOUNTS 的分区 P7 包含链接行。执行重新组织将帮助加快该分区全表扫描的速度。 此信息由在预定义的维护时间窗(周末下午 10 点至早上 6 点以及周六中午 12 点至周一中午 12 点)内运行的自动调度作业收集;您可以使用 Oracle Enterprise Manager 更改这些时间窗。在此时间内,该作业将对段进行扫描以获取符合要求的段。如果扫描无法及时完成,该作业将暂停并在第二天的时间窗继续扫描。 该作业存储有关在名为 wri$_segadv_objlist 的表中检查的段和表空间的信息。可以查看有关在视图 DBA_AUTO_SEGADV_CTL 中检查的段的信息。
begin dbms_scheduler.create_event_schedule ( schedule_name => 'accadmin.acc_mgr_change', start_date => systimestamp, event_condition => 'tab.user_data.event_name = ''acc_mgr_change''', queue_spec => 'proc_queue'); end;接着,您将创建一个作业以遵循此调度。您也可以直接调度一个作业而不用先创建一个调度。
begin dbms_scheduler.create_job ( job_name => acc_mgr_change, program_name => acc_mgr_change_procs, start_date => 'systimestamp, event_condition => 'tab.user_data.event_name = ''acc_mgr_change''', queue_spec => 'proc_queue' enabled => true); end;默认值是 UNLIMITED。 如果事件(而不是特定时间)是触发作业的决定因素,则基于事件的调度很有帮助。
在第 3 部分中,我将介绍性能特性。
http://www.oracle.com/technology/global/cn/pub/articles/10gdba/nanda_10gr2dba_part2.html
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/1384/viewspace-432934/ ,如需转载,请注明出处,否则将追究法律责任。