ORA-01400 : NULL을 ("DB명"."테이블명"."칼럼") 삽입할 수 없습니다

ORA-01400 : NULL을 ("DB명"."테이블명"."칼럼") 삽입할 수 없습니다 


 ◆ 문제 원인


  cannot insert NULL into ("eai"."test_table"."name")

  해당 에러는 데이터를 insert 할 때, eai.test_table 의 name 컬럼의 속성이 not null 인데 데이터를 넣지 않아서 (null) 발생



 ◆ 문제 해결


  * 데이터를 insert 하기 전에 not null 컬럼을 확인하여 해당 컬럼들에는 데이터를 필수적으로 입력하면 된다.

  * 데이터가 있음에도 not null 이 발생할 경우, 값이 null 인 이유를 확인한다. 



  1. 계산에서 null 이 발생할 경우 null 이 발생하는 경우를 없애야 한다.

     cnt_no 라는 not null 컬럼에 max(cnt_no) + 1 를 했을 경우, 테이블에 값이 없다면 (레코드가 0인 경우) null 이 되므로 에러가 발생한다.

     그런 경우 max( nvl(cnt_no, 0) + 1 ) 를 해서, 레코드가 0일 경우 max(cnt_no) 값을 0으로 변환을 해서 0 + 1 로 만들어 해결한다.



  2. 변수를 이용하여 insert 할 경우, null이 발생하지 않는 변수라면 변수의 선언문이나 정의문이 문제가 있는지 확인한다.

     * 선언

       <field key="0" nofetch="0" name="DIVISION_CD"/>


     * sql 정의

        INSERT INTO EAI.TEST_EAI  ( DIVISION_CD, COM_CD, GROUP_ID, TEXT)

        VALUES  (:DIVISION_CODE, :COMPANY_CODE, :GROUP_ID, :TEXT)

RAC 설치시 클러스터웨어 설치 실패시 조치 방법

1. 삭제 스크립트 실행

# $ORA_CRS_HOME/install/rootdelete.sh

# $ORA_CRS_HOME/install/rootdeinstall.sh


2. 노드 application 프로세스 중단

# srvctl stop nodeapps -n <node name>


3. 부팅 시 노드 application 자동 실행 방지(root 권한으로 실행)

Sun:


# rm /etc/init.d/init.cssd

# rm /etc/init.d/init.crs

# rm /etc/init.d/init.crsd

# rm /etc/init.d/init.evmd

# rm /etc/rc3.d/K96init.crs

# rm /etc/rc3.d/S96init.crs

# rm -Rf /var/opt/oracle/scls_scr

# rm -Rf /var/opt/oracle/oprocd

# rm /etc/inittab.crs

# cp /etc/inittab.orig /etc/inittab


Linux:


# rm -f /etc/init.d/init.cssd

# rm -f /etc/init.d/init.crs

# rm -f /etc/init.d/init.crsd

# rm -f /etc/init.d/init.evmd

# rm -f /etc/rc2.d/K96init.crs

# rm -f /etc/rc2.d/S96init.crs

# rm -f /etc/rc3.d/K96init.crs

# rm -f /etc/rc3.d/S96init.crs

# rm -f /etc/rc5.d/K96init.crs

# rm -f /etc/rc5.d/S96init.crs

# rm -Rf /etc/oracle/scls_scr

# rm -f /etc/inittab.crs

# cp /etc/inittab.orig /etc/inittab


HP-UX:

# rm /sbin/init.d/init.cssd

# rm /sbin/init.d/init.crs

# rm /sbin/init.d/init.crsd

# rm /sbin/init.d/init.evmd

# rm /sbin/rc3.d/K960init.crs

# rm /sbin/rc3.d/S960init.crs

# rm -Rf /var/opt/oracle/scls_scr

# rm -Rf /var/opt/oracle/oprocd

# rm /etc/inittab.crs

# cp /etc/inittab.orig /etc/inittab


HP Tru64:


# rm /sbin/init.d/init.cssd

# rm /sbin/init.d/init.crs

# rm /sbin/init.d/init.crsd

# rm /sbin/init.d/init.evmd

# rm /sbin/rc3.d/K96init.crs

# rm /sbin/rc3.d/S96init.crs

# rm -Rf /var/opt/oracle/scls_scr

# rm -Rf /var/opt/oracle/oprocd

# rm /etc/inittab.crs

# cp /etc/inittab.orig /etc/inittab


IBM AIX:


# rm /etc/init.cssd

# rm /etc/init.crs

# rm /etc/init.crsd

# rm /etc/init.evmd

# rm /etc/rc.d/rc2.d/K96init.crs

# rm /etc/rc.d/rc2.d/S96init.crs

# rm -Rf /etc/oracle/scls_scr

# rm -Rf /etc/oracle/oprocd

# rm /etc/inittab.crs

# cp /etc/inittab.orig /etc/inittab


5. Oracle Universal Installer에서 CRS home을 선택 후 "설치해제" 


6. dd 명령으로 OCR 및 Voting File을 제거


ex)

# dd if=/dev/zero of=/dev/raw/raw1 bs=8192

# dd if=/dev/zero of=/dev/raw/raw2 bs=8192

# dd if=/dev/zero of=/dev/rdsk/V1064_vote_01_20m.dbf bs=8192 count=2560

# dd if=/dev/zero of=/dev/rdsk/ocrV1064_100m.ora bs=8192 count=12800


만약 RDBMS 설치를 제거한다면, 사용중이던 ASM 디스크도 정리합니다.

CRS를 재 설치하고자 하면, RAC 설치 매뉴얼에 기술된 순서대로 설치를 다시 진행.

참고 : 프로세스가 살아 있다면 EVM, CRS 및 CRS 프로세스를 kill 시키거나 노드를 재부팅.


ps -ef | grep crs 

ps -ef | grep evm

ps -ef | grep css