Oracle cron

Oracle 2008. 11. 9. 03:14
Unix의 cron과 같이 오라클에서도 일정한 시점, 또는 간격으로 반복해서 job을
수행시킬 수 있다. DBMS_JOB package를 이용하여 수행시킬 수 있는데,
이것을 위해서는 SNP background process가 start되어 있어야 한다.
  다음의 parameter를 init.ora file에 설정한 후 oracle을 startup하면
SNP process가 올라온다.
        job_queue_processes = 1
            -> 이 파라미터는 snp process를 몇 개 띄울지를 결정한다.
                  default=0
        job_queue_interval = 60
            -> 이 파라미터는 snp process가 깨어나는 간격을 초로 설정한다.

DBMS_JOB Package는 다음과 같은 procedure를 이용하여 사용한다.
DBMS_JOB.submit(job out binary_integer,
                                what in varchar2,
        next_date in date defalut sysdate,
      interval in varchar2 default 'null',
    no_parse in boolean default false)
-> dbms_job.submit procedure는 job의 내용을 정의하고 oracle이 job을
  수행할 수 있도록 한다. 다음의 예제를 통하여 실제 사용법을 알아보자.
[ 예제 ] file jobcre.sql
begin
  dbms_job.submit(:jobno,
-- job 의 번호
  'insert into scott.testdate values(1, sysdate);',
-- job의 내용 : ' '으로 감싸준다.
-- procedure를 실행하는 경우 ' username.procedure_name;' 만 쓰면 된다.
        sysdate,
-- job이 실행될 시간
  'sysdate + 5/24/60' ,
-- job이 실행되는 간격 , 위의 경우는 5분마다 실행하도록 했다.
-- ' '으로 감싸준다.
      FALSE );
end;
/
$ sqlplus scott/tiger
SQL> variable jobno number;
SQL> @jobcre
SQL> print jobno -- job 번호 확인 : 여기서는 166번
SQL> exec dbms_job.run(166);
SQL> commit;
        지금부터 interval에 따라 job이 실행된다.
        job 실행 여부를 알아보기 위해서 다음의 sql 문장을 수행한다.
SQL> select job, next_date, next_sec, failures, broken
          from user_jobs;
            그 외에
  
SQL> exec dbms_job.run(jobno);
            - job의 강제 실행, job이 16번 fail되어 broken된 경우는
                위의 명령어로 강제로 run을 시켜서 실행되면 다시 interval마다
                실행된다.
SQL> exec dbms_job.broken(jobno, TRUE);
            - job을 disable시킴
SQL> exec dbms_job.remove(jobno);
            - job의 삭제
 
snapshot과 job과의 관계
======================
snapshot 도 job 으로 등록되어 돌아갑니다.
즉, select job, what from dba_jobs; 를 조회하면,
what 부분에 snapshot 이 정의되어 있습니다.
따라서, snapshot 에 대한 disable 방법 등은 job 과 같습니다.

interval 시간 지정 예제
======================
1. 10분에 한번씩 실행하는 경우
  
      sysdate + 1/24/6 또는 sysdate + 1/144
          -> 1/24 (1시간-60분) / 6 : 10분 단위
                1/144 : 24*6 으로 나누어도 같은 의미가 된다.
  
2. 1분에 한번으로 지정하는 경우
      sysdate + 1/24/60 또는 sysdate + 1/1440

3. 매일 새벽 2시로 지정하는 경우
      trunc(sysdate) + 1 + 2/24 -> 다음날 새벽 2시를 지정함.

4. 매일 밤 11시로 지정하는 경우
      trunc(sysdate) + 23/24 -> 오늘 밤 11시를 지정했음.
Posted by 로드러너
,

링크드서버 만들기

Oracle 2008. 11. 9. 03:07

■ 링크드서버 만들기
use master
go


-- Adding linked server (from SQL Server Books Online):
/* sp_addlinkedserver [@server =] 'server'
    [, [@srvproduct =] 'product_name']
    [, [@provider =] 'provider_name']
    [, [@datasrc =] 'data_source']
    [, [@location =] 'location'] [, [@provstr =] 'provider_string']
    [, [@catalog =] 'catalog']
*/

EXEC sp_addlinkedserver   'Ora817Link',  'Oracle',  'MSDAORA',  'oracle817'

설명 :
 Ora817Link  : 링크이름 user define
 Oracle  : 상수값.
 MSDAORA  : 상수값.
 oracle817 : oracle이 local에 설치되어 있고, %ORACLE_HOME%\ora92\network\admin\tnsnames.ora 에
     정의된 연결문자 대표명.
 

-- Adding linked server login:
/* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'
    [,[@useself =] 'useself']
    [,[@locallogin =] 'locallogin']
    [,[@rmtuser =] 'rmtuser']
    [,[@rmtpassword =] 'rmtpassword']
*/

EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger'

설명 :
 scott  : 접속계정
 tiger  : 접속비번.
 
[참고 자료]
 오류에 대한 내용은 아래 부분에서 살펴 볼것.
 http://support.microsoft.com/kb/280106

실행 부분.
SELECT * FROM OpenQuery(Ora817Link, 'select tname from tab');


[기타 참고 자료]
http://www.databasejournal.com/features/mssql/article.php/3116011
http://www.databasejournal.com/features/mssql/article.php/10894_3116011_2

Posted by 로드러너
,