본문 바로가기

DBMS/SQL Server (MS-SQL)

(33)
[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) 데이터베이스를 운영중에 디스크 공간 부족으로 인해 데이터 파일(Data File) 을 새로운 디스크로 옮겨야 할 경우, 데이터베이스 분리 및 연결을 이용할 수 있다. 데이터베이스 분리 및 연결은 같은 컴퓨터의 다른 SQL Server 인스턴스로 변경하거나 데이터베이스를 이동하는 경우 유용하다. 데이터베이스를 분리하면 SQL Server 인스턴스에서 해당 데이터베이스가 제거되지만 데이터 파일 (Data File) 과 트랜잭션 로그 파일 (Transaction Log File) 은 그대로 유지된다. ※ 데이터베이스를 분리할 수 없는 경우 - 데이터베이스 스냅샷 (Database Snapshot) 이 있는 경우 → 먼저 해당 데이터베이스의 스냅샷을 삭제해야 한다. - 데이터베이스 미러링 (Database Mi..
[SQL Server / MS-SQL] 운영 체제 오류 5: "5(액세스가 거부되었습니다.)" 물리적 파일 "D:\MSSQL\DATA\test.mdf"을(를) 열 수 없습니다. 운영 체제 오류 5: "5(액세스가 거부되었습니다.)". 이 오류는 데이터베이스 파일을 다른 위치로 옮기기 위해데이터베이스 분리 후 파일의 저장위치를 변경하고 연결(Attach) 시도 시 발생한 오류이다.  [SSMS][T-SQL] 이 오류는 데이터베이스 파일을 옮기려는 경로에 접근(액세스) 권한이 없어서 발생한다.먼저, MSSQL 의 기본 저장 경로의 권한을 확인해보자. 나의 경로는 아래와 같다."C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA"  [DATA] 폴더 우클릭 > [속성] 선택 [DATA속성] 폴더 > [보안] 탭 선택그룹 또는 사용자..
[SQL Server / MS-SQL] 데이터베이스 소유자 (db 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:: test TO an;  [변경결..
[SQL Server / MS-SQL] 모든 프로시저명 (Procedure Name) 조회 INFORMATION_SCHEMA.ROUTINES 을 이용하여 DB 내의 모든 프로시저명을 조회할 수 있다.시스템 정보 스키마 뷰로, ROUTINES 에서는 저장된 프로시저(Procedure) 와 함수(Function) 정보를 알 수 있다. 전체 프로시저 조회SELECT *FROM INFORMATION_SCHEMA.ROUTINESWHERE ROUTINE_TYPE = 'PROCEDURE' 프로시저의 전체 정보를 알 수 있다.DB명, 스키마명, 프로시저명, 프로시저 내용, 생성일, 최근수정일 등이 이에 해당된다.  프로시저명, 프로시저내용 조회SELECT ROUTINE_NAME AS [ProcedureName],                ROUTINE_DEFINITION AS [ProcedureConten..
[SQL Server / MS-SQL] 데이터베이스 복원 실패 (WITH MOVE 옵션) 1. 오류발생1RESTORE 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 운영 체제 오류 3..
[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 / MS-SQL] 특정 테이블 정보 (컬럼명, 데이터타입, 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 = '테이블명'
[SQL Server / MS-SQL] Error - The data types varchar and datetime2 are incompatible in the add operator. PRINT ('TIME : ' + SYSDATETIME()); 이 쿼리를 실행하면 위와 같은 오류가 난다. 오류가 나는 이유는 '소요시간' 은 데이터타입이 문자인 varchar 이고, SYSDATETIME() 은 시간인 datetime2 인데 이 두 개를 + 라는 연산자로 연결해주려하여 오류가 난 것이다.  (*GETDATE() 도 마찬가지) 이 오류를 해결하기 위해서는 데이터타입을 맞춰주어야 한다.즉, SYSDATETIME() 을 CONVERT 함수를 통해 문자열함수로 바꿔주면 된다 :) 일자를 변환하는 방식은 무수히 많지만, 나는 CONVERT(VARCHAR(23), DATETIME, 21) 형식을 이용하겠다.아래와 같이 변경해서 실행하면, PRINT ('TIME : ' + CONVERT(VARCHA..
[SQL Server / MS-SQL] Error - An explicit value for the identity column in table 'POST' can only be specified when a column list is used and IDENTITY_INSERT is ON. Msg 8101, Level 16, State 1, Line 12An explicit value for the identity column in table 'POST' can only be specified when a column list is used and IDENTITY_INSERT is ON.   위 오류는 identity 속성이 적용된 테이블에 insert 를 하려고 할 때 발생하는 오류이다.identity 은 자동으로 값을 늘려주는 기능으로 identity 로 설정한 컬럼은 insert 마다 자동으로 값이 증가한다. 그런데 내가 만약 identity 값을 지정하고 싶을 때, identity 컬럼에 값을 직접 넣어주면위와 같은 오류가 발생한다. 예를 들어,컬럼 SEQ 에 identity 를 적..

반응형