programing

SIGSEGV/SIGABRT 및 친구를 위한 Oracle Pro*C/OCI 설치 핸들러 - 사용하지 않는 이유 및 방법

skycolor 2023. 8. 20. 10:36
반응형

SIGSEGV/SIGABRT 및 친구를 위한 Oracle Pro*C/OCI 설치 핸들러 - 사용하지 않는 이유 및 방법

Pro*C(Oracle for C-Code의 임베디드 SQL 전처리기) 또는 OCI를 사용할 때 connect/init 루틴이 일부 신호 처리기를 설치한다는 것을 알게 되었습니다.

그것은 a 이전을 의미합니다.

EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbspec ;

또는

OCIEnvNlsCreate()

예를 들어 이러한 신호에 다음 처리기가 있는지 확인할 수 있습니다.

No              NAME                Pointer   SA_SIGINFO   SIG_DFL   SIG_IGN
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
 1            SIGHUP                  (nil)        false      true     false
 2            SIGINT                  (nil)        false      true     false
 3           SIGQUIT                  (nil)        false      true     false
 4            SIGILL                  (nil)        false      true     false
 5           SIGTRAP                  (nil)        false      true     false
 6           SIGABRT                  (nil)        false      true     false
 7            SIGBUS                  (nil)        false      true     false
 8            SIGFPE                  (nil)        false      true     false
 9           SIGKILL                  (nil)        false      true     false
10           SIGUSR1                  (nil)        false      true     false
11           SIGSEGV                  (nil)        false      true     false
12           SIGUSR2                  (nil)        false      true     false
13           SIGPIPE                  (nil)        false      true     false
14           SIGALRM                  (nil)        false      true     false

connect/init 문 뒤의 표는 다음과 같습니다.

No              NAME                Pointer   SA_SIGINFO   SIG_DFL   SIG_IGN
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
 1            SIGHUP                  (nil)        false      true     false
 2            SIGINT         0x7eff9e60bdac         true     false     false
 3           SIGQUIT         0x7eff9ea17f9c         true     false     false
 4            SIGILL         0x7eff9ea17f9c         true     false     false
 5           SIGTRAP         0x7eff9ea17f9c         true     false     false
 6           SIGABRT         0x7eff9ea17f9c         true     false     false
 7            SIGBUS         0x7eff9ea17f9c         true     false     false
 8            SIGFPE         0x7eff9ea17f9c         true     false     false
 9           SIGKILL                  (nil)        false      true     false
10           SIGUSR1                  (nil)        false      true     false
11           SIGSEGV         0x7eff9ea17f9c         true     false     false
12           SIGUSR2                  (nil)        false      true     false
13           SIGPIPE                    0x1         true     false      true
14           SIGALRM                  (nil)        false      true     false

여기서 0x7eff9e60bdac은 다음을 의미합니다.sslsshandler()그리고 0x7⁄9ea17f9c는 다음을 의미합니다.skgesig_sigactionHandler()정의된 두 기호libclntsh.so.11.1오라클 런타임 라이브러리.

저는 오라클 신호 처리기가 상당히 비결정론적인 행동을 도입하는 것처럼 보이기 때문에 걱정됩니다.즉, OS, 하드웨어 및 다음과 같은 장애/중단 유형에 따라 다음과 같은 동작이 관찰되었습니다.

  • 유용한 정보가 별로 들어 있지 않은 추악한 스택 트레이스
  • exit-status 1로 프로그램 종료 직접 - 코어 파일 쓰기 및 오류 메시지 없음
  • 종료 상태가 0인 직접 프로그램 종료(종료!)

특히 마지막 행동은 기괴합니다.

따라서 저는 다음에 관심이 있습니다.

  • 동기 - 왜 오라클이 신호 처리기를 설치합니까?
  • 비활성화 방법 - 최소한 기본적으로 코어 파일을 생성하는 신호의 경우 - 내 사용 사례의 경우, 나는 그러한 상황(개발 중)에서 코어 또는 신뢰할 수 있고 정보를 제공하는 운영 종료 상태를 원하기 때문입니다.
  • 예를 들어 Oracle 신호 처리기를 덮어쓰는 것이 안전합니까?act.sa_handler = SIG_DFL; sigaction(SIGABRT, &act, 0);?
  • 연결 후 SIGABRT/SIGSEGV 및 친구를 SIG_DFL로 재설정할 때의 단점은 무엇입니까?

신호 처리 및 진단 프레임워크 고려 사항: OCI 진단 프레임워크는 응용 프로그램에서 사용하는 신호 처리에 영향을 줄 수 있는 신호 처리기를 설치합니다.다음을 설정하여 OCI 신호 처리를 비활성화할 수 있습니다.

DIAG_SIGHANDLER_ENABLED=FALSE

sqlnet.ora 파일에 있습니다.자세한 내용은 Oracle Call Interface Programmer's Guide의 "OCI의 결함 진단"을 참조하십시오.

sqlnet.ora 파일에서 이 환경 변수를 구성해 보십시오.

Oracle 패치를 적용할 수 있습니다..so대체할 파일sigaction으로 끈을 매다.nosigactn그리고 당신의 프로그램에서 작동하지 않는 기능을 만듭니다.nosigactn와 같은 서명으로sigaction.

언급URL : https://stackoverflow.com/questions/17124881/oracle-proc-oci-install-handlers-for-sigsegv-sigabrt-and-friends-why-and-how

반응형