본문 바로가기

SQL Server

(28)
[SQL Server / MS-SQL] 제약조건 (Constraint) 1. 제약 조건ㆍ 제약조건이란? ㄴ 데이터의 무결성을 지키기 위해 제한된 조건 ㄴ 어떠한 조건을 만족했을때만 데이터가 입력되도록 제한해주는 역할 ㆍ SQL Server 에서 제공하는 제약 조건은 아래와 같다. ㄴ NOT NULL ㄴ CHECK 제약 조건 ㄴ UNIQUE 제약 조건 ㄴ PRIMARY KEY 제약 조건 ㄴ FOREIGN KEY 제약 조건 ㄴ DEFAULT 2. NOT NULL ㆍ 해당 컬럼에는 NULL 값이 들어올 수 없다.-- ID 라는 컬럼엔 NULL 값이 들어올 수 없다.CREATE TABLE account_tbl ( ID varchar(10) NOT NULL) 3. CHECK 제약 조건 ㆍ 해당 컬럼에 특정 조건을 걸어 이에 해당하는 값만 들어올 수 있게끔 해준다. ㆍ 어떤 특정한 값..
[SQL Server / MS-SQL] Msg 15581, 이 작업을 수행하기 전에 데이터베이스에서 마스터 키를 만들거나 세션의 마스터 키를 여십시오. 1. 오류 발생  2. 오류 원인DB 를 이관 후, 암호화된 복호화하려고 할 때 위 오류로,나의 경우에는, 아래 명령어가 있는 프로시져를 실행하려니 위 오류가 발생했다.OPEN SYMMETRIC KEY sym_encryption_test DECRYPTION BY ASYMMETRIC KEY asym_encryption_test  3. 오류 해결(1) 이관 전 사용했던 MASTER KEY 암호를 아는 경우 - 아래의 명령어를 통해 변경해주면 된다.ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '마스터 키 암호'; (2) 이관 전 사용했던 MASTER KEY 암호를 모르는 경우  - 해당 암호화 키를 삭제 후 재생성을 해줘야 한다.-- 대칭키 삭제 DR..
[SQL Server / MS-SQL] Msg 8111, Cannot define PRIMARY KEY constraint on nullable column in table. 1. 오류 발생    2. 오류 원인위 오류는 테이블에 PRIMARY KEY 를 추가하려고 할 때 발생하는 오류로,PK 를 추가하려는 컬럼이 NULL 값을 허용하기 때문에 발생한다.   3. 오류 해결해당 컬럼의 NULL 값 허용을 NOT NULL 로 변경하면 오류를 해결할 수 있다.쿼리를 통해 직접 오류 발생 및 해결해보자.  (1) 아래와 같은 테이블과 데이터를 생성--1. 테이블 생성CREATE TABLE [dbo].TEST] (   [ID] [int] NULL,   [NAME] [char](3) NULL);--2. 데이터 삽입INSERT INTO [TEST] VALUES (1,'JAN');INSERT INTO [TEST] VALUES (3,'MAR');INSERT INTO [TEST] VALUES..
[SQL Server / MS-SQL] PK 없는 테이블 중복 데이터 제거 이슈 발생PRIMARY KEY 가 없는 테이블에 INSERT 를 한 번 해야하는데 잘못해서 동일한 값이 여러번 삽입되었다.고유한 값이 있다면 이를 삭제해주는데 문제가 없다만, 없다면 골치가 아프다.... (중복 데이터가 많을수록 더 더욱..) 1SELECT * FROM NAMEcs ENG_NAMEKOR_NAMEANNA김유정JESSI이복순JESSI이복순JOHN홍길동JOHN홍길동JOHN홍길동   해결 방법하지만 해결방법은 아주 간단하다!ROW_NUMBER() OVER 함수를 이용하여 데이터에 순서값을 주어 중복된 값 중 하나만 두고 제거해주면 된다. 1SELECT ROW_NUMBER() OVER (PARTITION BY ENG_NAME ORDER BY ENG_NAME) AS NUM, * FROM NAMEcs..
[SQL Server / MS-SQL] Microsoft SQL Server 로그인 오류 18456 1. 오류발생SSMS 에서 서버에 로그인을 할 때 Windows 인증과 SQL Server 인증이 있다.해당 오류는 SQL Server 인증으로 로그인 시도 시 발생한 오류이다.  2. 오류원인해당 오류의 원인은 Windows 인증만 사용하도록 설정되어 있기 때문이다.이를 해결하기 위해서 혼합 모드 (Windows 인증 + SQL Server 인증) 인증으로 변경해주면 된다. 바로 해결해보도록 하자.  3. 해결방법(1) Windows 인증으로 로그인 후 해당 서버를 우클릭 후 속성에 들어간다.  (2) 서버 속성 화면이 뜰텐데 보안 탭에 들어간 후, 서버 인증을 SQL Server 및 Windows 인증 모드로 변경 후 적용한다.  (3) 변경 후 서버를 재시작한다.   (4) 재시작을 해보자. 먼저 ..
[SQL Server / MS-SQL] WITH(NOLOCK) 사용법, 주의할 점, 공유잠금 MSSQL 은 기본적으로 SELECT 시 공유잠금(S Lock) 이 걸린다.이는 MSSQL 의 기본 격리수준(Isolation Level) 이 Read Committed 이기 때문이다.즉, DML(INSERT, UPDATE, DELETE) 작업중인 ROW 또는 TABLE 에 SELECT 할 경우,해당 작업이 끝나야 SELECT 할 수 있다는 의미이다.   만일 이렇게 수행된다면 DB의 성능은 떨어지고, 데드락(Deadlock) 이 발생될 수 있다. 이를 방지하기 위해 WITH(NOLOCK) 을 사용할 수 있다.WITH(NOLOCK) 의 격리수준(Isolation Level)은 Read Uncommitted 와 같다고 보면 된다. 즉, SELECT 할 ROW 또는 TABLE 이 잠겨있어도(작업중이여도) 기..
[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..

반응형