본문 바로가기

DataBase

문자셋 변경. Mysql 문자셋 변경에 대한 기록. 문자셋 변경을 위한 내용과 발생한 문제와 해결에 대한 기록을 남겨 다음에 이와 같은 상황이 발생했을때, 보다 원활한 해결을 위해서 기록을 남긴다. 발단 - Database에 한글이 포함된 내용을 입력하는데 다음과 같은 문제가 발생했다. - 내용은 문자열 오류인것... 1. 문자셋 확인. - 확인 방법 1. : status 로 확인 가능. - 확인 방법 2. : 또는 show variables like 'C%' 로 해도 상관없다. 2. 문자셋 변경. - 설정 파일을 연다. - 방법 1.: 5.5 이상 버전에서는 다음과 같이 해줘야 한다고 하는데...: [mysqld] 항목에 위의 내용을 추가해 준다. -방법 2. : 나의 Mysql 버전은 5.7 이상이지만,: 나는 이.. 더보기
유저 생성 및 권한 부여 Mysql에서 유저 생성 및 권한에 대학 기록. 1. 생성. - 테스트를 위한 database를 하나 생성. - 유저 생성.: 'mong'@'%' 는 외부 접근 가능이고: 'mong'@'localhost' 는 내부 접근만 가능이다. - 생성 됨을 확인. - 참고로, user 테이블을 확인하기 위해서는 현재 사용하는 데이터베이스를 mysql로 변경해야 한다.: use mysql; 2. 권한 설정 - 대상 database는 test_table 이고 '.*'를 통해서 모든 테이블에 권한을 가진다. - '%'로 외부에서 접근 가능. - flush 명령어로 권한 설정을 확정한다. 3. 확인. 확인 완료. 더보기
Mysql Workbench 설치 및 연결. mysql workbench 설치에 대한 기록. 1. 다운 받기. - https://www.mysql.com/products/workbench/ 에서 다운 받을 수 있다. 2. 접속 해 보기. - workbench에 새로운 연결 설정을 해준다. - Connection Method 는 버츄어 박스에 설치된 Mysql에 연결할 예정이니 SSH로 하고, - SSH Hostname은 '버츄어 박스 IP':22 로 설정한다. - SSH Username은 버츄어 박스 계정이고 - SSH Password는 버유처 박스 계정의 패스워드이다. - ※ 즉, Mysql이 설치된 외부 호스트에 먼저 접속한 다음 MySql에 접속하는 것이다. 3. 설정 입력 후 TestConnection을 눌러서 접속을 확인해 본다. - 아... 더보기
ubuntu Mysql 설치. Mysql 설치에 대한 기록. 1. 버전 확인. 2. 최신 버전 설치. 3. 위의 내용에서 Y 를 누르면 설치가 계속 된다. 4. root 계정의 password를 입력 - 패스워드 확인까지 끝나면 5. 설치가 계속 되고... 완료 된다. 6. 접속 확인. - 중간에 표시 해둔 곳 처럼 mysql에 접속하는 걸로 설치 완료. 더보기
[MongoDB] 설치 가이드 및 윈도우 서비스 등록 Mongo DB 1. 설치A. 다운로드 i. http://www.mongodb.org/downloads 여기서 해당 os 버전에 맞춰서 다운로드 한다. B. 폴더 구성. i. 바이너리 폴더1. Ex) D:\Mongo\mongodb\bin ii. 저장소 지정1. Ex) D:\Mongo\data\dbC. 실행. i. Cmd 를 관리자 권한으로 실행한다. ii. 서버 실행.1. 2. 명령어 설명A. Mongob.exe : 서버 실행 파일.B. –dbpath : database 저장소 위치 지정. iii. 클라이언트 실행.1. 2. 명령어 설명A. Mongo.exe : 클라이언트 실행 파일.D. 윈도우 서비스 등록 i. ii. 명령어 설명1. mongod : 실행 파일2. --install : 서비스 인스톨 명.. 더보기
[SQL] 작업 스케줄러 금번 순위를 산정하는 집계쿼리를 만들면서 해당 집계가 하루에 한번 정해진 시간에 이뤄지도록 해달라는 요청을 받았다. 해서... 집계쿼리를 만들어 놓고 매일 아침 출근하면 일단 쿼리를 실행 시키다.... (개발중이니까.. 머... 이래두 괜찮..)정리를 해야 겠다는 생각이 들어서 방법을 모색하게 되었다. MSSQL 2008에는 '윈도우의 작업 스케줄러'와 흡사한 기능이 있다. 이름 하여 'SQL Server 에이전트' 이다. 스케줄에 등록하기 전에 준비 되어 있어야 할 것은 ... 1. 집계쿼리. (매일 아침 손수 실행 시켰던 집계쿼리를 SP로 등록) 2. 없음. 방법은 아래와 같다. 1. sql server 에이전트 활성화위의 그림에서 sql server 에이전트의 속성으로 들어간다. 2. 속성창에서 서.. 더보기
[SQL] 동적쿼리와 like 구문. 지난 번에 동적 쿼리에 대해서 포스팅 한 적이 있는데.금번에 지난 번 처럼 동적 쿼리를 사용하여야 하고 like 구문을 사용해야 하는 상황에 직면하게 되었다. 요청은 간단하다. 1. 대상인 닉네임 첫 글자를 받는다. 2. 이로 대상을 찾는 SP가 필요하다. 그러하다. 간단한데 일반적인 like 구문은 select * from table_user where name like '홍길%'; 이러한 식이기 때문에 '홍길'을 인자로 받아야 하는 입장에서는 동적쿼리를 고민하지 않을 수 없다. 머 대단한 건 아니고... 방법은 DECLARE 임시변수 nvarchar(17)SET 임시변수 = convert(nvarchar(17), 전달받는 문자열) + '%'SELECT * FROM 테이블 WHERE 컬럽 LIKE 임시.. 더보기
[SQL] 컬럼에 제약 조건 추가. 금번 내용은 지난 번에 'ALTER TABLE'이라는 제목으로 포팅한 적이 있는 내용의 연장선상에 있는 내용이다. 이 내용을 추가 하게된 건, 이 번에 마주한 어떠한 문제 때문이었다.문제의 내용은 음수값이 들어가면 안되는 컬럼에 음수값이 들어가는 문제가 발생한 것이다. 사실 개발중인 프로젝트에서 편의성을 위해서 제공한 치트키의 오동작으로 인해서 발생한문제이니 그쪽에서 처리를 해야 하지만, 일단의 DataBase의 안전성을 위해서 제약 조건을 추가 하기로 했다. 방법은 간단하다. check constraint을 컬럼에 추가해 주면 된다. 테이블에도 추가 하는 방법이 있는데 이는 다음 포스트로 미루기로 하고, 일단 컬럼에 추가하는 방법은 ALTER TABLE 테이블 명 ADD CONSTRAINT 제약조건 명.. 더보기
[SQL] 인덱스 (클러스터, 비클러스터) 개념 인덱스. 1. 개념 A. 간단한 비유로 일반적으로 책 뒤쪽에 위치하는 ‘찾아보기’를 들 수 있다.B. 일 예로, ‘홍길동전’에서 ‘율도국’이라는 단어를 찾는다고 가정해보자. 만일 이 책에 ‘찾아보기’가 없다면 책을 첫 장부터 훑어야 할 것이다. 그런데 찾아보기가 있다면 한번에 찾아 갈 수 있다. 이 것이 인덱스의 기본적인 개념이다. 2. 인덱스 생성시 발생되는 특징A. 검색 속도 향상. i. 시스템의 부하를 줄여, 시스템 전체 성능향상에 기여 가능. B. 인덱스를 위한 추가 공간이 필요.C. 생성에 시간이 소요 될 수 있음.D. INSERT, UPDATE, DELETE가 자주 발생한다면 성능이 많이 하락할 수 있다. 3. 종류A. 클러스터형 인덱스(Clustered Index). i. 테이블당 한 개만 .. 더보기
[SQL] 테이블 변수 이번에 요청을 받은 것은, 1. A, B, C라는 변수를 전달 받아 TABLE1에 업데이트를 한다.2. TABLE2에 해당 데이터가 존재하지 않는다면 INSERT 한다. 라는 것을 요청 받았다. 실상 테이블을 이런식으로 설계를 하면 안되지만, 어쩔 수 없는 기획적인 또한구조적인 사정이 있으니, 일단 가능한 방법을 찾아 보도록 했다. 이 경우 테이블2에 해당 변수가 존재하는지를 알아 볼려면 별도로SELECT를 3번을 하고 INSERT를 최고 3번을 해야 한다. 좀더 간단히 할 수 있을 것 같다는 생각이 들었다. SQL에서 배열을 사용할 수 있다면 이 변수를 하나의 배열에 넣고 LOOP를 돌면서검사하고 INSERT를 할 수 있을꺼 같다. 과연 이런 형태가 가능한가? 일단 배열의 사용은 불가능하다. 이와 비슷.. 더보기
[SQL] ALTER TABLE 어려운 것도 아닌데 자꾸 깜박해서 여기에 적어 놓는다. SQL 에서는 이렇게. 1. 추가. ALTER TABLE 테이블 명 ADD 컬럼명1-1 속성을 줄때 ALTER TABLE 테이블 명 ADD 컬럼명 INT DEFAULT 0 NOT NULL -> INT형으로 NULL을 허용하지 않고 기본값은 0이라는 컬럼을 추가한다. 2. 삭제 ALTER TABLE 테이블 명 DROP 컬럼명 3. 제약조건 추가. ALTER TABLE 테이블 명 ADD CONSTRAINT 제약조건(EX : PRIMARY KEY 컬럼명) 4. 제약조건 제거 ALTER TABLE 테이블 명 DROP CONSTRAINT 제약조건(EX : PRIMARY KEY 컬럼명) 5. 컬럼명 수정 EXEC SP_RENAME '테이블명.기존컬럼명', '변.. 더보기
[SQL] SELECT INTO (임시 테이블 만들기) 사용법 사용법 SELECT * FROM tableName SELECT * INTO temp_tableName(새로만들 테이블) FROM tableName 위에 사용법으로 테이블을 만들게 되면 영구적으로 테이블이 생기게 된다. 물론 DROP 명령으로 지워주면 되긴 하지만 잠시만 쓰고 지울 것이라면 굳이 영구 테이블을 만들지 않고 임시테이블을 만들어 사용하면 된다. 임시 테이블은 전역임시 테이블, 세션 임시 테이블 두개로 나뉜다. 만드는방법사용할 수 있는 범위삭제되는 시기일반 테이블CREATE TABLE다른 세션에서도DROP TABLE세션 임시 테이블 #tablename 해당 세션에서만 세션이 끊어질 때 전역 임시 테이블 ##tablename 다른 세션에서도 세션이 끊어질 때 tempdb의 일반 테이블 CREATE.. 더보기
[SQL] 동적쿼리 금번 작업을 하면서 고민을 하게 만드는 요청을 받았다. 요청 사항을 정리하면 1. 정렬 DB에서 한다.1-1. 정렬할 대상(컬럼)은 서버로 부터 전달 받는다.1-2. 정렬할 대상(컬럼)에 대해서 오름/내림 차순에 대한 결정도 서버로 부터 받는다. 2. 일정 갯수만을 반환한다.2-1. 페이지 개념을 적용한다. 2-2. 정렬된 값에서 요청 받은 페이지의 약속된 열만큼을 반환해야 한다. ※ 이 글을 읽는 분들은 더 좋은 해답이 있다면 언제든 조언을 부탁드립니다. 일단 서버로 부터 받는 인자는 @정렬기준(대상컬럼) TINYINT, @정렬방법(오름/내림) TINYINT, @페이지크기 INT, @페이지넘버 INT를 받는다. 동적쿼리는 문자열을 만들어서 그것을 실행(EXEC) 하는 것이기 때문에 지역 변수들은 NVA.. 더보기
[SQL] IN구문 사용기 얼마전 어느 정도 분량의 데이터를 삽입해줘야 하는 상황이 발생했다.문제는.... 1. 대상 테이블이 IDENTITY가 걸려 있다. 2. 이미 기존에 들어가 있는 데이터가 존재한다. 3. 넣어야 할 데이터가 다른 DB(ORACLE)에 존재한다. 잠시 생각해 보니 DB가 오라클에서 MS로 변경된 걸 모르고 오라클에 신규 데이터를삽입한 사람의 멱을 잡을 수 없으니 일단 변경된 리스트를 받는 선에서 끝내기로 하고어떻게 손쉽게 할 수 있을까를 생각하니. 쓸만한 것이 IN 구문. ※ 더 손쉬운 방법이 있다면 이 글을 보시는 분이라면 누구든 알려주세요. IN 구문의 사용법은 간단하다 다음과 같은 문법을 가진다. SELECT * FROM 테이블명 WHERE 조건을 걸 대상 컬럼 IN ( '값1', '값2', '값3',.. 더보기
[SQL] DB복구후 DB와 사용자 매핑 1. 사용자 생성 Microsoft SQL Server Management Studio 실행> 데이터베이스 > 보안 > 로그인 (속성) > 새로그인 - 로그인이름 (계정)- 'SQL Server 인증' 의 암호- '암호정책 강제 적용' 체크 안함- '암호만료 강제 적용' 체크 안함- 기본데이터베이스 : 사용할 DB선택[확인] 선택 ※ 참고 : DB에 권한을 가진 사용자가 있습니다. > 데이터베이스 > [DB명] > 보안 > 사용자에서 확인이 가능하며 이 사용자명으로 생성하시면 됩니다. 만약 이곳에 사용자가 없을 경우 임의로 사용자를 아무거나 만듭니다. 사용자 이름 : neulwon // 접근 허용할 계정 로그인 이름 : neulwon // 접근 허용할 계정 기본 스키마 : dbo 이사용자가 선택한 스키마.. 더보기
[SQL] 날짜 변경 (DATEADD) 하루 지난 날짜 즉 어제 날짜를 가져와야 할 일이 생겨 찾아보니.DATEADD(대상, 가감, 날짜);이 함수를 사용해서 날짜를 변경해서 가져올 수 있다. 사용 예는 다음과 같다. DECLARE @yesterday char(10) = convert(varchar(10),dateadd(d,-1,GETDATE()),121);DECLARE @tomorrow char(10) = convert(varchar(10),dateadd(d,+1,GETDATE()),121); 더보기
[SQL] 컬럼 속성 변경 ms-sqlserver에서 table 또는 필드 속성변경은 alter문을 사용하여 합니다. alter table table명 alter column 필드명 datatype ex) test table의 fld필드를 varchar -> int로 변경 alter table test alter column fld int 참고) 실제 입력 되어있는 자료중 int형식으로 변경할 수 없는 경우 (''aaa''값과 같이)에는 sqlserver는 에러를 냅니다. alter table table명 add 필드명 datatype ex) test table의 fld1을 varchar 데이타타입 8자리로 추가하는 경우 alter table test add fl.. 더보기
[SQL] 트랜젝션 롤백 오류대응 방안 저장 프로시저를 작성하고 테스트 하던중 첫 에러가 발생하여 ROLLBACK이 일어나던 중 예정된 에러 메시지가 아니라. "EXECUTE 후 트랜잭션 개수는 COMMIT 또는 ROLLBACK TRANSACTION 문이 없음을 나타냅니다" 와 같은 문구가 나타났다. 해결 방법은 예외 상황에서 IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRAN END 와 같이 ROLLBACK을 감싸 주면 해결된다. 더보기
[SQL] SET XACT_ABORT ON의 의미 Transact-SQL 문에서 런타임 오류가 발생할 경우 SQL Server에서 현재 트랜잭션을 자동으로 롤백할 것인지 여부를 지정 CREATE PROC [dbo].[SP_TEMP] @ID INTAS SET NOCOUNT ONSET LOCK_TIMEOUT 60000SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTEDSET XACT_ABORT ON -- 이런 식으로 추가됨. IF (@ID IS NULL ) RETURN -1 BEGIN TRY BEGIN TRAN .... 본문 생략.... 더보기
[Oracle Database] MSSQL 날짜 변환 오라클에서는 TO_CHAR()을 사용해서 문자열로 변환이 가능했다. 상당히 유용하며,날짜를 변환할때 많이 사용했었다. TO_CHAR(SYSDATE,'YYYY-MM-DD') -> 2013-01-14TO_CHAR(SYSDATE,'YYYY/MM/DD') -> 2013/01/14 TO_CHAR(SYSDATE,'YYYYMMDD') -> 20130114 MSSQL에서는 CONVERT(VARCHAR(10),GETDATE(),120) -> 2013-01-23 CONVERT(VARCHAR(10),GETDATE(),111) -> 2003/01/23 CONVERT(VARCHAR(8),GETDATE(),112) -> 20030123 와 같이 사용할 수 있다. 120, 111, 112은 날짜 표현으로 위와 같은 방식으로 날짜를.. 더보기