반응형

오라클에서 Insert 할 때 조건에 부합할때만 Insert 할 수 있는 방법을 찾다가

 

제가 한 방식을 공유드리려고 합니다.

 

Test 테이블에는 Number(PK), Timestamp 컬럼만 존재

 

Insert 하려는 데이터의 Timestamp 값이 더 클때만 Insert를 수행하는 DML 작성.


INSERT INTO TEST_TABLE (ID,  MDATE)
--    INSERT 하려는 값을 DUAL 테이블을 이용하여 Select
SELECT 1000, '2023-08-23 13:00:00' FROM DUAL
--    DUAL 테이블을 이용한 Time Stamp 의 값을 where 절에 적용
WHERE '2023-08-23 13:00:00' > (SELECT MDATE FROM HS_TEST01 WHERE ID = 1);

 

위와 같이 작성하였으며 WHERE 절에 해당하는 조건값을 잘 조절해주신다면 상황에 맞게 Insert 가 가능합니다.

반응형
반응형

 

환경 변수는 운영체제에서 환경변수 명,  값으로 관리되는 문자열 정보이며 운영체제가 설치될 때 기본적인 내용이 설정되지만, 사용자가 직접 설정하거나(개발환경 초기 세팅시 자바환경 변수 등록 등) 응용프로그램이 설치될 때 자동적으로 변경되기도 합니다.

자바에서는 OS의 환경변수의 값을 System.getenv( ) 라는 메서드를 통해서 불러올 수 있습니다.

 

환경 변수 읽기 System.getenv( )

/* 해당 OS에 등록된 모든 환경변수 값 출력 */
System.out.println("전체 OS 환경변수 값 : " + System.getenv());

/* 해당 OS에 등록된  ORACLE_HOME의 환경변수 값 출력 */
System.out.println("OS 환경변수 ORACLE_HOME 값: " + System.getenv("ORACLE_HOME"));

/* 해당 OS에 등록된  ORACLE_HOME의 환경변수 + tnsnames.ora 파일명 출력 */
System.out.println("OS 환경변수 ORACLE_HOME 의 값: " + System.getenv("ORACLE_HOME") + File.separator + "network" + File.separator + "admin" + File.separator + "tnsnames.ora");

이처럼 자바에서 OS의 환경 변수의 값이 필요할 경우 System.getenv( )메소드를 사용하면 됩니다. 매개 값() 으로 환경 변수 명을 입력해주면 해당 환경 변수의 이름이 리턴됩니다. 

OS별로 설치 된 프로그램, 직접 추가한 환경변수 등으로 인해 출력되는 환경변수는 다를 수 있습니다.

반응형
반응형

오라클 DB 중지 시의 명령은 shutdown immediate 입니다.. Oracle 계정으로 접속하여 해당 명령어 수행 시

Failed to parse time specification: immediate 와 같은 에러를 발생하는 경우가 있는데요....! 

 

이 경우는 DB접속 안하고 OS상에서 명령어를 수행 시 발생하는 에러입니다...

 

저도 정신줄 놓고 몇분동안 왜이러지 ...왜이러지... 하다가 알아차린...^^. ....  sqlplus 로 접속해서 명령 날립시다! 

 

업무보시면서 힘드시겠지만 이글 보시게된다면 조금만 화이팅입니다 ^^

반응형
반응형

오라클의 아카이브 로그 모드 환경에서 아카이브 로그 공간이 부족하여 장애가 빈번하게 발생합니다.

이에따라  아카이브 저장공간이 Full 차지않게 아카이브 로그를 주기적으로 삭제해주어야 하는데 아래의 쿼리를 통해 백업 주기 설정에 도움이 될 수 있는 쿼리입니다.

 

아래의 쿼리는 특정날짜 및 시간 이후 생성되는 아카이브 생성량을 분당 생성량으로 조회하는 방법입니다.

select trunc(COMPLETION_TIME,'MI') Mi,thread# , round(sum(BLOCKS*BLOCK_SIZE)/1024/1024) MB, count(*) Archives
from v$archived_log
where next_time >= to_date('2022/01/01 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
group by trunc(COMPLETION_TIME,'MI'),thread#  order by 1 ;

 

아래의 쿼리는 특정날짜 및 시간 이후 생성되는 아카이브 생성량을 시간당 생성량으로 조회하는 방법입니다. THREAD#은 RAC 환경일 경우 그대로 사용하시면 되고 불필요시 제외하여 조회해주시면 됩니다.

select trunc(COMPLETION_TIME,'HH') HH,thread# , round(sum(BLOCKS*BLOCK_SIZE)/1024/1024) MB, count(*) Archives 
from v$archived_log
where next_time >= to_date('2022/00/00 00:00:00', 'YYYY/MM/DD HH24:MI:SS')
group by trunc(COMPLETION_TIME,'HH'),thread# 
order by 1 ;

 

반응형
반응형

리눅스 서버 환경에서 강제로 OutOfMemory를 발생시키는 테스트를 진행하게 되어서 정리 및 도움이 될까하여 포스팅합니다. 

 

package memup;

import java.util.ArrayList;
import java.util.List;

public class sender {

	public static void main(String[] args) {
		
		 List<byte[]> list = new ArrayList<>(); // 큰 배열 선언
	       
	        while (true) {
	        	try {
		            byte[] tes = new byte[1048576]; //1MB 를 위에서 선언한 배열에 무한 add
		            list.add(tes);
	        	}catch(Exception e){
	        		e.printStackTrace();
	        	}

	}

	}
}

 

아래는 리눅스환경에서 실행할 때 Java 옵션입니다. 

 

 -Xms6g -Xmx16g -Xss1024k -XX:+UseParallelGC -XX:MetaspaceSize=32m -XX:MaxMetaspaceSize=64m -XX:-UseAdaptiveSizePolicy -XX:+DisableExplicitGC -XX:ParallelGCThreads=4 -verbose:gc
반응형
반응형

현재 자바 JMS 공부를 하던도중 이클립스에서 정상적으로 실행되는것을 확인 후 빌드하여 리눅스에 업로드 후 실행하였는데... java.lang.NoClassDefFoundError 발생 아무리 눈을 씻고 찾아봐도 이클립스에서 정상적으로 실행되고 코드에도 문제가 없었다.  구글링 해본결과 classpath에 weblogic.jar 을 추가해보는 등  여러가지 방법이 있었지만 나의 경우는 사실 정말 간단했다.. 

 

CLASSPATH에 activemq-all-5.11.1.jar 를 추가안하고 그냥 코드만 실행한것... 

 

몇시간동안 삽질했지만 이유를 알고 정말 해탈했던.. 혹시나 다른분들도 나와같은 실수로 인해 위와같은 에러가 발생하고있다면 도움이 되었으면... 

 

 

반응형
반응형

리눅스 환경에서 해당 포트가 사용중인지 확인할 때 주로 netstat 명령어를 사용하게 됩니다. Vmware 나 가상환경에서 리눅스 설치 후 netstat 명령어가 수행되지 않을 때 설치하는 방법입니다. 

 

에러 발생


netstat -a 

-bash: netstat: command not found

 

Netstat 설치 


yum install -y net-tools

 

net-tools 설치 후 netstat로 조회시 정상적으로 수행.

반응형
반응형

패키지 및 테스트 파일의 압축파일을 서버에 업로드하여 테스트해보려고 할 때, 이 압축파일을 해제하거나 혹은 압축하는법에 대해서 포스팅해보려고 합니다. 리눅스 -> 윈도우 혹은 윈도우 -> 리눅스간 파일(압축파일)을 옮기는 일이 생각보다 많이 발생하게 되는데 이럴때 참고하시면 될 거 같습니다.

 

.tar로 압축하는 방법  

기본형식
tar -cvf 압축파일명.tar 압축을 진행 할 폴더명

Ex) Target이라는 폴더를 tartest.tar로 압축 
tar -cvf tartest.tar Target

Ex) 3개의 txt 파일을 test2.tar로 압축
tar -cvf test2.tar test1.txt test2.txt test3.txt

tar 파일 압축 해제 방법

tar -xvf 파일명.tar

Ex) 현재위치에 존재하는 tartest.tar 파일을 압축 해제
tar -xvf tartest.tar

다른 tar 사용법

Ex) tar 파일의 내용 확인
tar -tvf tartest.tar

Ex) gzip으로 압축된 tar 아카이브를 현재 디렉토리에 풀기
tar -zxvf tartest.tar.gz 

Ex) tartest 디렉토리를 tar로 묶고 gzip으로 압축하기
tar -zcvf test.tar.gz tartest

 

gzip 사용방법 

gzip 은 보통  tar 로 묶은 파일을 한번 더 압축하는 형식으로 많이 사용됩니다. 

 

gzip 으로 압축하기

gzip 옵션 파일명 

Ex) testfile.log 을 압축 
gzip testfile.log

Ex) tartest.tar 을 tartest.tar.gz 으로 압축
gzip tartest.tar

gz 파일 압축 해제

gzip -d 압축해제할 파일명

or

gunzip 압축해제할 파일명

 

zip 파일 

주로 윈도우환경에서 많이 볼 수 있는 압축형태의 파일입니다. 

 

zip 파일로 압축하기 

zip 압축될 파일명 압축할 파일명

Ex) test.txt 파일을 test.zip 으로 압축 
zip test.zip test.txt

Ex) 3개의 파일을 test.zip 으로 압축
zip test.zip test.txt test1.txt test2.txt

zip 파일 압축해제 

unzip 파일명

Ex) unzip test.zip
반응형
반응형

리눅스에서 작업할때 경로이동 폴더생성 등 모든 작업들은 커맨드를 통하여 작업하게 됩니다. 이 작업들이 매우 불편하고 사용자에게 피로감까지 더해줄 수 있죠. 이 불편함을 해소하기위해 alias를 등록하여 사용하게되면 Depth가 매우 깊은 폴더경로 이동같은 작업을 alias 에 등록해서 작업하면 보다 효율적으로 작업할 수 있습니다.

 

alias는 별칭이라는 단어의 뜻 그 자체로 사용자가 입력하는 명령어를 별칭으로 등록하여 수행할 수 있게 됩니다.

 

보통 업무하실때 한 계정에서 업무를 수행하시게 됩니다. 그 계정의 .bashrc 혹은 bash_profile 파일에 시스템 환경변수에 등록하여 영구적으로 적용해 사용하시는걸 추천드립니다.

 

.bashrc 에 alias 등록 

pwd (oralce 계정의 home디렉토리에서 환경변수 등록)
/home/oracle

vi .bashrc

alias oracle='cd /oracle/database/product/12.2.0.1/log' 

입력후 :wq 로 저장 및 터미널에서  . .bashrc 명령어로 alias 적용

등록된 alias 확인 

$ alias 

아래처럼 위에서 등록한 oracle alias 확인 
alias oracle='cd /oracle/database/product/12.2.0.1/log'

$ oracle

pwd
/oracle/database/product/12.2.0.1/log

정상적으로 경로 이동 확인

위 처럼 환경변수 파일에 등록해서 사용하시면 보다 편하게 업무 및 명령어를 수행할 수 있습니다.

반응형
반응형

 

1. Grep

파일 혹은 프로세스들 중 특정 문자열을 찾는 명령어이다. 해당 문자열이 포함되어있는 파일, 프로세스의 라인을 화면에 출력 해준다.

 

1-1 사용법 

 

grep [옵션] '정규식 or 원하는 문자열' '해당 파일'

 

예시 : test_file.log 라는 파일에서 '2022-04-12 14:22' 문자열을 찾는다.

grep '2022-04-12 14:22:' test_file.log

2022-04-12 14:22:01 [DEBUG] #############################################################

예시 : 현재 프로세스 중 java 로 시작하는 프로세스 찾기

ps -ef | grep java

예시 : 여러개 파일에서 'fail' 문자열 찾기

grep 'fail' linux.log linux2.log

예시 : 현재 위치에서 모든 파일에 대해서 'fail' 문자열을 찾기

grep 'fail' *

 

반응형

+ Recent posts