Oracle DB 인스턴스용 Amazon Relational Database Service(Amazon RDS)의 서비스 이름과 SID(System Identifier, 시스템 식별자)를 변경하고 싶습니다.
간략한 설명
기본적으로 Amazon RDS for Oracle 인스턴스의 SID 값은 ORCL입니다. Amazon RDS for Oracle 인스턴스의 SID 또는 SERVICE\ _NAMES 파라미터는 변경할 수 없습니다.
서비스 이름을 보려면 다음 명령 중 하나를 실행합니다.
select value from v$parameter where name='service_names';
show parameter service_names;
참고: Amazon RDS for Oracle 인스턴스의 서비스 이름은 SID_A이며, 여기서 SID는 DB 이름입니다. 기본 DB 이름의 경우 SERVICE_NAMES은 ORCL_A입니다.
해결 방법
참고: Amazon RDS Custom 파라미터 그룹에서는 SERVICE_NAMES 파라미터를 변경할 수 없습니다.
기존 Amazon RDS for Oracle 인스턴스의 서비스 이름을 변경하려면 다음 방법 중 하나를 사용하십시오.
- DB 스냅샷에서 DB 인스턴스를 복원하고 새 DB 이름을 사용합니다.
- SID를 사용하여 새 Amazon RDS 인스턴스를 만들고 데이터를 새 인스턴스로 마이그레이션합니다.
- 사용자 지정 서비스 이름을 생성합니다.
DB 스냅샷에서 DB 인스턴스 복원 및 새 DB 이름 사용
1. DB 스냅샷을 생성합니다.
2. DB 스냅샷에서 DB 인스턴스를 복원합니다.
3. Database options(데이터베이스 옵션)에서 Oracle DB 인스턴스의 SID에 사용할 새 DB 이름을 지정합니다.
4. 새 DB 이름이 업데이트되었는지 확인합니다.
참고: example-new-database-name을 업데이트된 데이터베이스의 이름으로 바꾸십시오.
select name, value from v$parameter where name=example-new-database-name;
5. 새 서비스 이름 또는 SID로 인스턴스 연결을 확인합니다.
SID를 사용하여 새 Amazon RDS 인스턴스 생성 및 새 인스턴스로 데이터 마이그레이션
- 새 DB 이름으로 Amazon RDS Oracle 인스턴스를 생성합니다.
- Oracle 데이터 펌프 또는 Amazon RDS for Oracle를 사용하여 이전 인스턴스의 데이터를 새 Amazon RDS for Oracle 인스턴스로 마이그레이션합니다.
사용자 지정 서비스 이름 생성
사용자 지정 서비스 이름을 생성하려면 DBMS_SERVICE 패키지를 사용합니다. Oracle 데이터베이스가 재시작된 후 생성된 사용자 지정 서비스의 자동 시작을 설정합니다. 자세한 내용은 Oracle 웹사이트에서 DBMS_SERVICE를 참조하십시오.
참고: Amazon RDS for Oracle 데이터베이스에 대한 애플리케이션 연결을 위한 사용자 지정 서비스 이름을 생성할 수 있습니다. 관리형 서비스를 제공하려면 SERVICE_NAMES 파라미터를 변경할 권한이 없거나 srvctl을 사용하여 서비스를 생성할 수 있는 서버 액세스 권한이 없습니다. 따라서 데이터베이스를 다시 시작할 때 사용자 지정 서비스가 시작되지 않습니다. 대신 데이터베이스를 수동으로 재시작해야 합니다.
데이터베이스 재시작 후 서비스를 시작하는 스타트업 트리거를 생성하면 사용자 지정 서비스를 수동으로 시작할 필요가 없습니다.
1. 새 서비스를 만든 다음 서비스를 시작합니다.
참고: example-service-name을 새 서비스 이름으로 바꾸십시오.
begin
dbms_service.create_service('example-service-name','example-service-name');
dbms_service.start_service('example-service-name');
end;
/
2. 새 서비스의 상태를 확인합니다.
select * from dba_services;
3. sqlplus 및 SQL developer와 같은 Oracle 클라이언트 도구를 사용하여 새 서비스와의 데이터베이스 연결을 테스트합니다.
4. 데이터베이스 재시작 후 서비스를 자동으로 시작하는 트리거를 생성합니다.
트리거를 생성하려면 다음 단계를 완료하십시오.
1. dbms_service를 실행하기 위한 프로시저 또는 트리거 소유자에게 액세스 권한 부여:
참고: example-username을 프로시저 또는 트리거 소유자 이름으로 바꿉니다.
begin
rdsadmin.rdsadmin_util.grant_sys_object('DBMS_SERVICE','example-username');
end;
/
2. 데이터베이스가 다시 시작된 후 중지된 상태의 서비스를 시작하기 위한 사용자 지정 프로시저 생성:
참고: example-procedure-name을 사용자 지정 프로시저의 이름으로 바꾸십시오.
CREATE OR REPLACE PROCEDURE example-procedure-name
IS
cursor tempvar is select name from sys.service$ where network_name is not null and name not in (select value from v$parameter where name='service_names');
loopvar tempvar%ROWTYPE;
begin
OPEN tempvar;
loop
fetch tempvar into loopvar;
EXIT WHEN tempvar%NOTFOUND;
begin
DBMS_SERVICE.start_service(loopvar.name);
end;
end loop;
close tempvar;
end;
/
3. 데이터베이스 스타트업 시간에 데이터베이스 서비스를 시작하기 위한 스타트업 트리거 생성:
참고: example-trigger-name을 스타트업 트리거의 이름으로 바꾸십시오. example-procedure-name을 사용자 지정 프로시저의 이름으로 바꾸십시오.
CREATE OR REPLACE TRIGGER example-trigger-name
after startup on database
begin
example-procedure-name;
end;
/
관련 정보
DB 인스턴스 이름 변경