전체 글 54

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

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

[MySQL] Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

1. 오류 발생 (Error Occurred) Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 2. 오류 원인 (Error Cause) 테이블을 UPDATE 나 DELETE 를 하려고 할 때, KEY 컬럼을 이용한 수정/삭제만 가능하도록 설정되어 있어 KEY 가 아닌 컬럼을 이용하여 수정/삭제 할 경우, 해당 오류가 발생한다. When trying to UPDATE or DELETE a tab..

DBMS/MySQL 2020.04.29

[MySQL] Fetal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

1. 오류 발생 replication 구성 시 mysqldump 를 통해 데이터를 그대로 복사하여 리플리케이션을 구성 시 발생하는 오류이다. mysql> show slave status\G *********************************1. row ************************************ Slave_IO_State: Master_Host: 12.345.678 Master_User: repl_user Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000010 Read_Master_Log_Pos: 120 Relay_Log_File: mysqld-relay-bin.000001 Relay_Log_Pos: 4 ..

DBMS/MySQL 2020.03.30

[MySQL] ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

[root@test ~]$ mysql -u dba -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socker '/var/lib/mysql/mysql.sock' (2) mysql 접속 중 위와 같은 오류가 발생했다. '/var/lib/mysql/mysql.sock' 에 연결할 수 없다는 오류이다. 해당 오류가 발생하는 원인과 해결방법이 다양한데 나는 두가지 정도 체크한 후에 해결하였다. [원인-1] mysqld 가 시작되지 않은 상황에 발생할 수 있다. 아래의 명령어를 통해 나의 mysqld 작동 상태를 확인 할 수 있다. [root@test ~]$ service mysqld status MySQL is ..

DBMS/MySQL 2020.02.19

[MySQL] 데이터베이스 및 테이블별 용량 (Size by databases and tables) 조회

데이터베이스별, 테이블별, 전체 용량을 아래 쿼리를 통해 확인 할 수 있다. 1. 데이터베이스별 용량 (Database Size) 조회 SELECT table_schema AS 'DatabaseName', ROUND(SUM(data_length+index_length)/1024/1024, 1) AS 'Size(MB)' FROM information_schema.tables GROUP BY table_schema ORDER BY 2 DESC; 2. 전체 용량 (Total Size) 조회 SELECT ROUND(SUM(data_length+index_length)/1024/1024, 1) AS 'Used(MB)', ROUND(SUM(data_free)/1024/1024, 1) AS 'Free(MB)' FRO..

DBMS/MySQL 2020.02.18