전체 글 749

xa_NULL trc 파일

티맥스가 DBMS 와 거래할 때의 로그가 보관되는 곳이 xa_NULL 파일이다. 엄밀히 말하면 오라클의 클라이언트 모듈이 남기는 파일이다. (티맥스나 턱시도 같은 미들웨어가 남기는 것이 아님) 모든 거래의 로그를 남기게 되므로 용량이 무지막지하게 크기도 하지만 장애가 났을 때는 중요한 근거 자료가 된다. xa_NULL 파일은 다음과 같이 생겼다. 102946.40932.0: xaocommit: xid=0x1-02c00000038a7126-0000001, rmid=0, flags=0x0 102946.40932.0: xaocommit: rtn 0 보통 파일명은 xa_NULL03252021.tr c 와 같이 중간에 일자가 들어간다. 이 파일구성은 거래시각, 처리 프로세스의 ID가 먼저 나오고 그 다음 라인에 ..

프로프레임 4.0 스튜디오 heap 메모리 부족 오류

프로프레임 4.0 스튜디오를 사용하다가 메모리 오버 플로우 가 나면서 heap 메모리가 부족하다는 오류가 발생될 경우가 있습니다. 종전에 알기로 eclipse.ini 에다가 옵션을 잡아 주면 되는 것으로 알았는데 실험해 본 바에 의하면 먹히지 않습니다. 대신 proframe.exe 를 실행하는 단축아이콘의 속성에 아래와 같이 Xms, Xmx 메모리를 지정하면 먹히네요. C:\TmaxSoft\ProFrameTP4.0\Studio\proframe.exe -clean -vmargs -Xms256m -Xmx512m 여기서 Xms 는 initaial heap memory size 이고 Xmx 는 Maximum heap memory size 입니다. 보통 1G 이상 메모리를 가지고 있는 노트북이라면 256으로 시작..

역류성 식도염에 좋은 음식

생활습관 개선으로 예방하기 역류성식도염의 만성적 특성을 고려해보면 생활습관 개선이 역류질환 예방에 도움을 줄 수 있습니다. 즉 과식하거나 식후 바로 누웠을 때, 고지방식 또는 알코올 섭취 후 역류가 잘 발생하므로 이런 습관을 버리는 것이 역류성식도염을 예방하는 방법입니다. 잠잘 때 머리를 15cm 정도 올려주면 야간 역류방지에 도움이 되며, 식후 2-3시간 이내에 눕지 말기, 과식을 피하고 규칙적으로 조금씩 자주 먹기, 흡연 삼가기, 카페인이나 초콜릿, 지방식의 섭취 줄이기, 체중 감량으로 복부 비만 조절하기, 복압을 높일 수 있는 조이는 옷 피하기 등도 역류질환 예방에 도움이 됩니다. 특히 과식 후 속이 더부룩하고 소화가 안 될 때 시원한 탄산음료나 커피를 마시는데, 이러한 습관은 식도위괄약근을 약화시..

카테고리 없음 2021.01.22

U2L프로젝트 sprintf 이슈

snprintf() 함수는 타겟배열버퍼에 일련의 문자와 값의 형식을 argument로 전달하여 저장할 수 있다. 아래의 샘플 예제를 실행했을 때 Unix와 Linux 에서 결과값이 다르게 출력되는 이슈가 있다. #include #include int main() { char str1[1024]; char buf[10]; memset(str1, 0x00, sizeof(str1)); memset(buf, 0x00, sizeof(buf)); strcpy(str1, "abcd"); strcpy(buf, "1234"); snprintf(str1, sizeof(str1), "%s%s", str1, buf); printf("str1 [%s]\n", str1); return 0; }이 프로그램을 Unix에서 수행했을 ..

카테고리 없음 2020.10.28

오라클 ORA-01002 오류 원인과 조치 방법

ORA-01002 오류가 발생되는 경우는 여러가지가 있을 수 있겠지만 최근에 만난 사례는 공유하면 좋겠다. 오라클에서 커서 Open 후에 rollback을 처음으로 만나게 되면 ORA-01002 오류 : fetch out of sequence 가 발생될 수 있다. 오라클의 경우 커서 오픈 후 바로 rollback 을 만나면 커서를 닫아 버리기는 경우였다. 이런 현상은 무조건 발생되는 것은 아니고 커서 오픈 전 DML 이 수행된 적이 있을 경우에 발생된다. 커서 오픈 전 수행된 DML 이 commit/rollback 으로 마무리 되지 않은 상태에서 커서가 오픈되고 rollback 을 처음 만나게 될 때 이전 DML 을 rollback 하면서 커서도 close 해 버린다. 커서 오픈 전에 DML 수행되었더라..

카테고리 없음 2020.09.17

리눅스 디렉토리 사용량

디렉토리별 사용량을 보려면 du 명령을 사용한다. 그런데 그냥 du 명령을 치면 하위 디렉토리까지 다 보여 주게 되므로 정신이 없다. 현재 디렉토리 기준으로 1 레벨만 보고 싶다면 --max-depth 옵션을 사용한다. du --max-depth=1 그러면 내가 접근할 수 없는 디렉토리의 경우 "허가 거부" 메시지가 뜨게 된다. 이런 거 지저분해서 보기 싫다면 du --max-depth=1 2>/dev/null "허가 거부" 등과 같은 오류 메시지는 화면으로 출력되지 않도록 한다. 디렉토리 사용량 크기별로 정렬해서 보면 편할 것이다. du --max-depth=1 2>/dev/null | sort -n 다른 이야기 지만 사용량을 byte 단위가 아닌 K, G로 보고 싶다면 -h 옵션을 사용한다.

U2L프로젝트 문자열 이슈

유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 그중에서 함수로 아규먼트를 넘길 때 문자열 이슈가 있다. 특히 readonly 문자열 값을 아규먼트로 넘길 때 끝처리에서 다르게 동작한다. 001: void function_test_str( char *str ) { 002: char tmp_str[100]; 003: size_t len; 004: 005: len = strlen(str); 006: strncpy( tmp_str, str, sizeof(tmp_str)); 007: tmp_str[len] = 0x00; /* 확실한 막음처리 */ 008: printf("len=[%u] str=[%s] tm..

U2L프로젝트 ltoa 이슈

IBM이나 HP 유닉스에서 사용했던 ltoa 함수를 리눅스에서는 지원하지 않는다. int형 변수의 값을 char 배열에 넣는 함수를 사용하고 싶다면 할 수 없이 sprintf() 함수를 사용하는 방법을 사용해야 한다. 하지만 ltoa() 는 바로 문자열 포인터를 return 받기 때문에 바로 사용하면 되었지만 sprintf() 를 사용할 경우 결과를 저장할 변수를 하나 선언해야하는 번거로움이 있다. sprintf(버퍼,"형식지정자", 값) 예를들어, long cnt = 400; char str[100]; sprintf(str, "%ld", cnt ); 라고 하면 버퍼에 문자열 400 이 들어간다. 프로그램내에서 빈번하게 사용된다면 매크로로 선언해 놓고 사용하는 것을 권장한다. #define LTOA( _..

U2L프로젝트 printf 이슈

포매팅으로 패딩하여 출력하거나 문자열을 구성할 때 동작의 차이가 있다. printf("[%06s]\n", "AB"); 라고 했을 때 유닉스에서는 0 이 좌패딩되었다. 그런데 리눅스에서는 스페이스가 좌패딩된다. printf() 는 출력하는 거라 로직에 영향을 미치지 않을 수 있다고 치더라도 포매팅을 사용하는 sprintf 도 동일한 현상이 발생된다. 이런 로직의 경우는 프로그램 속에 숨어 있어서 찾아내기 어렵기 때문에 꼼꼼한 테스트가 필수이다. printf 함수의 포매팅으로는 커버할 수 없기 때문에 별도의 함수를 만들어야 하기 때문에 상당히 번거롭게 된다.

U2L프로젝트 NULL 이슈

유닉스로 개발된 C 소스를 리눅스에서 컴파일만 하고서 돌리면 잘 돌아갈까? 대부분 프로그램들은 잘 돌아가지만 몇몇 코드들은 손을 봐줘야 하는 것들이 있다. 리눅스에서는 sprintf 를 사용할 때도 유닉스와 다르게 동작해서 오류가 발생되는 경우가 있다. 유닉스에서는 멀쩡히 잘 돌아가던 프로그램을 리눅스에서 돌리면 오류가 발생되는 경우로서 sprintf()가 있다. memset(b, 0x00, sizeof(b)); sprintf(a, "name:%s" , b ); printf("%s\n", a ); 이런 소스의 경우 b 값이 NULL일 경우 유닉스에서는 아무 것도 찍히지 않는다. name: 이라고만 찍한다. 그러나 리눅스에서는 "(null)" 이라는 문자가 찍히게 되면서 name:(null) 이라고 찍힌다..

반응형