2014-04-07 2 views
0

SQL 스크립트를 사용하여 고객 데이터베이스에 변경 사항을 적용하는 도구가 있습니다. 이것은 종종 열 정의 (데이터 유형 등)를 변경하는 것을 의미합니다. 문제는 종종 우리가 알지 못하는 (그리고 기억하지 못하는) 사용자가 적용한 기본 키가 있으며 프로세스가 올라가는 것입니다 (예 : 인덱스 또는 기본 키에 속하는 열을 변경할 때).예기치 않은 기본 키 삭제 및 다시 작성

나에게 주어진 요구 사항은이 업데이트 프로세스가 '끊김없는'것이어야하며, 인간의 개입 없이는 준비가되지 않아야한다는 것입니다. 나는 또한이 포럼에서 이것을 연구했고, 내 특별한 질문을 아직 볼 수 없다는 것을 알 수있다.

데이터베이스의 모든 인덱스를 비활성화하고 나중에 다시 작성하는 방법을 알고 있지만 인덱스가 기본 키에있는 경우에도 기본 테이블의 일부인 열을 여전히 변경할 수 없습니다 PK를 이름으로 명시 적으로 삭제하고 나중에 명시 적으로 다시 작성하지 않는 한, 코드 타임에이 사실을 알아야합니다. 테이블에 기본 키의 이름을 찾는 쿼리를 작성할 수는 있지만 테이블을 다시 만드는 방법을 아는 방법은 무엇입니까?

Transact-SQL (또는 PL/SQL)을 사용하여 주어진 테이블의 기본 키를 검색하고 삭제 한 다음 코드 시간에 모르는 경우 나 열이 속한 경우에 어떻게 알 수 있습니까? 핵심은 도구가 기본 키가 특정 테이블에 있는지 또는 구성 요소가 무엇인지 미리 알 수 없다는 것입니다. SQL 코드는이 코드를 처리해야합니다.

알려진 열이 기본 키에 속하는지 감지 한 다음 삭제하고 나중에 열을 변경 한 후에 다시 작성하는 것이 좋습니다.

이것은 Oracle과 Sql Server 모두에서 SQL 코드를 사용하는 것이 이상적입니다.

TIA

+0

정말 스크립트의 첫 번째 문은 백업 데이터베이스입니다 바랍니다. – dean

+1

SQL Server의 경우 다음과 같이 시작할 수 있습니다. [지정된 테이블의 기본 키 열을 찾는 방법은 무엇입니까?] (http://technet.microsoft.com/en-us/library/ms345522.aspx#_FAQ16) –

+0

데이터베이스는 항상 sysadmin에 의해 미리 백업하는 것이 좋습니다. 업그레이드 프로세스가 완료되면 시간에 대한 불만이 제기되며 고객이 지침을 무시하도록 선택한 경우 이는 자체주의 사항입니다. 하지만 그건 내 질문의 요지 옆에있는 것 아닌가? –

답변

0

난 정말 왜 고객이 테이블에 대한 자신의 기본 키를 정의 할 이해가 안 돼요? 게다가, 나는 왜 당신이 그들을 풀어 주겠습니까? 내 세계에서 고객이 스키마를 변경하는 경우 이는 자동으로 스키마의 지원 종료를 의미합니다.

프로덕션 데이터베이스에서 기본 키를 삭제하고 다시 작성하지 않는 것이 좋습니다. 데이터 손실을 유발하는 여러 가지 나쁜 일이 발생할 수 있습니다.

그리고 그것은 단지 PK가 아닙니다. 외래 키 제약 조건을 먼저 삭제해야합니다. 그리고 FK는 PKs뿐만 아니라 고유 한 제약 조건을 참조 할 수 있습니다. 따라서 야오 (yao)도이를 처리해야합니다.

가장 좋은 방법은 필요한 스키마로 새 테이블을 만들고 데이터를 복사하고 원래 테이블을 놓고 새 테이블의 이름을 바꾸는 것입니다. 물론 FK를 처리해야하지만 더 쉽습니다. 이 링크를 예를 확인 :

http://sqlblog.com/blogs/john_paul_cook/archive/2009/09/17/script-to-create-all-foreign-keys.aspx

+0

고객이 왕이되어서 수행 할 수있는 지시를 받았기 때문에 기술 솔루션, 정치 및 우수 사례가 필요합니다. –

+0

그냥 말해야했다 :) 그러나 나는 또한 기술 답변도 제공했다고 믿는다. – dean

+0

당신은 참으로 당신에게 감사 드리며.나는 단지 다른면들이 내가이 경우 고려할 사치를 가지고 있지 않다는 것을 강조 할 뿐이다. –

관련 문제