DBMS/SQL Server (MS-SQL) 25

[SQL Server / MS-SQL] Msg 5074, The object 'Constraint Name' is dependent on column 'Column Name'. Msg 4922, ALTER TABLE ALTER COLUMN 'Column Name' failed because one or more objects access this column.

1. 오류 발생 1 2 3 4 Msg 5074, Level 16, State 1, Line 5 The object 'DF_TBL_GOODS_CNT' is dependent on column 'CNT'. Msg 4922, Level 16, State 9, Line 5 ALTER TABLE ALTER COLUMN CNT failed because one or more objects access this column. cs 1 2 3 4 메시지 5074, 수준 16, 상태 1, 줄 5 'DF_TBL_GOODS_CNT'개체는 'CNT'열에 종속됩니다. 메시지 4922, 수준 16, 상태 9, 줄 5 ALTER TABLE ALTER COLUMN CNT가 하나 이상의 개체가 이 열에 액세스하므로 실패했습니다. cs..

[SQL Server / MS-SQL] 서버 메모리 제한 및 권장 메모리 설정 (min / max server memory)

MSSQL 서버는 OS 에서 메모리를 요청하지 않으면 한 번 호출한 메모리를 반환하지 않고 계속 점유한다. 이에 MSSQL 을 사용하다보면 MSSQL 서버가 90% 이상 메모리를 차지하는 경우를 볼 수 있다. 이로 인해 다른 프로세스들이 메모리를 충분히 사용하지 못하여 시스템 성능이 떨어질 수 있으며, 서버에 과부하가 발생하여 문제가 생기기도 한다. 이를 방지하기 위해 MSSQL 에서 최대 서버 메모리 (max server memory) 를 설정하여 메모리를 제한시켜줄 수 있다. 만약, MSSQL 의 메모리 제한을 따로 하지 않았다면 최대 서버 메모리 (max server memory) 는 2,147,483,647(MB) 로 되어있다. 이는 OS 에서 메모리를 요청하지 않으면 메모리를 다 점유하겠다란 말..

[SQL Server / MS-SQL] MI 읽기 전용 보조 복제본으로 접속하기 (Connecting to a read-only secondary replica)

Azure Managed Instance 에서 읽기 전용 보조 복제본으로 접속해보려고 한다.  1. Object Explorer > Database Engine...  2. Connect to Server > Sever name, Login/Password 입력 > Options  3. Additional Connection Parameters > ApplicationIntent=ReadOnly 입력 > Connect*단,  General Purpose(GP) 서비스 계층은 지원하지 않으며, Business Critical(BC) 서비스 계층에서만 지원된다.  4. 아래 쿼리를 통해 READ_ONLY 확인1SELECT DATABASEPROPERTYEX(DB_NAME(), 'Updateability')cs..

[SQL Server / MS-SQL] 데이터베이스 분리 및 연결 (Detach / Attach)

# 데이터베이스 분리 및 연결 (Database Detach And Attach) 데이터베이스를 운영중에 디스크 공간 부족으로 인해 데이터 파일(Data File) 을 새로운 디스크로 옮겨야 할 경우, 데이터베이스 분리 및 연결을 이용할 수 있다. 데이터베이스 분리 및 연결은 같은 컴퓨터의 다른 SQL Server 인스턴스로 변경하거나 데이터베이스를 이동하는 경우 유용하다. 데이터베이스를 분리하면 SQL Server 인스턴스에서 해당 데이터베이스가 제거되지만 데이터 파일 (Data File) 과 트랜잭션 로그 파일 (Transaction Log File) 은 그대로 유지된다. ※ 데이터베이스를 분리할 수 없는 경우 - 데이터베이스 스냅샷 (Database Snapshot) 이 있는 경우 → 먼저 해당 데..

[SQL Server / MS-SQL] 운영 체제 오류 5: "5(액세스가 거부되었습니다.)"

# 운영 체제 오류 5: "5(액세스가 거부되었습니다.)" (Microsoft SQL Server, 오류: 5120) 물리적 파일 "D:\MSSQL\DATA\test.mdf"을(를) 열 수 없습니다. 운영 체제 오류 5: "5(액세스가 거부되었습니다.)". 이 오류는 데이터베이스 파일을 다른 위치로 옮기기 위해 데이터베이스 분리 후 파일의 저장위치를 변경하고 연결(Attach) 시도 시 발생한 오류이다. [SSMS] [T-SQL] 이 오류는 데이터베이스 파일을 옮기려는 경로에 접근(액세스) 권한이 없어서 발생한다. 먼저, MSSQL 의 기본 저장 경로의 권한을 확인해보자. 나의 경로는 아래와 같다. "C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\..

[SQL Server / MS-SQL] 데이터베이스 소유자 (db owner) 조회 및 변경

# 데이터베이스 소유자 (Database Owner) 조회 및 변경 먼저 각 데이터베이스의 소유자를 조회해보자. 조회 방법1. SELECT a.name AS [Database], b.name AS [Owner] FROM sys.databases AS a JOIN sys.sql_logins AS b ON a.owner_sid = b.sid 조회 방법2. SELECT name AS [Database], SUSER_SNAME(owner_sid) AS [Owner] FROM sys.databases [조회 결과] 나는 'test' 라는 DB 의 소유자를 'sa' 에서 'an' 으로 바꾸어주려고 한다. 이때 아래의 쿼리를 이용해서 바꿔줄 수 있다. ALTER AUTHORIZATION ON DATABASE:: te..

[SQL Server / MS-SQL] 모든 프로시저명 (Procedure Name) 조회

# DB 내 모든 프로시저명 (Procedure Name) 조회 INFORMATION_SCHEMA.ROUTINES 을 이용하여 DB 내의 모든 프로시저명을 조회할 수 있다. 시스템 정보 스키마 뷰로, ROUTINES 에서는 저장된 프로시저(Procedure) 와 함수(Function) 정보를 알 수 있다. 전체 프로시저 조회 SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' 프로시저의 전체 정보를 알 수 있다. DB명, 스키마명, 프로시저명, 프로시저 내용, 생성일, 최근수정일 등이 이에 해당된다. 프로시저명, 프로시저내용 조회 SELECT ROUTINE_NAME AS [ProcedureName], ROUTINE_DEFI..

[SQL Server / MS-SQL] 데이터베이스 복원 실패 (WITH MOVE 옵션)

1. 오류발생 1 RESTORE DATABASE CRM FROM DISK = 'E:\BACKUP\CRM_backup.bak' cs 위와 같이 데이터베이스 복원을 시도하였으나, 아래와 같은 오류가 발생했다. Msg 5133, Level 16, State 1, Line 1 운영 체제 오류 3(지정된 경로를 찾을 수 없습니다.)(으)로 인해 파일 "M:\DATA\CRM.mdf"에 대한 디렉터리를 조회하지 못했습니다. Msg 3156, Level 16, State 3, Line 1 파일 'Log_Data'을(를) 'M:\DATA\CRM.mdf'(으)로 복원할 수 없습니다. WITH MOVE를 사용하여 올바른 파일 위치를 확인하십시오. Msg 5133, Level 16, State 1, Line 1 운영 체제 오..

[SQL Server / MS-SQL] count(*) / count(1) / count(column) 차이

먼저 count( ) 함수 란? 집계함수로, ( ) 내의 있는 항목의 수를 출력한다. 즉, count(name) 의 경우 name 이라는 컬럼의 갯수를 나타낸다는 의미이다. count(*) 은 전체 행 수를 나타내며, count(1) 과 같은 의미이다. 어디서 count(1) 이 count(*) 보다 더 빠르다고 들었어서 count(1) 을 썻던 적이 있는데 결론적으로 성능적 차이 없다. 둘이 동일하다고 보면된다. count(*) = count(1) 대신 count(*) / count(1) 과 count(name) 은 다르다. NULL 값을 포함하냐 마냐의 차이가 있다. count(*) 과 count(1) 은 NULL 값인 컬럼도 포함하지만, count(name) 은 NULL 값인 컬럼은 포함하지 않는다..

[SQL Server] 특정 테이블 정보 (컬럼명, 데이터타입, Null여부) 조회

특정 테이블 정보 (컬럼명, 데이터타입, Null여부) 조회 테이블명세서를 작성하거나 테이블의 컬럼에 대한 정보를 한 눈에 보고 싶을 때 아래 쿼리를 이용해서 조회할 수 있다 :) SELECT ORDINAL_POSITION AS [No], COLUMN_NAME AS [Column], COLUMN_DEFAULT AS [Comment], DATA_TYPE AS [DataType], IS_NULLABLE AS [Null] FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '테이블명'