MSSQL 관리자가 알아야 할 기법 11

1. 데이터베이스의 모든 테이블 행을 가장 빨리 세는 방법
SQL 서버 데이터베이스 내에 존재하는 시스템 테이블 ‘sysindexes’에는 ‘rows’란 컬럼이 존재한다. 이 컬럼은 테이블에 반영된 행들의 수를 갖고 있다. 다음 SQL문을 실행시키면 원하는 결과를 효과적으로 얻을 수 있을 것이다.

select o.name, rows
    from sysobjects o inner join sysindexes i on o.id = i.id
    where i.indid < 2
    order by o.name

where 절의 “indid<2” 부분은 클러스터드 인덱스(clustered index) 또는 힙(heap) 정보를 찾지 않기 위함이다. 이 결과는 실제로 트랜잭션(transaction)이 일어난 행만 카운트한다.

2. 스토어드 프로시져에 대한 파라미터로 테이블 이름을 사용하는 방법
이것을 위해서는 동적인 SQL을 사용해야 한다. 다음 스크립트를 참조하기 바란다.

Create proc 

DB Attach And Detach

다른 드라이브로 변경하시려면 우선은 디비에서 옮기려고하는 DB를 따로 분리해야 합니다.

그러기 위해서 사용하는 것이 master db의 storeprocedure를 보면 sp_detach_db 가 있습니다. sp를 사용하여 데이터베이스에서 분리를 시킴니다.

예제> sp_detach_db ‘데이터베이스명’

분리시킨 데이터베이스의 mdf 와 ldf 는 이제 삭제 혹은 이동이 가능합니다. 두개의 파일을 다른 드라이브로 이동을 시킵니다.

그리고 이동시킨 데이터베이스의 파일을 기존의 데이터베이스로 붙여야 정상적인 사용이 가능합니다. 그러기 위해서 사용하는 stroreprocedure가 sp_attach_db 입니다.

예제> sp_attach_db ‘데이터베이스명’, ‘mdf 파일경로’, ‘ldf 파일경로’

이렇게 하시면 기존의 데이터베이스명에 경로가 다르게 설정되게 됩니다.

위와같이 복잡한 과정을 거치는 이유는 데이터베이스의 트리에 해당 데이터베이스가 보인다는 것은 사용을 하고 있다는 것입니다. 그럼 삭제 혹은 이동이 불가능 합니다. MS-SQL에서 사용하고