DBMS 39

[SQL Server / MS-SQL] Msg 5030, The database could not be exclusively locked to perform the operation. (DB Collation 데이터 정렬 변경)

1. 오류 발생 ALTER DATABASE [platform] COLLATE Korean_Wansung_CI_AS GO DB 의 Collation 을 변경하려고 하니, 아래와 같은 오류가 발생했다. The database could not be exclusively locked to perform the operation. 작업을 수행하기 위해 데이터베이스를 단독으로 잠글 수 없습니다. 2. 오류 원인 Collation 을 변경하려는 DB 가 다중 연결이 되어 있어 DB 의 Collation 을 변경 할 수 없기때문에 오류가 발생했다. 3. 오류 해결 해당 데이터베이스를 SINGLE_USER 모드로 변경하여 모든 연결을 종료한 후, Collation 을 변경을 진행한다. -- SINGLE_USER 모드로..

[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 암호를 모르는 경우 - 해당 암호화 키를 삭제 후 재생성을 해줘야 한다. -- 대칭키 삭제..

[MySQL] 데이터베이스 이름 변경 (RENAME DATABASE)

MySQL 에서는 버전 5.1.7 에서 RENAME DATABASE 구문이 추가되었으나, database 의 내용이 손실될 위험성이 발견이 되어 버전 5.1.23 이후부터 제거됐다고 한다. 그래서 database 이름을 변경하려면 새로운 database 를 생성한 후, 기존 databse 의 데이터를 옮겨야한다. 이를 RENAME TABLE 구문과 mysqldump 를 이용하여 변경해줄 수 있다. 1. RENAME TABLE 을 이용한 database 이름 변경 1) 새 database 생성 CREATE DATABASE `새DB명`; 2) 기존 database 의 테이블을 모두 옮겨준다. RENAME TABLE `기존DB명.기존TABLE명` TO `새DB명.새로운TABLE명`; 3) 옮길 procedur..

DBMS/MySQL 2020.11.25

[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] VALUE..

[SQL Server / MS-SQL] PK 없는 테이블 중복 데이터 제거

1. 이슈발생 PRIMARY KEY 가 없는 테이블에 INSERT 를 한 번 해야하는데 잘못해서 동일한 값이 여러번 삽입되었다. 고유한 값이 있다면 이를 삭제해주는데 문제가 없다만, 없다면 골치가 아프다.... (중복 데이터가 많을수록 더 더욱..) 1 SELECT * FROM NAME cs ENG_NAME KOR_NAME ANNA 김유정 JESSI 이복순 JESSI 이복순 JOHN 홍길동 JOHN 홍길동 JOHN 홍길동 2. 해결방법 하지만 해결방법은 아주 간단하다! ROW_NUMBER() OVER 함수를 이용하여 데이터에 순서값을 주어 중복된 값 중 하나만 두고 제거해주면 된다. 1 SELECT ROW_NUMBER() OVER (PARTITION BY ENG_NAME ORDER BY ENG_NAME)..

[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] 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 에서 메모리를 요청하지 않으면 메모리를 다 점유하겠다란 말..