DBMS/SQL Server (MS-SQL) 25

[SQL Server/MS-SQL] MS-SQL 에서 MySQL Linked Server 연결

1. MySQL 용 ODBC 다운로드 https://dev.mysql.com/downloads/connector/odbc/ MySQL :: Download Connector/ODBC Select Operating System: Select Operating System… Microsoft Windows Ubuntu Linux Debian Linux SUSE Linux Enterprise Server Red Hat Enterprise Linux / Oracle Linux Fedora Linux - Generic Oracle Solaris macOS Source Code Select OS Version: All Windows (x86 dev.mysql.com 2. ODBC Data Source Adminis..

[SQL Server / MS-SQL] 특정 IP 주소별 국가(코드) 조회

특정 IP 주소를 가지고 국가코드(혹은 국가) 를 조회하려고 한다. 하지만 IPv4 형식으로 DB 에서 조회 시 원하는 데이터를 얻을 수 없다. 이는 IP 주소를 정수형으로 변환하여 해결 할 수 있으며, 아래의 3가지 작업이 필요하다. 1. 국가별 IP 대역 테이블 생성 2. IP 주소 정수화 변환 함수 생성 3. IP 주소별 국가 코드 조회 SP 생성 (이건 필요에 따라 생성해도 되고 안해도 됨!) 우선, 국가별 IP 대역 데이터를 가져오자. 국가별 IP 대역 데이터는 한국인터넷정보센터(KRNIC) 에서 가져올 수 있다. https://xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e/jsp/statboard/IPAS/ovrse/natal/IPaddrBandCurren..

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

[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 이 잠겨있어도(작업중이여도)..