SQL Server 2000에서 사용되지 않는 테이블을 식별하기 위한 전략은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/35076

  •  09-06-2019
  •  | 
  •  

문제

저는 더 이상 액세스되지 않는 수십 개의 테이블이 있는 SQL Server 2000 데이터베이스를 사용하여 작업하고 있습니다.더 이상 유지 관리할 필요가 없는 데이터를 지우고 싶지만 제거할 테이블을 식별하는 방법을 모르겠습니다.

데이터베이스는 여러 다른 응용 프로그램에서 공유되므로 이러한 응용 프로그램을 검토하면 사용되는 개체의 전체 목록이 제공될 것이라고 100% 확신할 수 없습니다.

가능하다면 내가 하고 싶은 일은 일정 기간 동안 전혀 액세스되지 않은 테이블 목록을 가져오는 것입니다.읽기도 없고 쓰기도 없습니다.이 문제에 어떻게 접근해야 하나요?

도움이 되었습니까?

해결책

MSSQL2000은 그런 종류의 정보를 제공하지 않습니다.그러나 어떤 테이블이 사용되는지 식별하고 어떤 테이블이 사용되지 않는지 추론할 수 있는 방법은 SQL 프로파일러를 사용하여 특정 데이터베이스로 이동하는 모든 쿼리를 저장하는 것입니다.결과를 새 테이블에 기록하도록 프로파일러를 구성한 다음 거기에 저장된 쿼리를 확인하여 애플리케이션에서 사용되는 모든 테이블(및 뷰, sps 등)을 찾습니다.

"쓰기"가 있는지 확인할 수 있는 또 다른 방법은 모든 테이블에 새 타임스탬프 열을 추가하고 업데이트나 삽입이 있을 때마다 해당 열을 업데이트하는 트리거를 추가하는 것입니다.하지만 앱이 다음 유형의 쿼리를 수행하는 경우

select * from ...

그런 다음 새 열을 받게 되며 이로 인해 몇 가지 문제가 발생할 수 있습니다.

다른 팁

작성된 추적 테이블에 대한 또 다른 제안은 다음을 사용하는 것입니다. 레드 게이트 SQL 로그 복구 (무료).이 도구는 데이터베이스 로그를 자세히 살펴보고 모든 삽입, 업데이트 및 삭제를 표시합니다.목록도 완전히 검색 가능합니다.

이는 데이터베이스에 대한 읽기를 조사하기 위한 기준을 충족하지 않지만 SQL 프로파일러 기술은 그에 관한 공정한 아이디어를 제공할 것이라고 생각합니다.

lastupdate 열이 있으면 쓰기를 확인할 수 있지만 실제로 읽기를 확인할 수 있는 쉬운 방법은 없습니다.프로파일러를 실행하고 추적을 테이블에 저장한 후 체크인할 수 있습니다.

제가 보통 하는 일은 테이블 앞에 밑줄을 붙여 이름을 바꾸는 것입니다. 사람들이 비명을 지르기 시작하면 다시 이름을 바꿉니다.

사용하지 않는다는 것은 애플리케이션에 문제의 테이블에 대한 참조가 더 이상 없으며 동적 SQL을 사용하고 있음을 의미하며 테이블 이름이 없으면 앱에서 테이블 이름을 검색하여 날려버릴 수 있습니다.

또한 모든 sprocs, 함수 등을 출력했습니다.텍스트 파일로 복사하고 테이블 이름을 검색했습니다.찾을 수 없거나 삭제해야 할 절차에서도 발견되면 날려 버리십시오.

해당 항목을 삭제하고 이에 대해 불만을 제기하는 사용자가 있는지 확인하세요. ;)

Profiler를 사용하면 작동할 것 같습니다.잠시 동안 실행해 본 후에는 사용된 테이블의 좋은 목록을 갖게 될 것입니다.매일 테이블을 사용하지 않는 사람이라면 백업에서 테이블이 복원될 때까지 기다릴 수도 있습니다.고마워요, 여러분.

아마도 너무 늦었을 것입니다. 그러나 검색을 수행하는 사람에게는;내 코드에서 이 개체를 사용하여 모든 개체를 검색한 다음 SQL Server에서 다음을 실행하여 검색합니다.

고유한 '[' + object_name(id) + ']' 선택
syscomments에서
여기서 '%MY_TABLE_NAME%'과 같은 텍스트는

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top