Oracle2019. 6. 21. 16:36

ora-01007 variable not in select list

프로시져나 함수를 이용할때 발생하는 에러.

 

TYPE Gv_DATA_LIST IS TABLE OF TABLE_NAME %ROWTYPE;

 

이런식으로 테이블을 타입으로 지정해줄때 발생한다.

타입으로 지정한 테이블의 컬럼명이나 컬럼의 타입이 프로시져내에서 실행하는 쿼리와 동일 하다면 괜찮지만..

간혹가다 전혀 다른 테이블의 데이터를 가져와서 넣어야 하는 경우가 생기는데..

이럴때 타입으로 지정한 테이블의 타입으로 컬럼명과 컬럼의 타입을 맞춰주면 에러는 발생하지 않는다.

컬럼의 갯수와 순서까지 다 맞춰주는것이 좋다.

값이 없는 경우 빈값으로 채워주면 된다.

Posted by Z700zZz
Oracle2016. 10. 26. 13:53

서브 쿼리로 결과 값을 테이블로 만들어 놓고 그 테이블의 데이터로 다시 쿼리를 해야 하는데(예를 들어 Case When등을 쓰는경우) 서브쿼리의 결과 값이 없을 경우 제대로 된 값을 뽑아내지 못할때가 있다.

그럴땐 결과 값이 있는것처럼 만들어야 하는 경우가 발생하는데..

이럴땐 Max나 Min을 쓰도록 하자.


select case when (a.ncd + a.lld < sysdate) then 'true' else 'false' end as result from ( select nvl(change_day, 90) as ncd ,(case when login_date is null then to_date('20160401','yyyymmdd') when login_date > to_date('20160401','yyyymmdd') then login_date END) as lld from ( select min(login_date) as login_date, min(change_day) as change_day from FT_PWD_CHANGE where site_id='aaaa' AND login_id='bbbb' ) ) a


서브쿼리 컬럼 값에 min을 쓴것을 볼수 있을것이다.

min을 안썼을 경우에는 결과값이 아예 나오지 않지만 min을 쓰면 결과값이 정상적으로 출력 된다.

Posted by Z700zZz
Oracle2015. 9. 17. 16:22

오라클 설치 후 모든 설정을 끝낸 뒤에 SQL Developer로 접속을 해봤더니 다음과 같은 상태 메세지가 출력 되었다.


The Network Adapter could not establish the connection(TNS-17002)


뭔가 네트워크 상에 문제가 발생되어 안된다는 메세지인것은 분명함..

그래서 저 내용으로 검색을 해보니 최상단에 나타나는 검색 결과는 오라클에서 사용중인 포트가 방화벽에서 열려있는가를 확인해 보라는 답변들이 다수였다. 하지만 문제 해결을 위해서 iptables에 오라클에서 사용중인 포트를 등록해 놓은 상태였다.

혹시나 telnet명령어로 확인해 보니..


Trying xxx.xxx.xx.xxx...

telnet: connect to address xxx.xxx.xx.xxx: Connection refused

telnet: Unable to connect to remote host


위와 같은 결과를 출력했다. 이는 포트가 열려 있지 않은 상태.


지금은 프로젝트 진행이 더 중요한 상태라 일단은 방화벽을 사용하지 않는 명령어로 방화벽을 꺼놓은 상태..


[root@oracle ~]# service ipchains stop

ipchains: 인식되지 않은 서비스

[root@oracle ~]# service iptables stop

iptables: 방화벽 규칙을 지웁니다:                          [  OK  ]

iptables: 체인을 ACCEPT 규칙으로 설정 중:  filter          [  OK  ]

iptables: 모듈을 언로드하는 중:                            [  OK  ]

[root@oracle ~]# chkconfig ipchains off

ipchains 서비스의 정보를 읽는 도중 오류가 발생했습니다: 그런 파일이나 디렉터리가 없습니다

[root@oracle ~]# chkconfig iptables off

[root@oracle ~]# reboot


명령어 실행과 실행 결과를 모두 적어놨는데..

ipchains가 실행되지 않는 부분은 신경쓰지 않아도 된다.

방화벽 설정을 off시키고 리눅스를 재부팅 하는 과정.


다시 telnet으로 포트확인을 해보니 아래와 같이 결과가 나오면서 정상적으로 접속 되는것을 볼수 있다.


Connected to xxx.xxx.xx.xxx

Escape character is '^]'.


일단은 임시방편이지만 iptables에 포트를 추가해도 방화벽때문에 포트가 막힌 문제에 대해서 알아봐야 하고..

알아본 다음 방화벽을 다시 설정해 정상적으로 돌아가도록 해야한다.

이거때문에 반나절도 더 시간낭비를..



좀전에 다시 안 사실을 정리해보면..방화벽 설정을 그동안 잘못해준것 같다.

iptables에 직접 포트를 열어주는 부분을 적어 넣고 적용을 해줬었는데..

적용 하는 순서를 잘못해준건지 아니면 포트를 여는 부분 외에 추가로 더 해줘야 할 부분이 있었던건지..


iptables INPUT -p tcp -m tcp --dport 1521 -j ACCEPT

iptables OUTPUT -p tcp -m tcp --dport 1521 -j ACCEPT


이 두 명령어로 해결 되었다.

기존에는 iptables수정하면서 한줄만 추가를 해줬는데 이건 INPUT과 OUTPUT을 모두 명령어로 추가 해주는 방법 같은데..

아무튼 나중에 다시 같은 일이 반복 되면 확인하고 시도해 볼 방법은 많을 것 같다.

Posted by Z700zZz
Linux2015. 8. 26. 17:55

이건 내가 설명하지 않아도 이 블로그를 보면 아주 상세히 나와있다..


http://blog.beany.co.kr/archives/3198


이분 대단하신 분..

이처럼 꼼꼼하다니.

추가적으로 작성해야 할 부분은..

현재 리눅스에 오라클을 설치 할때 로컬에서 설치가 아닌 원격으로 오라클 서버에 접속해서 설치하고 있다.

이 블로그는 서버에 직접 설치하는 방법이기 때문에 원격으로 접속해 설치하는 방법이 나와있지 않다.

이 부분을 설명을 내 블로그에 적어야함.

그 외에 오라클 설치 부분은 저 블로그가 짱임..!!


runInstall을 실행할때 su - oracle을 써서 오라클 계정으로 전화 시킨뒤 실행 시키는데..

이러면 설치가 제대로 되지 않는다.


Checking Temp space: must be greater than 80 MB. Actual 7440 MB Passed
Checking swap space: must be greater than 150 MB. Actual 2527 MB Passed
Checking monitor: must be configured to display at least 256 colors
>>> Could not execute auto check for display colors using command /usr/bin/xdpyinfo. Check if the DISPLAY variable is set. Failed <<<<

Some requirement checks failed. You must fulfill these requirements before

continuing with the installation,

Continue? (y/n) [n] y


그래도 계속해서 진행 해보면 Exception이 발생 되면서 설치 진행이 되지 않을것이다.

root계정으로 접속이 된 상태에서 oracle계정으로 변환해서 설치하지 말고 터미널을 띄울때나 아니면 리눅스를 부팅할때 oracle계정으로 접속해서 설치를 하면 문제 없이 설치가 된다.


오라클을 설치 하다보면 설치중 에러가 상당히 많이 발생한다.

그전 패키지 설치나 환경변수 설정 부분에서는 잘 발생하지 않지만..

X Window상에서 설치하는 부분에서 에러 발생.

위 오라클 설치 블로그를 보면 패키지 설치 부분에 rpm -Uvh -nodeps 패키지 이런식으로 패키지를 설치 하라고 나와있는데.

nodeps라는 옵션은 패키지간 의존성을 무시하고 까는거라서 비추한다고 한다.

yum을 못쓰는 상황이라 패키지 파일을 하나하나 다운받아서 설치했는데 모두 --nodeps옵션을 주고 설치를 했으니..

그래서 설치하는 도중에 파일 생성을 할수 없다는 에러 팝업이 계속해서 떴다.

그럴때 마다 에러 내용 검색해서 부족한 패키지 설치..


설치 도중 rpm 패키지 의존성 문제가 아닌 오류 상황이 발생하게 된다.

Error in invoking target '~~' of makefile 이라는 오류는 대부분 설치에 필요한 패키지가 없어서 생기는 에러들..

에러가 발생하면 구글링을 먼저했고 구글링을 하면 대충 어떤 패키지가 필요한지가 나오는 경우가 많다.

아니면 CentOS에 Oracle을 설치 할때 필요한 패키지가 무엇이 있는지 목록을 보고 하나하나 설치가 되어 있는지 확인을 하는 방법도 있다.

일단 설치 하면서 해결하지 못한건 Error in invoking target 'install' of makefile 하는 에러는 해결하지 못했다.

지금까지 발생했던 Error in invoking target로 시작하는 에러중 RPM설치가 아닌 다른 방법으로 해결해야 하는 에러가 발생했다.

Error in invoking target 'agent nmhs' of makefile 이 에러는 

$ORACLE_HOME/sysman/lib/ins_emagent.mk파일을 수정함으로써 해결 가능하다.


$(SYSMANBIN)emdctl:

$(MK_EMAGENT_NMECTL)


위의 코드를 아래와 같이 바꿔 주면 된다.


$(SYSMANBIN)emdctl:

$(MK_EMAGENT_NMECTL) -lnnz11


제일 끝에 -lnnz11 을 추가 해줌으로써 문제 해결.

Error in invoking target '~~' of makefile이라고 뜨는 에러중에는 CentOS 7에 Oracle 11g를 설치할때 어떻게 해도 해결이 되지 않는 에러들이 있다고 하는데..내가 볼땐 install이 그경우 아닐까 한다. 중간에 몇개는 그냥 넘어가도 설치되서 데이터베이스가 동작하는데 아무 문제가 없는 경우도 있다고는 하지만..그래도 뭔가 영 찜찜하다.


그리고 ins-20802 oracle net configuration assistant을 실패했습니다. 라는 에러 메세지가 95%쯤에도 한번 나왔는데..

이건 리눅스의 hostname과 오라클 설치시 설정해줬던 hostname을 비교하면 문제를 해결 할 수 있다.

나의 경우에는 오라클 설치 부분에서 상당한 삽질을 하면서 초기 설정에서 /etc/sysconfig/network 에 hostname을 영구적으로 변경하는 부분을 빼먹고 지나쳤는데..network에 정의된 hostname과 /etc/hosts에 선언된 hostname이 서로 달라서 설치가 안됐었다.

두곳 모두 oracle로 바꿔주니 이부분에서 에러가 발생하지 않고 제대로 설치가 됐다.


설치가 완료가 되고 제일 처음 소개한 블로그에 보면 현재 의 SID이름을 확인하는 쿼리가 있는데 이걸 실행하니 또 제대로 된 결과가 나오지 않았다.

이것 또한 초기 설치할때 설정한 SID와 설치 과정에서 설정한 SID가 서로 달라서 제대로 된 결과가 나오지 않았던 것..

SID설정 하는 부분은 /home/oracle/.bash_profile의 내용에 보면 있다.


그외에도 외부에서 접속 하려면 포트가 방화벽에 막혀 있는지도 확인해야 하고 리스너 등록도 해야한다.

이부분은 이전에 삽질 한것과는 반대로 아주 쉽게 풀려서 아주 행복..

리눅스 서버설정에서 부터 오라클 설치까지 이것만으로 5일이 걸릴줄이야..

Posted by Z700zZz