2010-03-02 8 views
26

구문을 알고 있지만 누군가가 데이터베이스 동의어가 매우 유용한 사용 사례를 제공 할 수 있는지 궁금합니다.데이터베이스 동의어는 언제 사용해야합니까?

+2

링크 : http://www.dba-oracle.com/concepts/synonyms.htm –

+1

전혀 쓸모없는 기능 : http://vadimtropashko.wordpress.com/2012/12/12/synonyms-do-we-need -them/ –

답변

16

테스팅시 모의 작업 테이블 준비에 탁월합니다. 예를 들어, 소스 테이블에 수백만 개의 레코드가 있고 작은 데이터 서브 세트를 테스트하려는 경우, 동의어를 사용하여 제어하는 ​​작은 테이블로 소스 테이블을 재지 정하여 다양한 시나리오를 수행 할 수 있습니다.

이렇게하면 원본 테이블에 영향을주지 않고 모의 테이블의 데이터를 업데이트/삭제할 수 있습니다. 소스 테이블을 사용할 준비가되면 동의어의 방향을 바꾸면됩니다.

+0

물론 공개 동의어를 사용하면 schema.object 구문을 사용하지 않고도 PL/SQL 및 SQL 코드의 가독성을 높이기 위해 객체를 참조 할 수 있습니다. –

+2

@Darren Atkinson : 공개 동의어는 데이터베이스를 통합하기로 결정한 경우 이름 colisions의 가능성을 높입니다. –

+0

그들이 패키지의 경우에 얼마나 유용했는지, 최근에 실행 권한이 있었지만 응용 프로그램에서 패키지에 액세스 할 수 없었습니다. 동의어를 만들면 응용 프로그램에서 패키지에 액세스 할 수있었습니다. – viveksinghggits

0

다른 스키마에 대해 제대로 작동하지 않는 응용 프로그램을 작성해야하는 경우 (ALTER SESSION SET CURRENT_SCHEMA)

동의어는 주로 그런 경우에 대한 해결 방법으로 사용됩니다. 제대로 작성된 응용 프로그램을 사용하면 거의 사용하지 않아도됩니다.

+0

필자는 동의어가 "제대로 작성된"응용 프로그램에는 쓸모가 없다는 생각에 동의하지 않습니다. 내 응용 프로그램에서 스키마 이름을 하드 코드하는 것을 피하기 위해 항상 사용합니다. 예를 들어 두 테이블을 조인하는 뷰가있을 수 있습니다. 테이블 중 하나를 다른 스키마로 옮길 필요가 있다면'ALTER SESSION SET CURRENT_SCHEMA'가 작동하지 않을 것입니다. –

2

기존 코드 내에 하드 코딩 된 데이터베이스 개체 이름이있는 경우.

동의어를 사용하면 테이블 또는 데이터베이스 이름에 대한 자체 아이디어가있는 여러 소스에서 구형 코드를 재 작성하는 데 어려움을 겪을 수 있습니다.

예를 들어 일부 프로덕션 서버용으로 작성된 코드를 보았습니다. 코더는 주 테이블의 이름이 test_data 인 편리하게 하드 코드되어있어 워크 스테이션에서 정상적으로 작동합니다. 코드를 다시 작성하는 대신 동의어를 사용하면 일찍 집에 도착했습니다.

5

나는 대개 DBA가 데이터베이스 개체를 다른 스키마로 분리하려고 할 때 사용되는 동의어를 보지만 이러한 개체 중 일부는 다른 스키마에서 볼 수 있기를 원하지만 필요로합니다.

가장 최근에 본 예 : 동일한 회사에서 운영하는 여러 웹 앱. 사용자는 대개 이러한 앱 중 두 개 이상에 액세스 할 수 있으며이 앱에 액세스 할 수있는 사용자 계정은 하나뿐입니다. 사용자 계정 정보는 USER_ACCOUNTS 스키마에 저장되고 다른 모든 앱은 자체 스키마에 있으며 동의어를 통해 USER_ACCOUNTS 스키마에 액세스합니다.

10

Oracle documentation on synonyms을 확인하십시오.

  • 데이터베이스가 모든에 액세스 할 필요가
  • 테이블을 연결하는 예를 통해, 원격 테이블의 이름을 사용하기 쉬운 제공 : 여기에 다른 답변에 추가

    , 그들은 또한 일반적으로 사용되는 사용자, 즉 공용 동의어
1

일반적으로 SQL 또는 PL * SQL에 스키마 이름을 포함시키는 것은 바람직하지 않습니다. 따라서 "Select OtherSchema.OtherTable"과 같은 다른 스키마의 테이블을 참조해야하는 코드를 작성하는 경우 테이블의 동의어를 정의하는 것이 가장 좋습니다 (OtherSchema.OtherTable의 동의어 OtherTable 작성). "select id from OtherTable "을 선택하십시오.

다른 방법으로 다른 스키마 이름으로 이동하거나 다른 스키마 이름을 사용하는 다른 시스템을 설치 한 경우 코드를 변경하는 대신 동의어를 다시 정의 할 수 있습니다.

동일한 동의어를 다시 정의하여 동일한 구조의 두 스키마간에 코드를 전환하는 데에도 사용할 수 있습니다.

관련 문제