전체 글 1383

변경된 테이블 이름 복구하기

변경된 테이블 이름 복구하기 Version : SQL Server 2008, 2008R2, 2012 실수로 테이블 이름을 변경 하였다. 어떻게 복구 할까? 이번 시간에는 실수로 변경한 테이블 이름을 복구하는 방법을 살펴본다. 백업 본이 있으면 기존의 백업 본을 보고 테이블 이름을 찾을 수 있지만 백업이 없거나 라이브 중인 경우에는 다음과 같은 방법을 사용 할 수 있다. (물론 방금 수정한 테이블의 이름은 기억력으로 다시 되돌려 놓으면 된다. 하지만 내가 모르는 수정이 발생 하였을 경우 매우 유용할 듯 하다.) 변경된 이름을 찾는 방법은 트랜잭션 로그에서 변경 된 사항을 찾아서 이전의 테이블 이름과 변경 된 테이블 이름을 찾는 것이다. DECLARE @Date_From DATETIME='1900/01/01..

Sys,dm_exec_connections

Sys,dm_exec_connections Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server 인스턴스에 연결된 정보를 확인하는 방법으로 sys.dm_exec_connections 동적 관리 뷰를 사용할 수 있다. select * from sys.dm_exec_connections 열 이름데이터 형식설명Session_idint연결과 연관된 세션을 식별most_recent_session_idint가장 최근 요청의 세션IDconnect_timedatetime연결이 설정된 타임스탬프net_transportnvarchar(40)물리적 전송 프로토콜protocol_typenvarchar(40)페이로드의 프로토콜 유형 지정protocol_versionint데이터 액..

SQL Server 시작 매개 변수 설정

SQL Server 시작 매개 변수 설정 Version : SQL Server 2012 SQL Server의 상태를 확인하기 위해서 트레이스 플래그를 설정하는 경우가 있다. 하지만 SQL Server가 재시작 될 때마다 모든 트레이스를 설정을 하는 것은 매우 불편할 수 있다. 해당 서비스가 시작 될 때 자동으로 트레이스 플래그가 적용될 수 있도록 시작 매개 변수를 서비스에 등록 할 수 있다. 다음 예시는 SQL Server 2012 서비스에서 시작 매개 변수를 추가할 수 있다/ 시작 매개 변수는 레지스트리에 저장 된다. SQL Server 구성 관리자를 사용하여 매개 변수를 변경한 경우 직접 레지스트리에 반영된다. 레지스트리를 확인해 보면 각 시작 매개 변수는 별도의 항목(문자열 값)으로 저장되어 있다...

AFTER 트리거를 INSTEAD OF 트리거로 변경 후 효율성 향상

AFTER 트리거를 INSTEAD OF 트리거로 변경 후 효율성 향상 Version : SQL Server 2005, 2008, 2008R2, 2012 트리거는 SQL Server에서 이벤트가 발생하면 자동으로 실행되는 특수한 종류의 저장 프로시저이다. DML, DDL, LOGON 트리거를 생성 할 수 있다. 트리거는 FOR|AFTER 와 INSTEAD OF 인수가 있다. FOR|AFTER : AFTER는 DML 트리거를 지정한 모든 작업이 성공적으로 실행되었을 때만 트거가 실행도록 지정한다. 모든 참조 연계 동작 및 제약 조건 검사도 이 트리거가 실행되기 전에 성공해야 한다. INSTEAD OF : 트리거를 시작하는 SQL문 대신 DML 트리거가 실행되도록 지정한다. DDL 또는 LOGON 트리거에 대..

쿼리 대기 옵션

쿼리 대기 옵션 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 정렬이나 해시처럼 메모리를 많이 사용하는 쿼리를 실행하면 실행에 필요한 충분한 메모리가 확보 될 때까지 쿼리가 대기하게 된다. 쿼리 대기 옵션을 사용하여 리소스에 대한 쿼리의 최대 대기 제한 시간을 설정 할 수 있다. 제한 시간의 범위는 0~ 214748364초 이며 기본값은 -1이다. 기본값의 경우 제한 시간이 예상 쿼리 비용의 25배로 계산 된다. 대기 중인 쿼리를 포함하는 트랜잭션은 쿼리가 메모리를 기다리는 동안 잠금을 유지 하여 검색할 수 없는 교착 상태가 발생 할 수 있다. 쿼리 대기 시간을 줄이면 기다리는 쿼리가 종료되고 트랜잭션이 종료되면서 이러한 교착 상태의 가능성을 낮..

Index create memory 설정

Index create memory 설정 Version : SQL Server 2005, 2008, 2008R2, 2012 분할된 테이블 및 인덱스를 사용할 때 분할된 인덱스가 정렬되지 않고 병렬처리 수준이 높은 경우 인덱스를 만드는데 필요한 최소 요구 메모리가 증가할 수 있다. 인덱스 생성 메모리 옵션은 인덱스를 만들기 위해 처음으로 할당되는 최대 메모리 양을 제어한다. 이 옵션의 기본값은 0(동적 할당)이다. 인덱스 생성시 설정 값을 초과하는 메모리가 필요할 경우 여유 메모리가 있으면 초과하여 사용하며 여유 메모리가 없을 경우에는 이미 할당된 메모리를 계속 사용하여 인덱스를 생성한다. Index create memory 옵션에 따라 단일 인덱스 생성 작업에서 모든 인덱스 파티션에 할당된 초기 총 메모..

Min memory per query 옵션

Min memory per query 옵션 Version : SQL Server 2005, 2008, 2008R2, 2012 Min memory per query 서버 구성 옵션은 쿼리 실행을 위해 할당되는 최소 메모리 양을 지정할 때 사용할 수 있다. 시스템에서 동시에 실행되는 쿼리가 많을 때 min memory per query 값을 늘리면 대량의 정렬 및 해시 작업과 같이 메모리를 많이 사용하는 쿼리의 성능 향상에 도움이 될 수 있다. 예를 들어 min memory per query 값을 2048KB로 설정하면 쿼리는 최소한 그 만큼의 총 메모리를 얻을 수 있다. 쿼리 실행을 위해 할당될 최소 메모리양은 512KB ~ 2147483647KB(2GB)까지 값을 설정할 수 있으며 기본값은 1024KB ..

SQL Server 에디션 다운그레이드와 제한된 기능 확인

SQL Server 에디션 다운그레이드와 제한된 기능 확인 Version : SQL 2008, 2008R2, 2012 SQL Server Enterprise 에디션에서는 데이터 압축, 파티셔닝, TDE(투명한 데이터 암호화), CDC(변경된 데이터 캡처)등의 기능을 제공한다. 이 기능은 내부적으로 데이터베이스 엔진이 파일 저장 정보를 관리 할 것이다. 이렇게 Enterprise 에디션을 사용하는 경우 Standard 에디션으로 다운그레이드 할 때 오류가 발생 할 수 있다. 동적 관리 뷰 sys.dm_db_persisted_sku_reatures 를 사용하여 특정 기능을 사용하는 데이터베이스의 영향도를 확인 할 수 있다. 예를 들어 SQL Server 2008 Standard 에디션 인스턴스에 Advent..

Downgrade from SQL Server Ent to Std Edition

Downgrade from SQL Server Ent to Std Edition Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server가 설치 되어 있을 때 불필요한 기능이나 라이선스 문제로 인하여 에디션을 변경 이슈이 있을 때 작업 절차에 대해서 알아 본다. 항상 어떤 작업을 하기 전에 모든 데이터베이스 백업을 하도록 하자. 이때 시스템 DB도 꼭 백업을 할 수 있도록 한다. 백업 후 각 데이터베이스에서 다음의 DMV를 실행 한다. DMV는 엔터프라이즈 기능을 사용하는 지 여부를 알려준다. SELECT * FROM sys.dm_db_persisted_sku_features 기존의 SQL Server버전과 빌드 번호를 확인한다. SQL Server 다운그레레..

트랜잭션 로그 여유 공간 모니터링

트랜잭션 로그 여유 공간 모니터링 Version : SQL Server 2005, 2008, 2008R2, 2012 SQL Server에서 발생하는 트랜잭션은 모두 트랜잭션 로그에 기록된다. 간혹 트랜잭션 로그 공간이 가득 차서 데이터베이스 운영에 문제가 발생하는 경우가 있다. 다음 스크립트를 사용하여 주기적으로 트랜잭션 로그 공간을 모니터링 하여 안정적인 운영을 할 수 있도록 하자. SELECT name , db.log_reuse_wait_desc , ls.cntr_value AS size_kb , lu.cntr_value AS used_kb , CAST(lu.cntr_value AS FLOAT) / CAST(ls.cntr_value AS FLOAT) AS used_percent , CASE WHEN ..