Oracle 데이터베이스의 SID를 변경할 수 있습니까?


18

서버는 Oracle Database 11g Enterprise Edition 릴리스 11.1.0.7.0-64 비트입니다.

서버에서 테스트 데이터베이스의 SID를 쉽고 빠르게 변경할 수 있습니까?

데이터베이스를 삭제하고 다시 만드는 것은 나에게 옵션입니다. 하지만 시간이 덜 필요한 것을 찾고 있습니다.

클라이언트 tnsnames.ora에서 이름을 지정하는 다른 옵션은 중앙에서 관리되지 않기 때문에 오류가 발생하기 쉽습니다.

SQL-Server에서 데이터베이스를 삭제 및 생성하는 시간과 비교하여 새 Oracle 데이터베이스를 생성하는 데 필요한 시간이 너무 깁니다. 또한 SQL-Server에서 SQL-Server 인스턴스의 이름을 바꿀 수 있습니다. [일반적으로 SQL-Server가 실행중인 서버의 이름을 바꾸고 서버의 이름을 바꿀 때까지 몇 가지 문제가 있습니다].


데이터베이스를 삭제하고 다시 만들 수 있다고 언급했습니다. 프로덕션 데이터베이스 및 백업에 액세스 할 수 있습니까? RMAN과 duplicate 명령을 사용하여 데이터베이스를 다시 작성하고 SID를 동시에 변경할 수 있습니다.
Sumnibot

아니요, Oracle 데이터베이스 개발 및 테스트를 위해 DBA로 일하고 있습니다.
bernd_k

2
SQL Server에서 데이터베이스를 사용할 때는 일반적으로 Oracle에서 스키마 (= 사용자)를 사용합니다. 같은 이름이 그 두 세계에서 같은 의미가 아닙니다
a_horse_with_no_name

답변:


13

9i dbnewid 유틸리티 (nid)를 사용하여 데이터베이스 이름 (및 필요한 경우 DBID)을 변경할 수 있습니다. 데이터베이스 이름 만 변경되는 경우 resetlogs가 필요하지 않습니다.

  • 마운트 모드에서 시작 데이터베이스 1 개

    shutdown immediate
    startup mount
  • 2 nid를 실행하여 데이터베이스 이름을 변경하십시오.

    nid target=sys/syspassword@dbtns dbname=newname setname=YES
  • 3 마운트 모드에서 데이터베이스를 종료하고 시작하십시오.

    shutdown immediate
    startup mount
  • 4 db_namespfile 또는 파일을 편집하는 pfile에서 변경 :

    alter system set db_name=newname scope=spfile;
  • 5 비밀번호 파일을 다시 작성하십시오.

    orapwd file=orapwnewname password=syspassword
  • 6 데이터베이스 시작

    startup
  • 7 개의 게시물 이름 변경 단계 :

    change SID in listener.ora
    correct tnsnames.ora
    remove old trace directories
    change /etc/oratab (UNIX) or rename windows service using oradim

1
이 방법으로 Windows Server에서 4 개의 oracle 데이터베이스의 이름을 변경했습니다. 검색 dbnewid 유틸리티 내가 발견 oracle-base.com/articles/9i/DBNEWID.php 몇 가지 추가 설명을했다.
bernd_k

1
데이터베이스 이름을 바꾸는 방법은 다음과 같은 질문에 대한 좋은 대답입니다. 질문은 SID를 변경하는 방법입니다.
ik_zelf

17

제어 파일을 다시 작성해야합니다

Kaunain Ahmed 의이 게시물 은 필요한 단계를 설명합니다.

  1. 수행 할 데이터베이스 백업 제어 파일을 변경하십시오.
  2. background-dump-destination 추적 파일에서 "create controlfile"명령을 추출하십시오.
  3. DB를 종료하십시오.
  4. init.ora에서 DB 이름을 변경하고 init.ora를 변경하십시오.
  5. / etc / oratab 또는 / var / opt / oracle / oratab에서 SID를 변경하십시오.
  6. 환경에서 SID를 변경하고 소싱
  7. 마운트 상태 시작 마운트로 데이터베이스 시작
  8. 위치 2의 명령문으로 제어 파일을 다시 작성하십시오.
  9. 데이터베이스 이름을 global_name으로 10으로 변경하십시오. TNS 구성을 적절히 변경하십시오. $ ORACLE_HOME / network / admin / *. ora SID 및 GLOBAL_NAME을 찾으십시오.

스레드에서 참조되는 다른 도구가 있습니다.

AskTom 의 게시물 은 프로세스를보다 자세하게 참조합니다. 그것은 10g 용이지만 여전히 작동합니다.


5
Windows 사용자에게는 새 서비스를 설정하기 위해 "oradim"유틸리티를 사용해야합니다.
REW

9

예, 가능하며 매우 쉽습니다.

Oracle에서 ORACLE_SID는 Oracle 인스턴스의 이름 일 뿐이며 DBNAME과 관련이 없습니다. 이름이 PROD 인 데이터베이스는 유효한 이름을 가진 인스턴스를 사용하여 제공 할 수 있습니다. SID와 DBNAME이 직접 연결되어 있지 않습니다. 이 연결은 매개 변수를 사용하여 이루어집니다.

매개 변수 파일은 init $ {ORACLE_SID} .ora 또는 spfile $ {ORACLE_SID} .ora로 식별됩니다. 매개 변수 파일에는 db_name 매개 변수가 있습니다. 여기에서 Oracle 인스턴스와 데이터베이스가 연결됩니다.

따라서 제어 파일을 다시 만들 필요가 없으며 nid를 사용할 필요가 없으며 매개 변수 파일의 이름이 올바른지 확인하고 ORACLE_SID를 설정 한 후 이전 Oracle 인스턴스를 중단하고 새 Oracle 인스턴스를 시작하십시오. 새 Oracle 인스턴스 이름으로 매개 변수 파일과 비밀번호 파일은 이름의 일부로 $ {ORACLE_SID}를 사용하여 찾을 수 있습니다.

제어 파일 재 작성은 DBNAME을 변경해야 할 때만 필요합니다. 복제 작업 후 소스 데이터베이스의 백업을 손상시킬 수있는 사고를 방지하기 위해 DBID를 변경해야하는 경우 nid가 필요합니다.


+1 그러나 DB_NAME도 변경하고 싶은지 확실하지 않습니다.
bernd_k 2016 년

원하는 경우 : 물론 가능합니다. 다른 답변은 그 방법을 올바르게 설명했습니다. 어떤 이유로 하시겠습니까? db_name은 매우 물리적입니다. db_name을 아는 것은 dba에 좋지만 대부분의 경우 dba는 관련이 없습니다. 일반적인 통합 접근 방식에는 많은 서비스를 제공하는 데이터베이스가 있습니다. 서비스 (응용 프로그램)는 실행중인 데이터베이스를 신경 쓸 필요가 없습니다.
ik_zelf 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.