我的服务器使用以下系统:
Windows 2003 R2 Ent Edition SP 2 Oracle 1.0.2.0.4.0 数据库:5
数据库的归档日志位于闪回恢复区,如v $ recovery_file_dest的NAME列所示,也可以从sqlplus调用“show parameter db_recovery_file_dest”。我想使用SQL或PLSQL脚本监视每个数据库的archivelog的空间使用情况。
如果我调用以下查询:
SET LINESIZE 145
SET PAGESIZE 9999
COLUMN name FORMAT a30 HEADING 'Name'
COLUMN space_limit FORMAT 99,999,999,999,999 HEADING 'Space Limit'
COLUMN space_used FORMAT 99,999,999,999,999 HEADING 'Space Used'
COLUMN space_used_pct FORMAT 999.99 HEADING '% Used'
COLUMN space_reclaimable FORMAT 99,999,999,999,999 HEADING 'Space Reclaimable'
COLUMN pct_reclaimable FORMAT 999.99 HEADING '% Reclaimable'
COLUMN number_of_files FORMAT 999,999 HEADING 'Number of Files'
prompt
prompt Current location, disk quota, space in use, space reclaimable by deleting files,
prompt and number of files in the Flash Recovery Area.
prompt
SELECT
name
, space_limit
, space_used
, ROUND((space_used / space_limit)*100, 2) space_used_pct
, space_reclaimable
, ROUND((space_reclaimable / space_limit)*100, 2) pct_reclaimable
, number_of_files
FROM
v$recovery_file_dest
ORDER BY
name
/
我会得到这样的输出:
Name Space Limit Space Used % Used Space Reclaimable % Reclaimable Number of Files
------------------------------ ------------------- ------------------- ------- ------------------- ------------- ---------------
D:\oracle\product\10.2.0\flash 107,374,182,400 34,239,603,712 31.89 0 .00 804
_recovery_area\DBNAME
我的问题是:如何将每个数据库中每个类似查询的结果集成到一个输出中?
输出如下:
Name Space Limit Space Used % Used Space Reclaimable % Reclaimable Number of Files
------------------------------ ------------------- ------------------- ------- ------------------- ------------- ---------------
D:\oracle\product\10.2.0\flash 107,374,182,400 34,239,603,712 31.89 0 .00 804
_recovery_area\DBNAME1
D:\oracle\product\10.2.0\flash 107,374,182,400 34,239,603,712 31.89 0 .00 804
_recovery_area\DBNAME2
D:\oracle\product\10.2.0\flash 107,374,182,400 34,239,603,712 31.89 0 .00 804
_recovery_area\DBNAME3
答案 0 :(得分:3)
我假设您希望将所有数据库结果放在一个结果集中,而不是仅依次连接到每个结果集并将输出假脱机到同一个文件。您必须选择其中一个数据库并创建指向其他四个数据库的数据库链接(在V $ RECOVERY_FILE_DEST中选择或创建具有SELECT权限的连接用户。
然后您的查询变为
select ...
from v$recover_file_dest
union all
select ...
from v$recover_file_dest@db2
union all
select ...
from v$recover_file_dest@db3
union all
select ...
from v$recover_file_dest@db4
答案 1 :(得分:2)
使用UNION将单独查询的结果合并到一个集合中。例如:
select name, space_limit, etc...
from v$recovery_file_dest
UNION
select name, space_limit, etc...
from v$recovery_file_dest -- presumably a different value than the first one
应该没问题,因为每个查询都以相同的顺序返回相同的列集。