www. On IT Road .com

脚本

该脚本可以在 ASM 实例上运行,如下所示:

$ sqlplus '/ as sysdba'
sql>@files_not_opened

脚本如下:

set pagesize 0
set linesize 200
col full_alias_path format a80
/*+ ---------------------------------------------------------------
    Query will return all the files stored on ASM but not currenlty
    opened by any database client of the diskgroups
    ordered by group number, file type
    ---------------------------------------------------------------*/
select * from (
/*+ ----------------------------------------------------------------
    1st branch returns all the files stored on ASM
    -----------------------------------------------------------------*/
select  x.gnum,x.filnum,x.full_alias_path,f.ftype from (
SELECT gnum,filnum,concat('+'||gname, sys_connect_by_path(aname, '/')) full_alias_path
FROM (SELECT g.name gname, a.parent_index pindex, a.name aname,
            a.reference_index rindex,a.group_number gnum,a.file_number filnum
      FROM v$asm_alias a, v$asm_diskgroup g
      WHERE a.group_number = g.group_number)
START WITH (mod(pindex, power(2, 24))) = 0 CONNECT BY PRIOR rindex = pindex) x,
(select group_number gnum,file_number filnum, type ftype from v$asm_file order by group_number,file_number) f
where x.filnum != 4294967295
and x.gnum=f.gnum and x.filnum=f.filnum
MINUS
/*+ -------------------------------------------------------------
    2nd branch returns all the files stored on ASM
    and currently opened by any database client of the diskgroups
    -----------------------------------------------------------------*/
select x.gnum,x.filnum,x.full_alias_path,f.ftype
from ( select id1 gnum,id2 filnum from v$lock where type='FA' and (lmode=4 or lmode=2)) l,
(
SELECT gnum,filnum,concat('+'||gname, sys_connect_by_path(aname, '/')) full_alias_path
FROM (SELECT g.name gname, a.parent_index pindex, a.name aname,
            a.reference_index rindex,a.group_number gnum,a.file_number filnum
      FROM v$asm_alias a, v$asm_diskgroup g
      WHERE a.group_number = g.group_number)
START WITH (mod(pindex, power(2, 24))) = 0 CONNECT BY PRIOR rindex = pindex
) x,
(select group_number gnum,file_number filnum, type ftype from v$asm_file order by group_number,file_number) f
where x.filnum != 4294967295 and
x.gnum=l.gnum
and x.filnum=l.filnum 
and x.gnum=f.gnum and x.filnum=f.filnum) q
order  by q.gnum,q.ftype
;
Oracle sql 脚本: 报告存储在 ASM 中且当前未打开的文件列表

准备工作

查询必须在 ASM 实例上执行。

需要挂载磁盘组。

目标

ASM 的特性之一是数据库整合。
单个磁盘组将是多个数据库的存储库。
结果,有大量的数据文件。
如果文件是使用 OMF(Oracle Managed Files)格式创建的,当在数据库端删除数据文件时,它也会在 ASM 端删除。
可能存在 ASM 端未删除数据文件的情况,尤其是在不使用 OMF 格式时。

对于包含大量数据文件的大型磁盘组,有必要充分利用存储空间并回收为数据库未使用的文件分配的空间。

以下脚本将提供存储在 ASM 中且当前未由磁盘组的任何数据库客户端打开的文件列表。
验证查询结果非常重要,尤其是对于可能已标记为临时脱机的文件。
它不适用于 READ ONLY 表空间,因为一旦文件被数据库打开,它就会被查询返回。

注意:参数文件 (spfile) 将始终报告为未打开。
在删除文件之前,请务必仔细检查该文件。

输出示例

这是脚本执行结果的第一个示例。
请注意,它包括所有类型的文件,如 ARCHIVELOGS、FLASHBACK LOGS、REDOLOGS。
一旦确认不再需要这些文件,就可以使用 ASMCMD 或者 SQL 运行命令 ALTER DISKGROUP ... DROP FILE '[path]'; 删除它们。

GNUM     FILNUM FULL_ALIAS_PATH
---------- ---------- ---------------------------------------------------------------------
         1        270 +DATA1/G102/ONLINELOG/group_2.270.645109903
         1       3247 +DATA1/G102/ARCHIVELOG/2008_01_30/thread_2_seq_54.3247.645169463
         1       3249 +DATA1/G102/ARCHIVELOG/2008_01_30/thread_1_seq_59.3249.645167259
         1       3250 +DATA1/G102/FLASHBACK/log_104.3250.645367249
         1       3251 +DATA1/G102/FLASHBACK/log_103.3251.645369221
         1       3252 +DATA1/G102/ARCHIVELOG/2008_01_30/thread_1_seq_58.3252.645367297
         1       3254 +DATA1/G102/ARCHIVELOG/2008_01_30/thread_2_seq_53.3254.645369195
         1       3255 +DATA1/G102/ARCHIVELOG/2008_01_30/thread_1_seq_57.3255.645266969
         1       3258 +DATA1/G102/FLASHBACK/log_13.3258.645786863

如前所述,查看脚本的结果非常重要。
在以下示例中,这些数据文件当前未打开,但它们属于当前关闭的数据库。

GNUM     FILNUM FULL_ALIAS_PATH
---------- ---------- ---------------------------------------------------------------------

         2        256 +DG_NETAPPS/V102/DATAFILE/UNDOTBS2.256.643465013
         2        257 +DG_NETAPPS/NETAPP/DATAFILE/SYSTEM.257.643455635
         2        258 +DG_NETAPPS/NETAPP/DATAFILE/SYSAUX.258.643455635
         2        259 +DG_NETAPPS/NETAPP/DATAFILE/UNDOTBS1.259.643455641
         2        260 +DG_NETAPPS/NETAPP/DATAFILE/USERS.260.643455643
         2        261 +DG_NETAPPS/NETAPP/CONTROLFILE/Current.261.643458451
         2        262 +DG_NETAPPS/NETAPP/ONLINELOG/group_1.262.643458461
日期:2020-09-17 00:11:49 来源:oir作者:oir