Как интегрировать множество результатов SQL-запросов в один вывод (Oracle) - PullRequest
1 голос
/ 04 июня 2009

У меня есть этот сервер со следующей системой:

Windows 2003 R2 Ent Edition SP 2 Oracle 1.0.2.0.4.0 Базы данных: 5

У баз данных есть свои архивные журналы, расположенные в области флэш-восстановления, как показано в столбце NAME v $ recovery_file_dest, а также путем вызова «show parameter db_recovery_file_dest» из sqlplus. Я хотел бы отслеживать использование пространства archivelog каждой базы данных с помощью сценария SQL или PLSQL.

Если я вызову запрос ниже:

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

Ответы [ 2 ]

3 голосов
/ 04 июня 2009

Я предполагаю, что вы хотите, чтобы все результаты базы данных были в одном наборе результатов, а не просто подключались к каждому по очереди и помещали вывод в один и тот же файл. Вам нужно будет выбрать одну из баз данных и создать ссылки на базы данных для остальных четырех (выбрать или создать подключающегося пользователя в каждом, у которого есть привилегии SELECT для V $ RECOVERY_FILE_DEST.

Тогда ваш запрос становится

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
2 голосов
/ 04 июня 2009

Используйте 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

Должно быть в порядке, поскольку каждый запрос возвращает одинаковый набор столбцов в одинаковом порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...