JDBC를 통한 데이터베이스 STARTUP / SHUTDOWN


11g에서부터 oracle.jdbc.OracleConnection 클래스에서 startup() 및 shutdown()이라는 새로운 JDBC 메소드를 제공한다. 이 두 메소드는 SQL*Plus에서처럼 데이터베이스를 애플리케이션에서 직접 start up하고 shut down할 수 있는 인터페이스이다.

startup()과 shutdown() 메소드를 사용하기 위해서는 커넥션을 맺을 때 반드시 preliminary 모드로 SYSDBA 혹은 SYSOPER로 커넥션을 맺어야 한다.

Preliminary 모드는 데이터베이스 인스턴스가 구동 중이 아닐 때 한 명의 유저만을 허용하여 데이터베이스 start up 시키는 작업에만 허용하는 모드이다. 커넥션 생성 시 다음과 같이 prelim_auth 프로퍼티를 true로 설정하면 된다.

 

이렇게 커넥션을 맺은 후에 startup() 메소드를 호출해서 데이터베이스를 start up 시킨다. startup() 메소드 호출 시 다음과 같은 데이터베이스 start up 옵션 설정 파라미터를 명시할 수 있다.

– FORCE : 인스턴스 start up 전에 데이터베이스를 abort 모드로 shut down
– RESTRICT : 데이터베이스를 start up 한 후에, CREATE SESSION와 RESTRICTED 권한을 가지고 있는 유저(일반적으로는 DBA)에게만 데이터베이스 접근 허용
– NO_RESTRICTION : RESTRICTION없이 데이터베이스 start up

 

Startup() 메소드 호출 방법은 다음과 같다.

Startrup() 메소드는 데이터베이스 인스턴스를 start up시키기만 할 뿐 mount하거나 open하는 것은 아니다.

 

데이터베이스를 mount/open하려면 다음과 같이 한다.

Shutdown() 메소드 호출로 데이터베이스를 shutdown 할 때 설정할 수 있는 옵션은 다음과 같다.
– ABORT
– CONNECT
– FINAL
– IMMEDIATE
– TRANSACTIONAL

 

예제

Quick Implementation of Database Change Notification

DCN 기능을 이용해서 데이터베이스에 registration을 생성하고 리스너를 등록한 후, Scott 유저로 insert문장을 실행하면 리스너가 실행한 작업에 대한 DCN 이벤트를 받아서 화면에 출력해주는 애플리케이션을 구현해본다.

1.) 본 예제에서는 Scott 유저로 데이터베이스에 접근해서 작업하므로, 먼저 Scott 유저에게 다음과 같이 change notification 권한을 부여한다.

 

2.) 다음 java 소스를 DBChangeNotification.java라는 파일에 저장한다.

 

3.) 다음과 같이 위 java 소스를 컴파일한다.

 

4.) 위에서 컴파일한 클래스를 아래와 같이 실행해보자. 실행시 인수로 커넥션 URL을 넣어준다.

 

5.) 아래와 같이 리스너가 이벤트를 받아서 아래와 같이 이벤트 내용을 화면에 출력하는 것을 확인할 수 있다.

 

Using JDBC method for Database Startup/Shutdown

데이터베이스에 접근해서 startup(), shutdown() 메소드를 이용해서 데이터베이스를 셧다운/스타트업하는 애플리케이션을 작성해본다.

 

1.) Starup/shutdown 메소드를 사용하기 위해서는 SYSDBA 혹은 SYSOPER 권한으로 데이터베이스에 접속해야 한다.

오라클 JDBC Thin 드라이버를 통해서 SYSDBA나 SYSOPER로 접속하려면 서버가 패스워드 파일을 사용하도록 설정해야 한다.

커맨드라인에서 다음 명령어를 실행한다.

 

2.) Starup/shutdown 메소드를 사용할 유저는 SYSDBA권한을 가지고 있어야 하므로, SQL*Plus에서 다음을 실행한다.

 

3.) Init<SID>.ora 파일을 열어서 다음 행을 추가한다.

 

4.) 이제 startup/shutdown 메소드를 사용하기위한 설정을 마쳤다. 데이테이스 인스턴스를 재 시작해서 설정내용을 적용한다.

5.) $ORACLE_HOME/network/admin/listener.ora 파일에 다음과 같이 JDBC를 붙으려는 서비스가 static하게 등록되어 있는지 확인하고, 등록되어 있지 않다면 아래 내용을 listener.ora 파일에 추가한다.

데이터베이스를 startup 시키려면 인스턴스가 떠 있지 않은 상태에서 그 서비스에 접속해야 하기 때문에 반드시 JDBC를 통해서 접속할 서비스가 리스너에 static하게 등록되어 있어야 한다.

 

6.) 다음은 데이터베이스 startup시키는 java 프로그램이다. DBStartup.java라는 이름으로 다음을 저장한다.

 

7.) 다음은 데이터베이스 shutdown시키는 java 프로그램이다. DBShutdown.java라는 이름으로 다음을 저장한다.

 

8.) 다음의 명령어로 위에서 작성한 애플리케이션을 컴파일한다.

 

9.) 컴파일한 클래스를 실행한다.

 

10.) 다음과 같이 데이터베이스가 Starup/Shutdown되는 것을 확인할 수 있다.

Oracle 11g 부터 오라클 JDBC는 JDBC 4.0의 모든 기능을 지원하고, 좀 더 다양한 데이터베이스 특징들을 JDBC 를 통해 사용할 수 있도록 기능이 추가되어 Java 애플리케이션에서 좀 더 향상된 데이터베이스 컨트롤이 가능해졌다.

 

 


Comments

comments

haisins

오라클 DBA 박용석 입니다. haisins@gmail.com 으로 문의 주세요.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다