equal to 작업에서의 "Korean_Wansung_CS_AS"과(와) "Korean_Wansung_CI_AS" 간의 데이터 정렬 충돌을 해결할 수 없습니다.


이 문제의 경우는 join에서 발생한다. 조인하려는 두 테이블의 각 컬럼 속성을 잘 보면 데이터 정렬란이 있는데 이 부분이 Korean_Wansung_CS_AS 이거나 CI_AS인데(물론 이 이외에도 많다) 각 컬럼이 다르기 때문에 발생하는 에러사항이다.


해결방법은 


A.컬럼명 collate Korean_Wansung_CI_AS = B.컬럼명 collate Korean_Wansung_CI_AS


와 같은 예시로 각 컬럼명을 대입해주는 방식으로 해결할 수 있으나, 나의 경우엔 실패했고...


귀찮아서 디비의 속성을 까보고 각 컬럼의 데이터 정렬 속성이 다르기에 확 그냥 바꿔주는 식으로 해결했다.


두번째 방법은 디비 정렬 속성을 바꾸는 것도 있겠다.

블로그 이미지

김생선

세상의 모든것을 어장관리

,

인포믹스(informix) 에서 현재날짜를 조건으로하여 쿼리할 일이 생겼다. 상황은 이러하다.

 

DB 컬럼에 글 쓴 날짜(컬럼명 : reg_dt | 속성 varchar)와 게시마감 날짜(컬럼명 : lim_dt | 속성 varchar)가 존재. 

가령 reg_dt에 2013년 6월 30일 00시 00분이 입력되고 lim_dt에 2014년 6월 30일 00시 00분이 입력되었다고 치자.

게시판 조건은 lim_dt가 현재날짜보다 과거일 경우 쿼리하지 않아야 한다는 조건이다.

 

그렇다면 사실 reg_dt는 신경쓰지 않아도 되며 lim_dt가 현재보다 과거인지만 체크를 하면 되는데 어떻게 해야하는지 informix는 잘 모르는 상황.

검색을 해보니 아래와 같은 방식으로 쿼리에 성공했다.

 

1
SELECT * FROM 테이블명 WHERE lim_dt >= to_char(current, "%Y%m%d%H%M%S")
cs

 

to_char(current, "%Y%m%d%H%M%S")란, 현재 시스템 시간을 포맷, YYYYMMDDHHMMSS(년월일시분초)로 가져오며, 이를 to_char 형식으로 변환하고 lim_dt와 비교를 한다는 것이다. 

 

내가 비교하려는 컬럼이 varchar 형식이기 때문에 to_char로 받은 듯 하다. 아직 data 형식의 컬럼과는 비교하지 않았다.

 

주의할 점은, 포맷변환을 할 때 %Y%m%d%H%M%S 에서와 같이 년/시/분/초 는 대문자로 쓰여지고 월/일은 소문자로 쓰여졌는데, 이거 대소문자 구분 안하면 월이 분으로 표시가 되는 불상사가 생기니 주의하시기 바란다.

 

 

 

블로그 이미지

김생선

세상의 모든것을 어장관리

,

MSSQL 에서 MAX 함수를 써서 값을 가져올 일이 생겼다.

게시판 댓글을 달 때 두 명 이상의 유저가 달라붙어서 동시다발적으로 댓글을 달 경우에 댓글의 MAX 값을 가져오고 이를 SELECT KEY로 이용하여 본래의 쿼리에 INSERT 하는 용도로 사용한다.

그런데 댓글이 아무것도 없을 때에는 MAX 값으로 가져온 댓글 번호가 0이 아닌 NULL로 가져오게 되는데, 이렇게 되면 쿼리 에러가 나타나게 된다.


이럴 때 MAX 값이 0이거나 NULL 일 때 1 로 치환해주는 것을 찾았다.

max ( reply_no ) reply_no


본래에서 이렇게 사용하였다면

isnull ( max ( reply_no ) , 0 )

와 같이 사용해주면 null이 0으로 변환이 되며

isnull ( nullif ( max ( reply_no ) , 0 ) , 1 )


와 같이 사용해주면 null이 1로 변환이 된다.

블로그 이미지

김생선

세상의 모든것을 어장관리

,

테이블 스페이스란, 말 그대로 DB의 테이블 공간을 뜻한다.

DB 유저를 생성하고 끝나는 것이 아니라, 해당 유저가 사용할 테이블 공간을 만들어야 시작이라는 뜻이다.


해당 툴은 SQL PLUS를 사용하였다.


1. Tablespace 생성

SQL> create tablespace [테이블 스페이스 이름] datafile '[저장될 경로\파일이름.ora]' size [용량]m;


우리 회사의 경우, 2기가를 기본으로 사용하며 테이블 스페이스의 자동용량증가라거나 그러한 옵션을 절대 사용하지 않기 때문에 여기까지.


또한, 테이블 스페이스를 추가하는 방법은 아래와 같다.


2. Tablespace 추가

SQL> alter tablespace [테이블 스페이스 이름] add datafile '[저장될 경로\파일이름.ora]' size [용량]m;


이러한 방법으로 가능하다.


3. Tablespace 삭제

삭제방법은 약간 까다로운데, 나같은 경우엔 잘못된 이름지정으로 삭제를 하였다. 다른 경우에는 뭐 어찌될 지 모르겠다.


SQL> drop tablespace [테이블 스페이스 이름]

그런데 때때로 데이터가 들어있는 이유나 그 외 이유로 테이블스페이스가 삭제되지 않는 경우도 있다.

그럴 땐 아래와같이 입력해보자.


SQL> drop tablespace [테이블 스페이스 이름] including contents and datafiles;

이 명령어는 걍 닥치고 다 삭제한다.





참고로, 내가 약간 실력이 후달려서 SQL PLUS에서 스크립트 불러오는 단축키를 몰라서 쓰는 방법인데, cmd에서도 가능하다.

cmd를 호출하고 아래와 같이 입력한다.


c:\>sqlplus


그리고 사용자명과 아이디를 입력하면 cmd에서 SQL PLUS가 이용이 가능, 방향키로 스크립트를 불러올 수 있으니 반복된 타이핑을 하지 않아도 편리하다.

블로그 이미지

김생선

세상의 모든것을 어장관리

,

오라클 system 비밀번호를 분실했을 때, 정말 식은땀 날 뻔 했다.

일단 오라클이 설치된 서버의 admin 계정으로 들어가서, cmd 를 띄워두고 아래와 같이 입력한다


C:\>sqlplus "/as sysdba"

SQL> show user

USER is "SYS"


이런식으로 보일 것이다.

그럼 여기에서 계정 암호를 변경해주자.


SQL> alter user system identified by 암호;




한가지 더, system 계정이 lock 걸렸을 때의 대처방법

cmd에서 마찬가지로 아래의 명령어를 입력하자.



SQL> alter user system(유저명이 될수도 있다) account unlock;


그럼 끝

블로그 이미지

김생선

세상의 모든것을 어장관리

,

서버를 관리하면서 매일매일 dump 파일을 생성한다.

우리 회사의 경우에는 새벽에 사용자가 없기에 새벽 2시~6시 사이에 덤프파일을 만드는 편이다.

이 덤프파일을 이용해서 import 방법을 해 보고자 한다.

* Export 방법은 차후에.


이 방법은 cmd 명령프롬프트에서 동작한다.

사실 어려운 방법은 아니다.


시작 - 실행 - cmd 입력


이 방법은 전체 데이터베이스를 import 하는 방법이다.

C:\> imp userid=유저명/비밀번호 file='dump파일 경로 입력' full=y


테이블/트리거 등등  다른 방식의 import는 차후에 설명...

블로그 이미지

김생선

세상의 모든것을 어장관리

,

user를 생성하는 방법 중 한가지, SQL Plus에서의 방법이다.

sql plus에서 system 권한으로 접속한다. 회사에서 세팅하는 user는 대부분 DBA 권한을 주기 때문이다.

그리고 아래의 커맨드를 날린다.


1. USER 생성

SQL> CREATE USER 사용자명 IDENTIFIED BY 비밀번호;


대소문자를 구분하지 않으나, 사용자명과 비밀번호에서는 대소문자를 가리는 것 같으니(사실 확인은 안해봤다) 유의하자.

USER 생성에 따라 여러 옵션이 존재하는 것 같은데 그것에 대해서는 추후 설명...


잠시 기다리면 완료메시지가 출력된다. 그럼 접속을 한 번 해 보자.



2. 생성한 USER로 접속

SQL> CONN 사용자명/비밀번호


연결방식에 따라 ORACLE 에러가 날 수도 있고, 올바르게 접속될 수도 있다.

에러가 난다면 아마도 다음과 같은 에러이리라 생각되어진다.


ORA-12560 : TNS : 프로토콜 어댑터 오류


회사에서는 ASP서버를 이용하기 때문에 비밀번호 뒤에 TNS NAME을 적어주어야 접속이 가능해진다. 로컬에서는 물론 적어주지 않아도 된다. 내가 일하는 곳은 원격지이기 때문에 적어주어야 한다.

따라서, 다음과 같은 명령어를 입력해준다.


SQL> CONN 사용자명/비밀번호@ASP이름


위와 같이 올바르게 입력하였다면 다음과 같은 메시지가 출력된다.


"연결되었습니다."


혹시 모르니 다시 확인해본다.


SQL> SHOW USER


그럼 현재 접속된 USER가 보인다. 이제 작업하면 된다.


아, 하나 더. DBA 권한 주는 법.



3. USER에게 DBA 권한 주는 법

SQL> GRANT DBA TO 유저명;


그럼 현재 접속된 유저에게 DBA 권한이 주어진다. 끝.

블로그 이미지

김생선

세상의 모든것을 어장관리

,

오라클 테이블 데이터 조회 및 삭제, 수정 관련된 쿼리를 정리해본다.

데이터 조회

1
SELECT * FROM 'TableName';
cs

 

테이블 삭제

1
DROP TABLE 'TableName';
cs

- 위의 방법으로 하면 테이블 자체가 삭제

 

데이터 삭제

1
DELETE FROM 'TableName' WHERE ColName = '1';
cs

- 'TableName' 이라는 이름의 테이블 중, ColName 컬럼이 1인 데이터만 삭제

 

데이터 수정

 

1
UPDATE TableName SET B = 'KIMFISH' where A = '1';
cs

- 테이블명이라는 테이블 중, B 컬럼의 내용을 KIMFISH로 변경한다, 조건은 A 컬럼의 내용 중 1 이라 되어있는 항목.

- 즉, B열의 내용을 모두 KIMFISH로 변경하고 그에 대한 조건은 A 열 중에서 1이라 되어있는 항목만 걸러내서 수정한다는 이야기이다.

- 위의 쿼리를 실행하면 B 열 1행의 ABCD가 KIMFISH로 변경이 된다.

- 부득이하게 이미지는 엑셀로 작업함 ^^;

 

DROP된 데이터 복구

DROP을 하게 되면 테이블 자체가 삭제되어지기 때문에 나같은 초짜가 테이블을 복구하고 나발이고 하긴 매우 힘들다.

그럴 땐 다음과 같은 명령어를 입력한다.

 

1
FLASHBACK TABLE TableName TO BEFORE DROP;
cs

 

DROP을 여러번 했다면 RECYCLE BIN 에서 최근 DROP 목록을 삭제하고 실행해야 한다.

블로그 이미지

김생선

세상의 모든것을 어장관리

,