Database
-
안녕하세요. 이 글은 제가 예전에 작성하였던 네이버 블로그의 글을 다시 올린 글입니다. 다소 기존의 글보다 내용의 퀄리티가 떨어질 수 있으니 이점 유의해주시기 바랍니다. 이 글을 작성하였을 당시의 연차가 2년 차여서 글 쓰는 실력도 없었고 배우면서 정리던 단계라서 많이 부족합니다. 들어가며... NULL은 RDB에서 개념을 정확하게 알고 있어야 합니다. NULL은 공백이 아닙니다. 그래서 NULL을 포함하냐? 하지 않냐? 는 굉장히 중요합니다. 데이터엔지니어, 데이터분석가 두 직업을 하면서도 분명히 알고 있어야 합니다. 그래서 꼭 RDB의 NULL이 아니더라도 BigQuery , Redshift 등의 모든 데이터를 SQL을 사용하는 곳에서 NULL은 알고 있어야 합니다. 또한 NULL의 경우 취급 방식이..
[MSSQL] NULL 비교안녕하세요. 이 글은 제가 예전에 작성하였던 네이버 블로그의 글을 다시 올린 글입니다. 다소 기존의 글보다 내용의 퀄리티가 떨어질 수 있으니 이점 유의해주시기 바랍니다. 이 글을 작성하였을 당시의 연차가 2년 차여서 글 쓰는 실력도 없었고 배우면서 정리던 단계라서 많이 부족합니다. 들어가며... NULL은 RDB에서 개념을 정확하게 알고 있어야 합니다. NULL은 공백이 아닙니다. 그래서 NULL을 포함하냐? 하지 않냐? 는 굉장히 중요합니다. 데이터엔지니어, 데이터분석가 두 직업을 하면서도 분명히 알고 있어야 합니다. 그래서 꼭 RDB의 NULL이 아니더라도 BigQuery , Redshift 등의 모든 데이터를 SQL을 사용하는 곳에서 NULL은 알고 있어야 합니다. 또한 NULL의 경우 취급 방식이..
2023.12.12 -
안녕하세요. 이 글은 제가 예전에 작성하였던 네이버 블로그의 글을 다시 올린 글입니다. 다소 기존의 글보다 내용의 퀄리티가 떨어질 수 있으니 이점 유의해주시기 바랍니다. 이 글을 작성 하였을 당시의 연차가 1년 차여서 글 쓰는 실력도 없었고 배우면서 정리던 단계라서 많이 부족합니다. 이 글을 읽기 전에 트랜잭션의 개념을 알아두면 정말 좋습니다. RDB에서 트랜잭션이란 작업의 단위를 뜻 합니다. RDB에서는 트랜잭션을 통해서 작업이 묶이고 해당 트랜잭션의 작업은 모두 성공 또는 모두 실패해야 합니다. 그렇기에 Begin End 구문을 통해서 작업을 묶어줘야 합니다. 관련하여 잘 정리된 블로그를 한번 읽어보시고 이 글을 읽으면 많은 도움이 됩니다. https://csj000714.tistory.com/623..
[MSSQL] BEGIN ... END안녕하세요. 이 글은 제가 예전에 작성하였던 네이버 블로그의 글을 다시 올린 글입니다. 다소 기존의 글보다 내용의 퀄리티가 떨어질 수 있으니 이점 유의해주시기 바랍니다. 이 글을 작성 하였을 당시의 연차가 1년 차여서 글 쓰는 실력도 없었고 배우면서 정리던 단계라서 많이 부족합니다. 이 글을 읽기 전에 트랜잭션의 개념을 알아두면 정말 좋습니다. RDB에서 트랜잭션이란 작업의 단위를 뜻 합니다. RDB에서는 트랜잭션을 통해서 작업이 묶이고 해당 트랜잭션의 작업은 모두 성공 또는 모두 실패해야 합니다. 그렇기에 Begin End 구문을 통해서 작업을 묶어줘야 합니다. 관련하여 잘 정리된 블로그를 한번 읽어보시고 이 글을 읽으면 많은 도움이 됩니다. https://csj000714.tistory.com/623..
2023.12.12 -
SQL Developer 사용하다가 SQL Developer가 접속이 안 되는 문제가 있었습니다. 몇 가지 의심을 하다가 Oracle Listener가 실행되지 않아서 접속이 불가능 경우가 있었습니다. 오류 발생 SQL Developer에는 다음과 같은 오류로 인하여 접속이 불가능하다고 나왔습니다. The Network Adapter could not establish the connection 원인 파악 위의 오류의 경우 몇가지 문제로 인하여 발생할 수 있다고 합니다. 접속 정보 오류 방화벽 오류 Oracle Listener 실행 중 아님 접속 정보는 문제가 없었으므로... Network 문제라고 하여, 우선 방화벽을 의심하였습니다. Telnet을 시도하였으나 역시 접속이 불가능하였습니다. 그래서 SE..
Oracle Listener 시작 불가능 해결SQL Developer 사용하다가 SQL Developer가 접속이 안 되는 문제가 있었습니다. 몇 가지 의심을 하다가 Oracle Listener가 실행되지 않아서 접속이 불가능 경우가 있었습니다. 오류 발생 SQL Developer에는 다음과 같은 오류로 인하여 접속이 불가능하다고 나왔습니다. The Network Adapter could not establish the connection 원인 파악 위의 오류의 경우 몇가지 문제로 인하여 발생할 수 있다고 합니다. 접속 정보 오류 방화벽 오류 Oracle Listener 실행 중 아님 접속 정보는 문제가 없었으므로... Network 문제라고 하여, 우선 방화벽을 의심하였습니다. Telnet을 시도하였으나 역시 접속이 불가능하였습니다. 그래서 SE..
2021.06.02 -
Airflow의 스케줄 시간을 지표로 표현할 일이 있어서 Airflow의 스케줄 시간을 mysql을 통해서 Datetime 형태로 parsing 해야 하는 이슈가 있었습니다. 여기저기 찾아봤지만 정상적으로 안되어서 직접 Query를 작성하였습니다. 우선 한 가지 아쉬운 것은 모든 스케줄 시간을 parsing 하지는 못 하였습니다. 스케줄 시간에서 매일 발생하는 스케줄 시간만 표현하였고, 나머지 요일별, 월별, 주별 이런 내용은 parsing 하지 못하였습니다. 차후에 이 부분도 추가하여 글을 작성하도록 하겠습니다. 우선 저희 쪽에서 사용하는 부분은 일별 스케줄이라서, 이 부분만 작성 한 점 죄송합니다. 원본 데이터 원본 데이터의 경우 다음과 같은 형태로 있습니다. 여기서 @once도 제외하였습니다. (단..
MySQL을 이용하여 Airflow(Crontab) 스케줄 시간 parsingAirflow의 스케줄 시간을 지표로 표현할 일이 있어서 Airflow의 스케줄 시간을 mysql을 통해서 Datetime 형태로 parsing 해야 하는 이슈가 있었습니다. 여기저기 찾아봤지만 정상적으로 안되어서 직접 Query를 작성하였습니다. 우선 한 가지 아쉬운 것은 모든 스케줄 시간을 parsing 하지는 못 하였습니다. 스케줄 시간에서 매일 발생하는 스케줄 시간만 표현하였고, 나머지 요일별, 월별, 주별 이런 내용은 parsing 하지 못하였습니다. 차후에 이 부분도 추가하여 글을 작성하도록 하겠습니다. 우선 저희 쪽에서 사용하는 부분은 일별 스케줄이라서, 이 부분만 작성 한 점 죄송합니다. 원본 데이터 원본 데이터의 경우 다음과 같은 형태로 있습니다. 여기서 @once도 제외하였습니다. (단..
2021.05.21 -
요즘 많은 분들이 SQL을 통해서 데이터를 조회하고 추출합니다. 예전에는 DBA 분들이 주로 SQL을 통해서 데이터를 조회하고 추출하였습니다. 하지만 이제는 데이터 분석가, 사업, 기획, 개발 많은 분야에서 다양한 분들이 SQL을 통해서 데이터를 조회 및 추출을 합니다. 이렇게 많은 분들이 사용하다 보니 비전문가가 많아서 성능을 고려하지 못하고 SQL을 쓰는 사례가 많아졌습니다. 이는 자칫 실서버 또는 분석용 서버에 무리를 주는 경우가 있어서 이러한 부분을 조금이라도 줄이기 위해서 글을 작성합니다. 이 글의 경우 mysql , google big query에서 테스트하였습니다. (2020 기준으로 회사에서 2개를 사용) 첫 번째, WHERE절의 좌변을 가공하지 마세요. 이게 무슨 말일까요? SQL의 기본..
비전공자가 알아두면 좋은 SQL 인덱스 성능 팁 2가지요즘 많은 분들이 SQL을 통해서 데이터를 조회하고 추출합니다. 예전에는 DBA 분들이 주로 SQL을 통해서 데이터를 조회하고 추출하였습니다. 하지만 이제는 데이터 분석가, 사업, 기획, 개발 많은 분야에서 다양한 분들이 SQL을 통해서 데이터를 조회 및 추출을 합니다. 이렇게 많은 분들이 사용하다 보니 비전문가가 많아서 성능을 고려하지 못하고 SQL을 쓰는 사례가 많아졌습니다. 이는 자칫 실서버 또는 분석용 서버에 무리를 주는 경우가 있어서 이러한 부분을 조금이라도 줄이기 위해서 글을 작성합니다. 이 글의 경우 mysql , google big query에서 테스트하였습니다. (2020 기준으로 회사에서 2개를 사용) 첫 번째, WHERE절의 좌변을 가공하지 마세요. 이게 무슨 말일까요? SQL의 기본..
2020.12.11 -
안녕하세요. 원하는 결과값을 알림으로 받기 위해서는 메일에 예쁘게 테이블 형식으로 보여지게 하는게 필수 입니다.그래서 HTML을 이용하여, 예쁘게 꾸며서 메일로 쏘는 경우가 많은데요. (HTML 만들기 : https://www.red-gate.com/simple-talk/blogs/generating-html-sql-server-queries/ ) 이렇게 보낼때 HTML 로 이쁘게 말아서 보내려고 하면 전부 깨져서 나오거나, HTML 코딩 그대로 나오는 경우가 있습니다.그래서 이리 저리 방법을 찾다가 body를 XML로 만들어서 보내려고 하면 다음의 오류가 납니다.보내지지도 않습니다...ㅡㅡ; 그래서 찾아낸게 바로 이겁니다.exec msdb.dbo.sp_send_dbmail @profile_name = ..
The data types xml and nvarchar are incompatible in the add operator.안녕하세요. 원하는 결과값을 알림으로 받기 위해서는 메일에 예쁘게 테이블 형식으로 보여지게 하는게 필수 입니다.그래서 HTML을 이용하여, 예쁘게 꾸며서 메일로 쏘는 경우가 많은데요. (HTML 만들기 : https://www.red-gate.com/simple-talk/blogs/generating-html-sql-server-queries/ ) 이렇게 보낼때 HTML 로 이쁘게 말아서 보내려고 하면 전부 깨져서 나오거나, HTML 코딩 그대로 나오는 경우가 있습니다.그래서 이리 저리 방법을 찾다가 body를 XML로 만들어서 보내려고 하면 다음의 오류가 납니다.보내지지도 않습니다...ㅡㅡ; 그래서 찾아낸게 바로 이겁니다.exec msdb.dbo.sp_send_dbmail @profile_name = ..
2018.03.14 -
SQL Server 2016 부터 JSON 형태를 파싱하는 쿼리를 지원합니다. Step 1 - 테이블 생성 - JSON 형태의 문자들을 넣어줄 컬럼이 있는 테이블을 하나 생성 합니다. create table JSON_table ( seqintidentity(1,1) ,reg_datedatetime ,JSONnvarchar(1000) ) go Step 2 - JSON 형태 데이터 넣기- 제가 임의로 만든 JSON형태의 데이터를 1건 넣어 보겠습니다.insert into JSON_table (reg_date,JSON) values (getdate(), '{"UserLevel":1,"Item":[{"id":20030,"type":2,"count":2},{"id":20024,"type":3,"count":4}]..
SQL Server 2016 - JSON parserSQL Server 2016 부터 JSON 형태를 파싱하는 쿼리를 지원합니다. Step 1 - 테이블 생성 - JSON 형태의 문자들을 넣어줄 컬럼이 있는 테이블을 하나 생성 합니다. create table JSON_table ( seqintidentity(1,1) ,reg_datedatetime ,JSONnvarchar(1000) ) go Step 2 - JSON 형태 데이터 넣기- 제가 임의로 만든 JSON형태의 데이터를 1건 넣어 보겠습니다.insert into JSON_table (reg_date,JSON) values (getdate(), '{"UserLevel":1,"Item":[{"id":20030,"type":2,"count":2},{"id":20024,"type":3,"count":4}]..
2017.06.01 -
들어가며SQL Server 2016 부터 파티션 단위로 Truncate가 가능 합니다. 다음의 블로그를 참고하여, 만들었으며 2016 기능을 사용해 보고자 포스트를 작성하였습니다.참고 : https://www.mssqltips.com/sqlservertip/4436/sql-server-2016-truncate-table-with-partitions/ 위의 블로그의 경우 Partition 테이블의 최대 장점이 스트라이프로 데이터를 넣는 것이므로, NDF 파일과 파일그룹을 여러개 생성해서 만들고 있는데요.이 부분은 제외하고, 단순히 파티션만 나눠서 Truncate 하는 부분만 포스팅 하고자 합니다. (기능만 보면 되므로) 제가 알기로 대용량의 DB를 관리 할 경우 테이블을 일자 또는 월별로 쪼개서 각각 파일..
Partition Truncate Table들어가며SQL Server 2016 부터 파티션 단위로 Truncate가 가능 합니다. 다음의 블로그를 참고하여, 만들었으며 2016 기능을 사용해 보고자 포스트를 작성하였습니다.참고 : https://www.mssqltips.com/sqlservertip/4436/sql-server-2016-truncate-table-with-partitions/ 위의 블로그의 경우 Partition 테이블의 최대 장점이 스트라이프로 데이터를 넣는 것이므로, NDF 파일과 파일그룹을 여러개 생성해서 만들고 있는데요.이 부분은 제외하고, 단순히 파티션만 나눠서 Truncate 하는 부분만 포스팅 하고자 합니다. (기능만 보면 되므로) 제가 알기로 대용량의 DB를 관리 할 경우 테이블을 일자 또는 월별로 쪼개서 각각 파일..
2017.04.14 -
MySQL 설치를 하는 중에 모든 설정 및 디렉터리, my.cnf 등을 모두 잘 설정하였는데 mysql system 테이블 설치만 하면... 자꾸 오류가 나는 경우가 있습니다. 오류의 내용은 다음과 같습니다. /usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory영어 울렁증으로 인하여, 영어를 자세히 읽어 보지 않고 뒤쪽에 ..
MySQL 설치 시 libaio 관련 ErrorMySQL 설치를 하는 중에 모든 설정 및 디렉터리, my.cnf 등을 모두 잘 설정하였는데 mysql system 테이블 설치만 하면... 자꾸 오류가 나는 경우가 있습니다. 오류의 내용은 다음과 같습니다. /usr/local/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory영어 울렁증으로 인하여, 영어를 자세히 읽어 보지 않고 뒤쪽에 ..
2016.09.12 -
안녕하세요. MSSQL 2016 AlwaysON 운영을 하면서 계속해서 운영이슈가 생기고 있습니다. 이번에는 지난 번에 없는 계정을 만드는 스크립트에 이어서, 2번째로 Standby에만 존재하는 로그인 삭제와 Active 서버를 기준으로 패스워드가 다른 로그인에 대해서 만들어봤습니다. 이전의 포스트( http://burning-dba.tistory.com/80 )에서 없는 계정을 만드는 부분을 했었는데, 먼저 읽어보시고 이것을 진행해야 합니다. 이번 포스트에서는 위에서 언급한데로, 2가지 기능을 추가하였습니다. 삭제하는 로그까지 추가하면 3가지가 되겠네요. 삭제 대상 로그인 기록 Active서버에 없고, Standby 서버에 없는 로그인 삭제Active서버와 Standby 서버의 패스워드가 다를 경우 S..
Alwayson Automatic synchronization Login(Alwayson 로그인 자동 동기화) ②안녕하세요. MSSQL 2016 AlwaysON 운영을 하면서 계속해서 운영이슈가 생기고 있습니다. 이번에는 지난 번에 없는 계정을 만드는 스크립트에 이어서, 2번째로 Standby에만 존재하는 로그인 삭제와 Active 서버를 기준으로 패스워드가 다른 로그인에 대해서 만들어봤습니다. 이전의 포스트( http://burning-dba.tistory.com/80 )에서 없는 계정을 만드는 부분을 했었는데, 먼저 읽어보시고 이것을 진행해야 합니다. 이번 포스트에서는 위에서 언급한데로, 2가지 기능을 추가하였습니다. 삭제하는 로그까지 추가하면 3가지가 되겠네요. 삭제 대상 로그인 기록 Active서버에 없고, Standby 서버에 없는 로그인 삭제Active서버와 Standby 서버의 패스워드가 다를 경우 S..
2016.08.25 -
AlwaysOn을 운영하는 도중에 다음과 같은 메시지가 발생하여, 찾아본 내용을 정리하였습니다.오류 메시지는 다음과 같이 나옵니다. 오류 메시지는 다음과 같이 2종류가 함께 발새 합니다. 1번AlwaysOn Availability Groups connection with secondary database established for primary database 'DB명' on the availability replica '인스턴스명' with Replica ID: {d151138c-4a89-4812-8da5-b81cb60b98c8}. This is an informational message only. No user action is required. 2번 DbMgrPartnerCommitPolicy:..
DbMgrPartnerCommitPolicy::SetSyncStateAlwaysOn을 운영하는 도중에 다음과 같은 메시지가 발생하여, 찾아본 내용을 정리하였습니다.오류 메시지는 다음과 같이 나옵니다. 오류 메시지는 다음과 같이 2종류가 함께 발새 합니다. 1번AlwaysOn Availability Groups connection with secondary database established for primary database 'DB명' on the availability replica '인스턴스명' with Replica ID: {d151138c-4a89-4812-8da5-b81cb60b98c8}. This is an informational message only. No user action is required. 2번 DbMgrPartnerCommitPolicy:..
2016.08.11 -
새로운 서버를 받아서, SQL Server를 설치하고, 운영하는 도중에 기술지원을 받는 중에 CPU의 64 Core 중에 40 Core만 사용하고 있는 것을 발견하였습니다.인터넷에 찾아보았는데, 영문자료밖에 있지 않아서, 내용을 가져와 씁니다. 원문 : https://blogs.msdn.microsoft.com/sql_shep/2012/06/21/sql-server-2012-license-core-limitaion/ 이 에디션은 2012부터 나왔으며, 엔터프라이즈에서는 코어를 40개까지 밖에 지원하지 않는다고 합니다. 다음의 내용에 써 있습니다. 왜 이렇게 나눠서, 사용자를 불편하게 한지는 잘모르겠습니다. (아무래도... 라이센스 때문인가?) 확실한 방법으로 코어가 몇개인지 확인해 보고, 실제로 SQL ..
SQL Server - License Core Limitaion (40코어 이상 인식)새로운 서버를 받아서, SQL Server를 설치하고, 운영하는 도중에 기술지원을 받는 중에 CPU의 64 Core 중에 40 Core만 사용하고 있는 것을 발견하였습니다.인터넷에 찾아보았는데, 영문자료밖에 있지 않아서, 내용을 가져와 씁니다. 원문 : https://blogs.msdn.microsoft.com/sql_shep/2012/06/21/sql-server-2012-license-core-limitaion/ 이 에디션은 2012부터 나왔으며, 엔터프라이즈에서는 코어를 40개까지 밖에 지원하지 않는다고 합니다. 다음의 내용에 써 있습니다. 왜 이렇게 나눠서, 사용자를 불편하게 한지는 잘모르겠습니다. (아무래도... 라이센스 때문인가?) 확실한 방법으로 코어가 몇개인지 확인해 보고, 실제로 SQL ..
2016.08.09 -
이번에 서버를 업그레이드하면서 Alwayson으로 서버를 변경하였습니다. 물론 제가 변경 작업은 한 것은 아니고, 작업은 다른 분이 하셨고 변경 후에 한가지 문제가발생하였습니다. Alwayson은 로그인이 자동으로 동기화 되지 않는 문제가 있어서 Active 와 Standby 서버 2개에 모두 로그인을 만들어 줘야 하는 문제가 있었습니다. 그래서 이러한 문제를 해결하기 위해서 몇몇의 스크립트를 약간 변형하여, 자동으로 로그인을 생성하는 스크립트를 만들었습니다. 물론 이 스크립트를 Job으로 등록하여, 원하는 주기로 돌리면 자동으로 동기화가 됩니다. 이 스크립트에서 사용되는 기본적 틀은 MS에서 제공하는 계정을 이관하는 스크립트를 참조하였습니다. 그 스크립트는 다음의 URL을 참고 바랍니다.URL : ht..
Alwayson Automatic synchronization Login (Alwayson 계정 자동 동기화)이번에 서버를 업그레이드하면서 Alwayson으로 서버를 변경하였습니다. 물론 제가 변경 작업은 한 것은 아니고, 작업은 다른 분이 하셨고 변경 후에 한가지 문제가발생하였습니다. Alwayson은 로그인이 자동으로 동기화 되지 않는 문제가 있어서 Active 와 Standby 서버 2개에 모두 로그인을 만들어 줘야 하는 문제가 있었습니다. 그래서 이러한 문제를 해결하기 위해서 몇몇의 스크립트를 약간 변형하여, 자동으로 로그인을 생성하는 스크립트를 만들었습니다. 물론 이 스크립트를 Job으로 등록하여, 원하는 주기로 돌리면 자동으로 동기화가 됩니다. 이 스크립트에서 사용되는 기본적 틀은 MS에서 제공하는 계정을 이관하는 스크립트를 참조하였습니다. 그 스크립트는 다음의 URL을 참고 바랍니다.URL : ht..
2016.07.12 -
단순한 테이블이 아닌 매우 복잡한 테이블을 만들고, 수많은 데이터를 넣고 조인하고 검색하기를 하려면 복합 인덱스를 만드는 것은 불가피합니다. 이것저것 많은 인덱스를 잡아야하며, 여러 칼럼을 하나의 인덱스로 만들 때, 무조건 다 때려 넣는 것은 성능에 안 좋은 영향을 미칩니다. 복합 인덱스는 단일 칼럼으로 구성된 인덱스와 달리 다음과 같이 저장됩니다. 예를 들어서 카드결제 관련 테이블을 만들고 그 테이블에 로그를 쌓는다고 생각해 보겠습니다. 그리고 그곳에 인덱스는 "카드결제일","결제항목" (그냥 막 잡았으니 이해하시길 ^^...)으로 구성되어 있다고 생각해 보겠습니다. 실제로 데이터를 확인하면서 직접 해보도록 하겠습니다. Chapter 1. 어떻게 쌓이는지 확인 -- 테이블 생성 CREATE TABLE ..
MSSQL 복합인덱스의 컬럼 순서가 성능에 미치는 영향단순한 테이블이 아닌 매우 복잡한 테이블을 만들고, 수많은 데이터를 넣고 조인하고 검색하기를 하려면 복합 인덱스를 만드는 것은 불가피합니다. 이것저것 많은 인덱스를 잡아야하며, 여러 칼럼을 하나의 인덱스로 만들 때, 무조건 다 때려 넣는 것은 성능에 안 좋은 영향을 미칩니다. 복합 인덱스는 단일 칼럼으로 구성된 인덱스와 달리 다음과 같이 저장됩니다. 예를 들어서 카드결제 관련 테이블을 만들고 그 테이블에 로그를 쌓는다고 생각해 보겠습니다. 그리고 그곳에 인덱스는 "카드결제일","결제항목" (그냥 막 잡았으니 이해하시길 ^^...)으로 구성되어 있다고 생각해 보겠습니다. 실제로 데이터를 확인하면서 직접 해보도록 하겠습니다. Chapter 1. 어떻게 쌓이는지 확인 -- 테이블 생성 CREATE TABLE ..
2016.06.16 -
게임회사에서 근무하다가 교육업체로 업종을 변경하면서, 쿼리에 대해서 많은 차이점이 보입니다.물론 이곳(?)의 스타일 일수도 있지만, UDF를 상당히 많이 사용합니다. 게임회사에서는 UDF를 그렇게 많이는 사용하지 않았는데, 이곳에서는 아주 많은 쿼리에 UDF를 사용하는 경우를 보았습니다. UDF가 무조건 안좋은 것은 아니지만 모르고 쓸 경우 성능에 치명적인 영향을 미칠 수 있다는 것을 테스트 하였습니다. 이 테스트는 샘플 데이터베이스인 AdventureWorks2012 에서 테스트 하였으며, SQL MVP 61인 Chapter 20의 사용자 정의 함수(UDF)를 참조하였습니다.책의 내용이 2가지가 언급되어 있어, 2개로 나누어서 글을 정리 합니다. 이 테스트 쿼리는 책에서 제공하는 쿼리와 약간 다릅니다...
UDF(사용자 정의 함수)로 인한 성능저하 ①게임회사에서 근무하다가 교육업체로 업종을 변경하면서, 쿼리에 대해서 많은 차이점이 보입니다.물론 이곳(?)의 스타일 일수도 있지만, UDF를 상당히 많이 사용합니다. 게임회사에서는 UDF를 그렇게 많이는 사용하지 않았는데, 이곳에서는 아주 많은 쿼리에 UDF를 사용하는 경우를 보았습니다. UDF가 무조건 안좋은 것은 아니지만 모르고 쓸 경우 성능에 치명적인 영향을 미칠 수 있다는 것을 테스트 하였습니다. 이 테스트는 샘플 데이터베이스인 AdventureWorks2012 에서 테스트 하였으며, SQL MVP 61인 Chapter 20의 사용자 정의 함수(UDF)를 참조하였습니다.책의 내용이 2가지가 언급되어 있어, 2개로 나누어서 글을 정리 합니다. 이 테스트 쿼리는 책에서 제공하는 쿼리와 약간 다릅니다...
2016.06.13 -
오라클 운영 중에 황당한(?) 일을 겪어서, 확인해 보니 다음과 해결 법을 찾아서 내용을 공유합니다. 개발자가 오라클 서버에 새로운 인덱스를 생성해 달라고 요청이 왔습니다. 테이블을 조회하여, 인덱스를 걸고자 하였습니다. 그런데, 분명히 테이블이 있는데 인덱스를 생성할 경우 테이블이 없다고 나오며, ORA-00942가 계속해서 발생하였습니다. 메시지 내용은 상당히 간단합니다. 테이블 또는 뷰가 존재하지 않습니다. 우선 테이블이 실제 존재하는지 ALL_TABLES를 통해 확인 해봤습니다. 1 SELECT * FROM all_tables WHERE table_name = '테이블명' cs 테이블은 정상적으로 존재하였습니다. 하지만 테이블을 조회할 경우 다음과 같이 에러가 나왔습니다. ORA-00942: ta..
테이블이 존재 하는데, ORA-00942 발생오라클 운영 중에 황당한(?) 일을 겪어서, 확인해 보니 다음과 해결 법을 찾아서 내용을 공유합니다. 개발자가 오라클 서버에 새로운 인덱스를 생성해 달라고 요청이 왔습니다. 테이블을 조회하여, 인덱스를 걸고자 하였습니다. 그런데, 분명히 테이블이 있는데 인덱스를 생성할 경우 테이블이 없다고 나오며, ORA-00942가 계속해서 발생하였습니다. 메시지 내용은 상당히 간단합니다. 테이블 또는 뷰가 존재하지 않습니다. 우선 테이블이 실제 존재하는지 ALL_TABLES를 통해 확인 해봤습니다. 1 SELECT * FROM all_tables WHERE table_name = '테이블명' cs 테이블은 정상적으로 존재하였습니다. 하지만 테이블을 조회할 경우 다음과 같이 에러가 나왔습니다. ORA-00942: ta..
2016.04.29 -
SQL Server 2016 New features중에서 보안관련된 부분에 대해서 발표자료에 사용하였던 자료를 공유합니다.Demo 스크립트를 다운받아서, 직접 테스트 해볼 수 있습니다. 스크립트에 몇가지 URL이 있는데, 이것은 GUI를 이용하는 경우입니다. 이 부분 양해 부탁드립니다.혹시 궁금하신 내용은 댓글이나, 메일 주시면 확인하여, 답변 드리겠습니다. 차후에 더 많은 기능을 테스트하여, 업로드 하겠습니다.
SQL Server 2016 New features review - SecuritySQL Server 2016 New features중에서 보안관련된 부분에 대해서 발표자료에 사용하였던 자료를 공유합니다.Demo 스크립트를 다운받아서, 직접 테스트 해볼 수 있습니다. 스크립트에 몇가지 URL이 있는데, 이것은 GUI를 이용하는 경우입니다. 이 부분 양해 부탁드립니다.혹시 궁금하신 내용은 댓글이나, 메일 주시면 확인하여, 답변 드리겠습니다. 차후에 더 많은 기능을 테스트하여, 업로드 하겠습니다.
2016.04.25 -
SQL Server 2016에서 Temporal Table이라는 기능이 있어서, 소개하고자 합니다.Temporal은 다음과 같은 뜻을 가집니다.- 1. 현세적인, 속세의 2. 시간의; 시간의 제약을 받는 3. 관자놀이께의 Temporal 테이블은 제가 볼때 엄청난 기능은 아니고, Table의 내용이 변경(UPDATE, DELETE)이 될 경우 그 내용을 기록하는 History (?)성 테이블이라고 생각하면 됩니다.글로 표현하는 것보다 그림으로 보는 것이 더욱 이해가 될 것 입니다.제가 생각 할때 이 그림이 가장 맞는거 같습니다. 크게 별다른 기능이 아니고, 단순히 유저가 DELETE , UPDATE 라는 조작을 가하면 테이블에 기록을 남기는 것 입니다.음... 일종에 트리거 같은 기능을 종속하여, 추가한..
SQL Server 2016 - Temporal TableSQL Server 2016에서 Temporal Table이라는 기능이 있어서, 소개하고자 합니다.Temporal은 다음과 같은 뜻을 가집니다.- 1. 현세적인, 속세의 2. 시간의; 시간의 제약을 받는 3. 관자놀이께의 Temporal 테이블은 제가 볼때 엄청난 기능은 아니고, Table의 내용이 변경(UPDATE, DELETE)이 될 경우 그 내용을 기록하는 History (?)성 테이블이라고 생각하면 됩니다.글로 표현하는 것보다 그림으로 보는 것이 더욱 이해가 될 것 입니다.제가 생각 할때 이 그림이 가장 맞는거 같습니다. 크게 별다른 기능이 아니고, 단순히 유저가 DELETE , UPDATE 라는 조작을 가하면 테이블에 기록을 남기는 것 입니다.음... 일종에 트리거 같은 기능을 종속하여, 추가한..
2016.04.12 -
오라클 DBA가 아닌 저로써는 회사에서 비중이 적은 ORACLE을 사용 할때 매우 난감 합니다. 이번에 발생한 오류(?)와 같은 ORACLE 관련하여 문제가 생길 경우 많이 난감합니다. 오늘 겪은 내용은 오라클 계정에 암호 만료에 관련된 이슈 입니다.개발자 분이 다음과 같은 오류가 발생하였다고 하여, 제가 한번 봤는데 계정에 Default로 180일의 암호 만료 기한이 있더군요.(오라클 기본이 180일이라함)오늘 다음과 같은 얼럿이 발생하여, 계정의 패스워드를 초기화 시켜야 하는 상황이 발생하였습니다. 그래서, 금일 계정의 패스워드를 변경하면서 초기화하고, 계정의 암호 만료기한을 무제한으로 변경 하였습니다.우선 다음의 쿼리를 이용하여, 계정의 상태를 확인하였습니다. 아래의 OPEN일 경우 만료 기한이 아..
ORACLE 계정 만료 해제오라클 DBA가 아닌 저로써는 회사에서 비중이 적은 ORACLE을 사용 할때 매우 난감 합니다. 이번에 발생한 오류(?)와 같은 ORACLE 관련하여 문제가 생길 경우 많이 난감합니다. 오늘 겪은 내용은 오라클 계정에 암호 만료에 관련된 이슈 입니다.개발자 분이 다음과 같은 오류가 발생하였다고 하여, 제가 한번 봤는데 계정에 Default로 180일의 암호 만료 기한이 있더군요.(오라클 기본이 180일이라함)오늘 다음과 같은 얼럿이 발생하여, 계정의 패스워드를 초기화 시켜야 하는 상황이 발생하였습니다. 그래서, 금일 계정의 패스워드를 변경하면서 초기화하고, 계정의 암호 만료기한을 무제한으로 변경 하였습니다.우선 다음의 쿼리를 이용하여, 계정의 상태를 확인하였습니다. 아래의 OPEN일 경우 만료 기한이 아..
2016.03.30 -
이번에 모니터링 시스템을 만들면서 이것 저것 수집하다 보니, 쿼리를 이용한 Job 스케줄러의 상세정보를 보기 힘들다는 사실을 알았습니다. 그래서, 영문자료를 토대로 한글화하여, 쿼리를 만들었습니다. 결과는 다음과 같은 형태로 나타납니다. 제가 필요한 정보만 약간 변형하여, 하였으므로, 필요에 따라서 바뀌시면 좋을 것 같습니다. SELECT [jobs].name as [jobname] , description , CASE convert(nvarchar(3),[sSCH].[enabled]) WHEN 1 THEN 'Y' WHEN 0 THEN 'N' END AS [IsEnabled] , CASE WHEN convert(nvarchar(3),[freq_type],3) = 64 THEN 'SQL Server 시작 ..
쿼리를 이용한 JOB 스케줄러 상세보기이번에 모니터링 시스템을 만들면서 이것 저것 수집하다 보니, 쿼리를 이용한 Job 스케줄러의 상세정보를 보기 힘들다는 사실을 알았습니다. 그래서, 영문자료를 토대로 한글화하여, 쿼리를 만들었습니다. 결과는 다음과 같은 형태로 나타납니다. 제가 필요한 정보만 약간 변형하여, 하였으므로, 필요에 따라서 바뀌시면 좋을 것 같습니다. SELECT [jobs].name as [jobname] , description , CASE convert(nvarchar(3),[sSCH].[enabled]) WHEN 1 THEN 'Y' WHEN 0 THEN 'N' END AS [IsEnabled] , CASE WHEN convert(nvarchar(3),[freq_type],3) = 64 THEN 'SQL Server 시작 ..
2016.03.14 -
보통 TempDB를 만들고 나면 성능을 위해서 TempDB를 여러개로 쪼개고 위치를 변경하고 여러가지 작업을 합니다. TempDB는 성능에 많은 영향을 미치는 DB로써 SQL Server에서 매우 민감하게 작용됩니다. Latch를 유발할 수도 있으며, 다양한 이슈가 발생 합니다. 이번에 작업 시 TempDB 경로를 잘못 설정하여, SQL Server가 올라오지 않는 문제가 있어서 해결과정을 포스트 하였습니다. 문제 - TempDB의 ldf 파일의 경로를 잘못 변경하였는데, 잘못 변경한지 인지하지 못하고 올라오지 못하는 원인을 찾지 못하였음 - Eventvwr에 내용이 있지만, 엑세스가 거부되었다는 메시지가 나와서 권한 문제로 인식하여 권한을 추가하였으나 정상적으로 올라오지 않음 Windows Event ..
TempDB 경로 문제로 인한 SQL Server 시작 불가능보통 TempDB를 만들고 나면 성능을 위해서 TempDB를 여러개로 쪼개고 위치를 변경하고 여러가지 작업을 합니다. TempDB는 성능에 많은 영향을 미치는 DB로써 SQL Server에서 매우 민감하게 작용됩니다. Latch를 유발할 수도 있으며, 다양한 이슈가 발생 합니다. 이번에 작업 시 TempDB 경로를 잘못 설정하여, SQL Server가 올라오지 않는 문제가 있어서 해결과정을 포스트 하였습니다. 문제 - TempDB의 ldf 파일의 경로를 잘못 변경하였는데, 잘못 변경한지 인지하지 못하고 올라오지 못하는 원인을 찾지 못하였음 - Eventvwr에 내용이 있지만, 엑세스가 거부되었다는 메시지가 나와서 권한 문제로 인식하여 권한을 추가하였으나 정상적으로 올라오지 않음 Windows Event ..
2016.01.21 -
가끔 SQL Server 로그에 특정한 IP를 이용하여, 접속을 시도하였으나 실패한 메시지나 특정 IP에서 어떠한 공격이 들어옵니다. IP를 통해서 Profiler를 통해서 뭐가 실행되었는지 확인하고자 하였으나, IP로 추적은 없는 듯 하여, 구글링을 하여 찾았는데 좋은 정보가 있어서 공유하고자 합니다. 해당 내용은 http://mani4u.tistory.com/41 블로그를 참조하였으며 약간의 변형만 줘봤습니다. 우선 쿼리는 다음과 같습니다.123456789SELECT P.spid,E.name as DBname,P.login_time, P.last_batch, P.status,P.program_name,P.cmd,P.loginame,C.client_net_address,D.textFROM sys.sys..
특정 IP로 실행한 쿼리 추적가끔 SQL Server 로그에 특정한 IP를 이용하여, 접속을 시도하였으나 실패한 메시지나 특정 IP에서 어떠한 공격이 들어옵니다. IP를 통해서 Profiler를 통해서 뭐가 실행되었는지 확인하고자 하였으나, IP로 추적은 없는 듯 하여, 구글링을 하여 찾았는데 좋은 정보가 있어서 공유하고자 합니다. 해당 내용은 http://mani4u.tistory.com/41 블로그를 참조하였으며 약간의 변형만 줘봤습니다. 우선 쿼리는 다음과 같습니다.123456789SELECT P.spid,E.name as DBname,P.login_time, P.last_batch, P.status,P.program_name,P.cmd,P.loginame,C.client_net_address,D.textFROM sys.sys..
2016.01.19 -
업무 중에 DBA는 많은 장애에 직면합니다. 그중에 데이터의 손실은 아주 큰 장애라고 생각됩니다. 제가 겪은 대부분의 데이터 손실은 인재였으며, 다음과 같은 예제 시나리오를 통해서 복원하는 방법을 정리해봤습니다. 현재 상황- FULL BACKUP 매일 하루 새벽에 진행되고 있음- TRAN LOG BACKUP 1시간에 1번씩 진행되고 있음 장애 상황- 실수로 테이블에 WHERE 조건을 잊고, 그대로 실행하여 모든 데이터가 손실된 상황 위와 같은 상황은 은근히(?) 많이 발생합니다. 그 은근히(?) 많은 상황을 대비해서 테스트를 진행해봤습니다.순서는 다음과 같이 진행 됩니다. ① 유저가 5건의 Insert 를 통해 데이터를 넣음② FULL BACKUP 진행 (하루 1회 도는 백업으로 간주)③ 유저가 5건의 ..
데이터 손실 시 복구업무 중에 DBA는 많은 장애에 직면합니다. 그중에 데이터의 손실은 아주 큰 장애라고 생각됩니다. 제가 겪은 대부분의 데이터 손실은 인재였으며, 다음과 같은 예제 시나리오를 통해서 복원하는 방법을 정리해봤습니다. 현재 상황- FULL BACKUP 매일 하루 새벽에 진행되고 있음- TRAN LOG BACKUP 1시간에 1번씩 진행되고 있음 장애 상황- 실수로 테이블에 WHERE 조건을 잊고, 그대로 실행하여 모든 데이터가 손실된 상황 위와 같은 상황은 은근히(?) 많이 발생합니다. 그 은근히(?) 많은 상황을 대비해서 테스트를 진행해봤습니다.순서는 다음과 같이 진행 됩니다. ① 유저가 5건의 Insert 를 통해 데이터를 넣음② FULL BACKUP 진행 (하루 1회 도는 백업으로 간주)③ 유저가 5건의 ..
2016.01.18 -
클러스터링 테스트를 진행 할때 몇가지 테스트를 시나리오를 토대로 테스트를 진행하였는데, 생각처럼 되지 않아서 난항을 겪었습니다.그래서 이번에 테스트를 진행하면서 많은 어려움을 정리하고 공유하고자 이번 포스트를 작성합니다. 이 문서에 클러스터링 구성방법은 없으며, 옵션설정만 있음을 참고 바랍니다. 우리가 하고자 하였던 것 http://blogs.technet.com/b/vipulshah/archive/2009/06/17/failover-cluster-testing-methods.aspx 위의 내용에서 나오는 SQL 부분에 관하여, 테스트 하고자 하였습니다. 이곳에 우리는 "SQL Server Service 의 정지 시 정상적으로 넘어가는 가? "를 보고 싶었습니다. 1.2.1 SQL Server Servi..
SQL Server(MSSQL) Clustering Test클러스터링 테스트를 진행 할때 몇가지 테스트를 시나리오를 토대로 테스트를 진행하였는데, 생각처럼 되지 않아서 난항을 겪었습니다.그래서 이번에 테스트를 진행하면서 많은 어려움을 정리하고 공유하고자 이번 포스트를 작성합니다. 이 문서에 클러스터링 구성방법은 없으며, 옵션설정만 있음을 참고 바랍니다. 우리가 하고자 하였던 것 http://blogs.technet.com/b/vipulshah/archive/2009/06/17/failover-cluster-testing-methods.aspx 위의 내용에서 나오는 SQL 부분에 관하여, 테스트 하고자 하였습니다. 이곳에 우리는 "SQL Server Service 의 정지 시 정상적으로 넘어가는 가? "를 보고 싶었습니다. 1.2.1 SQL Server Servi..
2016.01.12