본문 바로가기

DBMS/SQL Server

(95)
[SQL Server] 특정 문자열이 포함된 프로시저 찾기 다른 팀에서 자신들의 프로시저를 우리쪽 프로시저 안에서 호출하는지 확인 요청이 왔다. 그 많은 프로시저를 일일이 까보면서 다른 팀의 프로시저를 확인해야 할까... 프로시저 안에서의 프로시저명은 문자열로 취급되고, 아래의 쿼리로 찾을 수 있다. SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' AND ROUTINE_DEFINITION LIKE '%문자열%' ORDER BY ROUTINE_NAME SELECT A.NAME FROM dbo.SYSOBJECTS AS A INNER JOIN dbo.SYSCOMMENTS AS B ON A.ID = B.ID WHERE A.TYPE = 'P' AND B.TEXT LI..
[SQL Server] 로그 파일 크기 축소하기 로그 파일이 급격하게 증가하였을 경우, 로그 파일을 축소하기 위해 DBCC SHRINKFILE 문을 사용하면 된다. 예를들어 TestDB 라는 데이터베이스의 Test_LOG 라는 로그 파일이 현재 3GB이다. 이 로그 파일을 500MB로 축소하기 위해 다음과 같이 실행하면 된다. USE TestDB DBCC SHRINKFILE (N'Test_LOG', 500) 그런데 파일 크기가 축소되지 않는 경우가 있다. 이럴 때는 RECOVERY 모드를 SIMPLE로 변경하여 문제를 해결할 수 있다. -- SIMPLE 모드로 변경 ALTER DATABASE TestDB SET RECOVERY SIMPLE -- 로그 파일 축소 DBCC SHRINKFILE (N'Test_LOG', 500) -- FULL 모드로 변경 A..
[SQL Server] MDF, LDF 파일을 이용한 데이터베이스 복구 데이터베이스를 복구하는 방법은 여러가지가 있다. 백업 파일로 복구하는 방법도 있지만 백업 파일이 없을 경우 MDF, LDF 파일로 복구가 가능하다. 여기서 MDF 파일은 필수적으로 있어야 하지만 LDF 파일은 없어도 복구가 가능하다. MDF, LDF 파일을 이용해서 복구할 때 2가지 방법이 있다. sp_attach_db 시스템 프로시저를 이용하거나 CREATE DATABASE...FOR ATTACH 구문을 사용할 수 있다. 시스템 프로시저를 사용하여 ATTACH 하는 구문 sp_attach_db [ @dbname= ] 'dbname' , [ @filename1= ] 'filename_n' [ ,...16 ] DDL문을 사용하여 ATTACH 하는 구문 CREATE DATABASE database_name ..
[SQL Server] COUNT(*) vs COUNT(컬럼) COUNT(*) 과 COUNT(컬럼) 은 NULL을 포함할 때 다른 결과를 반환한다. COUNT(*) 은 NULL을 포함한 개수를 반환하지만 COUNT(컬럼)은 NULL을 제외한 개수를 반환한다. -- 테스트용 테이블 생성 CREATE TABLE COUNT_TEST ( COL1 INT IDENTITY(1,1) , COL2 INT ) GO -- 데이터 삽입 INSERT INTO COUNT_TEST(COL2) VALUES (1) INSERT INTO COUNT_TEST(COL2) VALUES (NULL) INSERT INTO COUNT_TEST(COL2) VALUES (7) INSERT INTO COUNT_TEST(COL2) VALUES (NULL) INSERT INTO COUNT_TEST(COL2) VAL..
[SQL Server] 테이블의 종류 SQL Server에서 테이블은 모두 네 가지로 나눌 수 있다. 영구 테이블, 로컬 임시 테이블, 전역 임시 테이블, 테이블 변수로 나눌 수 있다. 영구 테이블 : 일반적인 테이블로 데이터베이스가 다시 시작되어도 항상 존재하는 테이블 로컬 임시 테이블 : 테이블 명 앞에 '#'을 붙인다. 사용자 세션 동안만 유지되고 tempdb에 생성된다. 전역 임시 테이블 : 테이블 명 앞에 '##'을 붙인다. 전체 사용자 세션에서 유지되고 tempdb에 생성된다. 테이블 변수 : 배치 동안에만 동작하며, 배치가 끝나면 테이블 변수는 사라진다. 임시 테이블은 생성 후 tempdb..Sysobjects를 검색하면 tempdb에 해당 테이블들이 생성되어 있는 것을 확인할 수 있다. USE TestDB GO CREATE T..
[SQL Server] uniqueidentifier 데이터 형식 uniqueidentifier 데이터 형식은 GUID(Globally Unique Identifier) 역할을 하는 16바이트 이진 값을 저장한다. GUID는 고유한 이진 숫자이며, 전 세계 모든 컴퓨터는 고유한 GUID 값을 생성한다. GUID는 네트워크 카드 번호, CPU 클락, 현재 시간 및 날짜 등과 같은 여러 변수들을 사용해서 생성된 값으로 전 세계에서 유일한 구분 값으로 이용된다. 이런 값이 왜 필요한가? Identity로 생성되는 primary key 값은 해당 테이블에서는 식별이 가능하지만, 바로 인접한 테이블이나 전세계에 걸쳐있는 테이블과는 식별하지 못한다. 즉 중복 값이 발생할 수 있다는 것이다. 하지만 테이블 A의 PK 값이 '52D383B1-B674-4AFD-88C7-17B7BAB7..
[SQL Server] char vs varchar 사용되는 문자열 값이 길이가 일정한지 가변적인지에 따라 데이터형식을 알맞게 사용하여야 한다. 문자열의 길이가 일정하면 char 혹은 nchar를 사용하고 가변적이면 varchar 혹은 nvarchar를 사용한다. 항상 3자 혹은 4자의 문자열이 들어오면 일정한 것이고, 처음에는 1자가 들어오고 다음에는 100자가 들어온다면 가변적인 것이다. 주의할 것은 고정이라고 해서 항상 3자만 들어오는 것이 아니라, 그 길이가 일정한 범위 내에서 차이가 없다는 것을 의미하는 것이다. char 혹은 nchar는 값의 길이가 고정되어 있다. 만일 고정된 길이보다 작은 문자열이 들어오면 강제로 ''(공백문자)를 넣어서 문자열의 길이를 통일시킨다. varchar 혹은 nvarchar는 길이가 정해져 있다 하더라도 실제 들어..
[SQL Server] 스키마 변경 기록 확인하기 데이터베이스, 테이블, 저장 프로시저 등의 스키마가 누가, 언제 변경하였는지 확인해야 할 경우가 있다. 데이터베이스에서 마우스 우클릭 ▶ 보고서 ▶ 표준 보고서 ▶ 스키마 변경 기록을 선택하면 확인 가능하다. 스키마의 생성, 삭제, 수정 기록을 확인할 수 있다.