Table에 데이터가 들어가 있는 경우 사이즈를 축소하는 것은 안된다.

여기까지는 다 아는 사실..



그런데.. 에를 들어서

Number(13,3)의 경우 소수점 3자리를 5자리로 늘이려면..

ORA-001440 정도 또는 자리수를 축소할 열은 비어 있어야 합니다. 라는 오류가 발생한다.


축소??


검새을 해보니..

13+3의 길이를 잡고 있다가 3을 5로 변경을 하면..

13+5가 되는 것이 아니라 11+5가 되기 때문에 축소로 본단다..



그래서 3을 5로 변경을 하려면..


Number(15,5)로 앞자리도 변경을 해주어야 정상적으로 변경이 된다.


SELECT * FROM user_constraints
WHERE owner = 'DB User' AND constraint_name = '제약조건 명'


이상!!

잘되던 오라클이 갑자기 접속이 안됐다.


AD전환 하고 나서 오라클을 지우고 다시 설치하였는데..



어라..

"ORA-12154 TNS : 서비스 명을 해석할 수 없습니다." 라는 오류가 발생한다. ???


인터넷 검색 시작..


Oracle 설치 폴더에 Network에 Admin 폴더 안에 있는 sqlnet.ora 파일이 서버와 틀려서 발생하는 오류란다.



열어서 확인해 보니..

AD관련해서 NAMES.DEFAULT_DOMAIN = ***.NET이부분이 추가가 되었다.


앞에 #을 붙여서 주석처리..



그리고 다시 시도 했더니..


젠장.. 또 안된다.



"ORA-12638: 신용검색에 실패했습니다.".... 란다.


젠장..



아무리 내 신용도가 바닥이라..


회사에서 내말을 아무도 안믿기는 하지만.. 쩝..


이건 너무 하잖어..




다시 검색..


결과도 잘 안나온다.


TNS셋팅 다시 해봤다.

TNS명에 보니 이전에는 안붙던 도메인이 붙는다.


TNS명.***.NET 이라고..



다시 시도..


역시나 같은 결과..




쩝..




인터넷 다시 검색..

다행히 결과가 나왔다.



sqlnet.ora 파일에 SQLNET.AUTHENTICATION_SERVICES= (NTS) 이부분을 주석처리.. 하란다.


역시나 앞에 #을 붙이고 시도..



다행히 정상적으로 로그인이 된다.



하튼.. 지랄이다.. 지랄.. 쩝..

1.Windows 계열일 경우
이경우 레지스트리에 등록된 SID를 지우셔야 할겁니다.
제가 찾아본것으로는 아래 레지스트리를 지우시고
다시 DB를 생성하시면 될듯합니다.
\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMEID\SID
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleServiceSID
이두가지를 지우시면 될듯합니다.
여기서 SID는 예전에 설치하셨을때 사용하신 SID겠죠..
이게 남아있으면 같은 SID로 다시 DB를 만들수 없습니다.


2.Unix계열(리눅스도 포함)
보통 SID는 oratab이란 파일에 저장되는데
이파일은 시스템마다 조금씩 틀리지만
/etc, /var/opt/oracle 밑에 존재합니다.
그냥 이파일을 지우시던지...아니면
편집하셔서 기존에 설치하셨던 SID 리스트를
지우시면 됩니다.



출처 : http://kin.naver.com/detail/detail.php?d1id=1&dir_id=10110&eid=d1ATOYd7LSPSDdaPp6zGw8j1Ej4NbTI6&qb=v8C288WsIHNpZA

테스트 환경 : Oracle 9i

아래와 같은 쿼리가 있다.

SELECT * FROM TMP1
WHERE PAT_NO NOT IN (SELECT PAT_NO FROM TMP2)
;



결과가 안나온다.

분명히 TMP1에는 있고 TMP2에는 없는 PAT_NO가 있는데...


쿼리를 바꿔보았다.



SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO)
;


PAT_NO가 NULL인것 까지 몽땅 나온다. 췟..

SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO)
    AND A.PAT_NO IS NOT NULL
;


원하는 결과가 나왔다.


혹시나 하는 맘에 첫번재 쿼리를 바꿔보았다.



SELECT A.* FROM TMP1 A
WHERE NOT EXISTS (SELECT 1 FROM TMP2 WHERE PAT_NO = A.PAT_NO WHERE PAT_NO IS NOT NULL)
;


결과가 나온다... 젠장...


뭐가 다른지 잘 모르겠다. 쩝...

오라클에서는 Update 할때..

UPDATE INSA1 A SET
(A.JUMIN_NO1,A.EMP_CNAME)
=(SELECT JUMON_NO1,EMP_CNAME FROM INSA2 WHERE EMP_NO = A.EMP_NO)
WHERE A.EMP_NO = '000000'

이런 쿼리가 먹었었는데...

SQL은 안먹는듯..

다음과 같이 수정..

UPDATE INSA1 SET
JUMIN_NO1 = A.JUMIN_NO1,
EMP_CNAME = A.EMP_CNAME
FROM INSA2 A INNER JOIN INSA1 B ON A.EMP_NO = B.EMP_NO
WHERE A.EMP_NO = '000000'

간만에 SQL만지려니.. 기억이 가물... 가물...

+ Recent posts