오라클 온라인 백업 스크립트 생성 SQL

온라인 백업을 하기 위해서 백업 명령어를 자동으로 생성해 주는 쿼리문 제외하고자 하는 테이블스페이스는 NOT IN 안에 기술 해 준다
SELECT script
  FROM (SELECT 1 gb#
             , ts#
             , 0 file#
             , 'alter tablespace ' || name || ' begin backup;' script
          FROM v$tablespace
         WHERE NAME NOT IN ('TEMP')
         UNION ALL
        SELECT 2 gb#
             , ts#
             , file#
             , '!cp ' || name || ' /backup/' || regexp_substr(name, '[^/]*\..*$') script
          FROM v$datafile
         UNION ALL
        SELECT 3 gb#
             , ts#
             , 0 file#
             , 'alter tablespace ' || name || ' end backup;' script
          FROM v$tablespace
         WHERE NAME NOT IN ('TEMP')
        )
 ORDER BY ts#, gb#, file#
;
출처 : http://oracleclub.com/article/57136
-- 내가 직접 짠것 : 결과 값이 위와 다르다, 위에 쿼리가 더 정확함
SELECT decode(lvl, 1, cmd1, 2, cmd2, 3, cmd3) AS cmd
  FROM (SELECT rownum AS no
         , a.ts#
         , b.file#
         , 'alter tablespace ' || a.NAME || ' begin backup;' AS cmd1
         , '!cp ' || b.name || ' /backup/' || regexp_substr(b.name, '[^/]*\..*$')  AS cmd2
         , 'alter tablespace ' || a.name || ' end backup;'  AS cmd3
      FROM v$tablespace a
         , v$datafile b
     WHERE a.ts#=b.ts#
       AND a.NAME NOT IN ('TEMP')
     ORDER BY a.ts# asc, b.file#
    ) c
      , ( SELECT LEVEL AS lvl FROM dual CONNECT BY LEVEL <= 3
    ) d
 ORDER BY c.no, d.lvl
;

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다