ORA-04031 에러는 Shared Pool 내에 메모리가 단편화됨에 따라 연속된 parsing 공간을 제공하지 못해 발생하는 에러이다. 메모리가 단편화되는 이유는 리터럴 SQL을 많이 사용하는 경우에 그럴 수 있는데, 해결 방안으로는 리터럴 SQL을 줄이거나 Shared Pool size를 늘리는 방안이 있다. 나는 시스템 운영중에 ORA-04031 에러가 발생하였고 해결 방법을 찾아 다녔는데 ORA-04031 에러가 아무리 발생시키려고 해도 발생하지가 않았다. 그래서 확인해보니 에러가 난 시간에 Shared Pool이 자동 조정되어 반영이 되어 그 뒤에 똑 같은 에러가 발생하지 않은것이다. 에러 원인을 파악하고 해결하기 위한 방안 3가지 방법 1. 오래된 세션을 끊어서 shared pool에 잡고 ..
협력사와 같이 방화벽을 오픈 하고나서 Telnet으로 접속을 시도 하였을때 연결이 돼지 않았을때 Tracert 기능을 이용하면 어디까지 연결이 되고 어느 IP에서 막히는지 확인할 수 있다. tracert 명령어를 사용했을때 아래처럼 Request timed out 메시지만 뜬다면 이건 Tracert 명령어가 아에 막혔다는 뜻이다. 이를 해결하려면 Tracert 명령어를 사용할 수 있게 ICMP 프로토콜이 아웃바운드 규칙에 열려 있어야 한다. 아웃바운드 규칙에서 ICMP 프로토콜을 열어주었고 다시 Tracert 명령어를 사용하였더니 정상적으로 명령어가 실행 되었다.
PL/SQL 스크립트를 짜고 테스트를 해볼때 퍼포먼스가 낮다고 생각이 들면 SELECT문을 먼저 봐바야 한다. 생각없이 코딩하다가 놓치기 쉽고 고치기 쉬운 실수는 WHERE절에서 함수를 사용할때 조회한 테이블의 데이터를 함수로 변환하여 비교하는 실수이다. 아래 쿼리문 빨간박스에서 tDATE값은 상수이고 DAY_CODE2는 테이블의 컬럼인데 이 컬럼에 함수를 적용하면 라인별로 함수가 사용되고 비교가 되기 때문에 건수가 많을수록 퍼포먼스는 상당히 저하된다. 만약에 10만개의 레코드가 있다면 10만번의 함수가 돌아간다는 뜻이다. 그래서 상수쪽에 함수를 적용하여 비교하여야 한다. 아래 쿼리문 처럼 테이블 컬럼이 아니라 상수쪽에 함수를 적용하여 딱 한번만 함수가 실행되게 해야 한다. 레코드가 많을수록 꼭 신경을 ..
실무를 하면서 데이터를 비교해야 할 경우가 굉장히 많은데 가장 간편하게 UNION ALL을 사용하여 비교하는 방법이 있다. UNION ALL은 여러개의 SELECT 문을 합치는 것이고 컬럼 명은 맨 위에있는 SELECT 문으로 통일되며 합쳐질때 데이터 타입이 같아야 한다. [쿼리 만드는법] 1. 먼저 기준이 되는 SELECT문을 만드는데 비교할 데이터가 들어갈 컬럼에는 NULL을 넣어주고 컬럼명을 지어준다. 2. 비교 대상인 SELECT문을 만들어준다. UNION ALL은 컬럼개수가 같아야 하므로 NULL로 임의로 컬럼을 생성해줘야 한다. 3. 2개의 SELECT문을 UNION ALL 해준다. 그러면 아래처럼 데이터가 비교할 데이터가 한 테이블에서 조회가 된다. 4. UNION ALL한 SELECT문을 ..
앱 서비스를 하면서 상대방 컴퓨터에서 접속이 안될때 IP 오픈이 되어있는지 확인을 해야 한다. 그래서 공인 아이피를 먼저 알아야 하는데 찾는 방법은 네이버에 "내 아이피" 라고 검색을 하면 된다. 위 IP주소는 공인아이피이다. 위 공인 아이피의 대역대를 전부 오픈해주고 싶을때는 대역대를 찾아줘야 하는데 whois에서 검색을 해서 대역대를 찾아줄 수 있다. xn--c79as89aj0e29b77z.xn--3e0b707e/ IP대역대는 Net Range와 CIDR로 표시될 수 있는데 AWS는 CIDR로 저장을 해야 한다. 그래서 Net Range로 CIDR을 찾아야 하는데 아래 사이트에서 확인할 수 있다. CIDR을 찾고 인바운드에 저장해주면 정상적으로 앱 서비스를 사용할 수 있다. mxtoolbox.com/..
시스템 운영중 큰 파일처리로 인해서 시스템에러가 발생 하였다. 인데 힙메모리 사이즈가 적어서인데 힙메모리는 서비스가 처음 시작될때 정해진다. 그래서 시스템 시작시 파라미터로 기입해 줘야 한다. 톰캣은 아이콘 우클릭 후 Configre -> Java 탭에서 Initial memory pool과 Maximum memory pool을 기입해 주면 된다. Initial memory pool은 최소 메모리 사이즈 Maximum memory pool은 최대 메모리 사이즈 이다. JavaService는 -install 할때 파라미터로 넣어주면 된다. dll 경로 오른쪽에 기입 해주면 되고 -Xms256m -Xms3072m 를 기입하면 힙메모리 사이즈 최소 256MB, 최대 3G로 세팅 된다. DLL 경로 오른쪽에 -..
데이터베이스와 애플리케이션을 효율적으로 연결하는 커넥션 풀(connection pool) 라이브러리는 웹 애플리케이션에서 필수 요소이다. 톰캣은 tomcat-dbcp.jar 이 케넥션 풀 라이브러리다. tomcat9 에 있는 DBCP는 버전이 2이고. 버전2는 DBCP 속성의 이름이 바꼈다. [DBCP1.x와 DBCP 2.x의속성이름 차이] [DBCP 대표적인 속성과 설명] Tomcat9를 밑 버전을 쓰다가 Tomcat9를 사용하였는데 속성 이름으로 maxActive, maxWait를 사용하여 warning이 발생하였다. 해당 속성이 적용이 안되고 maxTotal의 기본값 8로 세팅이 돼 버렸다. 많은 사용자가 들어와야 하는데 8명만 들어올수 있으니 문제가 발생하였다. 16-Nov-2020 15:29:4..
지원되지 않는 문자집합 에러 원인과 해결방법 19C 업그레이드를 하고 나서 기존 서버에서 사용하던 툴을 실행하려고 했는데 orai18n.jar 가 필요하다는 에러가 나왔다. 이 에러 원인은 DB에 세팅된 인코딩 방식이 JDBC에서 지원하지 않는 인코딩 방식이라 에러가 나는 것이다. 즉 이 에러는 JDBC에서 지원하는 인코딩셋을 사용하냐 안하냐에 따라서 에러가 발생하는 것이다. ojdbc8.jar를 사용했고 DB인코딩 세팅이 K016MSWIN949인데 이건 JDBC에서 지원하지 않는 인코딩 방식이라 에러가 발생한다. 다른 서버에서는 UTF8AL32UTF8 이여서 에러가 발생하지 않는다. 이는 ojdbc8.jar에서 지원하는 인코딩 이여서 그런것이다. 에러 해결방법은 단순하게 orai18n.jar를 추가하면..
T2 인스턴스의 CPU크레딧이란 T2 인스턴스는 기본으로 주어지는 CPU성능과 더불어 여러가지 성능을 버스트 해서 순간적으로 성능이 확장된다. 다만 성능을 버스트 할때 CPU크레딧이 쌓이는데 T2 유형마다 주어진 CPU크레딧 수량이 있는데 그 수량을 다 사용되면 성능이 버스트 되지 않는다. [인스턴스 유형마다 주어지는 크레딧양] CPU크레딧은 시간마다 주어지는데 이것은 누적이 되고 누적가능한 CPU크레딧 수량을 넘어서면 더이상 누적 되지 않는다. 누적된 CPU크레딧은 인스턴스를 중지 시키면 초기화 된다. 만약 주어진 크레딧이 상관없이 성능을 계속해서 버스트 하고 싶다면 크레딧 사양을 무제한(Unlimited) 모드로 바꿔야 한다. 무제한 모드로 변경하는 방법은 EC2 인스턴스에서 수정화면에서 할 수 있다..
RDS Oralce은 그냥 쿼리문으로 session을 kill 하려고 했을 때 ORA-01031 권한 문제로 할 수 없다. RDS는 그래서 PL/SQL문으로 session kill을 해야 한다. [PL/SQL 스크립트] begin rdsadmin.rdsadmin_util.kill( sid => sid, serial => serial_number); end; [사용] 상태가 KILLED면 이건 아직 완전히 세션이 Kill된것이 아니므로 10분정도 기다려야 한다. 만약에 즉시 kill 하고 싶다면 serial 밑에 method => 'IMMEDIATE' 를 추가 하면 된다. docs.aws.amazon.com/ko_kr/AmazonRDS/latest/UserGuide/Appendix.Oracle.Common..
AWS 이용 중 AWS에 문의를 해야 할 때 문의 하는 방법은 간단하다. 콘솔 오른쪽 위세 지원 화살표를 클릭하고 지원센터로 들어가서 하면 된다. [지원센터 화면] 지원센터 화면에서 Create case 주황색 박스 버튼을 클릭하여 문의 할수가 있는데 문제는 Support Plan이 Basic이면 문의 할수가 없다. 한단계 이상 업그레이드를 해야 지원이 가능하다. 업그레이드 하는 방법은 왼쪽 메뉴 Support plan 오른쪽 파란색 글씨 change버튼을 클릭하여 넘어간 화면에서 업그레이드를 할 수 있다. 난 이미 Developer로 change해서 New Plan에 Developer이 없다. 가격은 Developer은 월 $29 Business 월 $100 Enterprise 월 $15000 기본적인..
EC2 인스턴스가 문제가 생길 때 다른 인스턴스로 데이터를 옮기는 방법은 인스턴스의 이미지를 생성하고 이 이미지로 똑같은 인스턴스를 생성하는 것이다. 인스턴스를 똑같이 하나 만들려면 인스턴스를 생성할 수 있는 정보와 그 인스턴스 안에 들어있던 데이터 2개가 있어야 한다. 이미지는 시스템 환경구성 이고, 데이터가 있는 저장공간을 볼륨이라 한다. 볼륨을 복사 하는걸 스냅샷 이라 한다. 먼저 아래는 이미지 생성방법이다. 이미지 생성과정 1. 이미지 생성할 인스턴스를 종료 2. 연결된 볼륨의 스냅샷을 가져옴 3. AMI를 생성하고 등록한 다음 인스턴스를 재부팅 만약 재부팅 안함에 체크를 함녀 이미지 파일의 무결성을 보장할 수 없다. 이미지 생성 버튼을 클릭하면 아래와 같이 이미지가 생성된다. 만들어지는 상태는 ..