테스트 환경을 구축해놓고 공부하는 기타 다른 블로그들을 보며 일주일간 삽질을 했기에..ㅠㅠ 이번 기회에 정리.
이번에 다시 느낀 건 역시 블로그 보단 공식 사이트가 진리다...

신규 업무를 위해 신규 DB서버 구축이 필요했는데, SQL Server를 사용해야 함.

요구사항
1. 본점 Oracle DB 연결(Linked Server)
2. 매일 정해진 시간에 자동으로 00 발송
3. SQL Server 2019 사용

DB Link 전 필수사항
1. Oracle 11g 설치(DB instance는 불필요해서 software만 설치)
2. ODBC 설치 후 시스템 DSN 생성(불필요한 것 같음. 현재 Linked Server로 연결된 이름은 모두 TNS이름이랑 맞췄고 ODBC로 설정된 이름은 다름, 기타 블로그에서 만들라고 해서 만들었으나 추후 확인)
3. tnsnames.ora 파일 설정

DB Link 설정
1. Server Objects(서버개체) 마우스 우클릭 - New - Linked Server... 선택
2. Linked Server 설정

OK 버튼을 누르면 자동으로 연결 테스트가 진행됨

3. 연결 테스트 성공 후 DB 셀렉트 테스트
select * from openquery(DB Link명, 'select 1 from dual'); 
Oracle 연결 테스트이기 때문에 위처럼 테스트를 진행
Openquery를 사용하지 않고 스키마처럼 .으로 진행하는 방식도 있으나 성능이 떨어짐(테이블의 모든 데이터를 가져온 후 조건 필터링하기 때문) openquery는 링크된 db에서 필터링 후 데이터 가져옴

'데이터베이스' 카테고리의 다른 글

Oracle ~~초과 ~~ 미만 구하기  (0) 2024.01.10
SQL Server Job 스케줄러 생성  (0) 2023.12.26
SQL Server 프로시저 만들기  (0) 2023.12.26
sql Developer 필수 정보 및 환경설정  (0) 2021.08.12
MySql SqlDeveloper 연결  (0) 2021.08.07
Posted by 知彼知己百戰不殆
,

급 궁금해져서 찾아본 String 클래스의 주소값 확인 방법

System.identityHashCode("~~~~");
위 메소드를 println 해보면 String도 객체 주소값을 찍어볼 수 있다.

 

Posted by 知彼知己百戰不殆
,

Thread 기초

언어/JAVA 2023. 12. 17. 10:44

1. Thread Class와 Runnable Interface 구현 2가지 방법 존재
  - Thread Class 상속 시 다른 Class 상속 불가
  - Runnable Interface 구현 시 다른 Class 상속 가능

Thread 클래스 상속 (출처:Java 18 API docs)
Runnable Interface 구현 시(출처:Java 18 API docs)


출처 : https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/lang/Thread.html

 

Thread (Java SE 18 & JDK 18)

All Implemented Interfaces: Runnable Direct Known Subclasses: ForkJoinWorkerThread A thread is a thread of execution in a program. The Java Virtual Machine allows an application to have multiple threads of execution running concurrently. Every thread has a

docs.oracle.com

2. start()와 run() 호출 차이
  - thread의 run()을 호출하는 것은 class에 선언된 메서드를 호출하는 것
  - start()를 호출하는 것은 새로운 thread가 작업을 실행하는데 필요한 call stack을 생성하고, run()을 호출해서 생성된 call stack에 run()이 첫 번째로 올라가게 됨

테스트용 thread 클래스
run() 메소드 호출(단순 메소드 호출) 시 call stack의 첫 메소드가 main메소드
start() 메소드 호출 시 main 메소드 thread에는 영향을 미치지 않음

3. 데몬 스레드(daemon thread)
  - 일반 스레드의 작업을 돕는 보저 역할
  - 일반 스레드가 종료되면 데몬 스레드는 강제 종료
  - "thread변수명".start(); 를 호출하기 전 "thread변수명".setDaemon(boolean 값); 을 해야 데몬 스레드로 지정

4. sleep() 사용법(?)
  - "thread변수명".sleep(~~); 으로 선언해도 되나 sleep() 메소드는 static 메소드이기 때문에 내가 지정한 스레드가 현재 실행중인 thread가 아니라면 main thread가 영향을 받음
  - Thread.sleep(); 으로 호출해야 의미 전달에 혼선이 없음

Posted by 知彼知己百戰不殆
,