본문 바로가기
IT

오라클 타임스텐 DBMS Client/Server 연결하기

by eddy's warehouse 2024. 4. 4.

오라클 타임스텐은 direct connection이라는 특징을 제공해서 로컬 서버에서 동작하는 애플리케이션들이 빠르게 접속할 수 있도록 합니다. 그러나, 요즘에는 Client/Server로 동작하는 경우가 더 많으므로 클라이언트 애플리케이션이 접속하는 방법을 알아보려고 합니다.

Oracle TimesTen Client/Server 구성 개요 (Configuration Overview)

클라이언트 어플리케이션이 타임스텐 데이터베이스에 연결하기 전에 사용자는 원하는 타임스텐 데이터베이스를 고유하게 식별할 수 있도록 클라이언트 DSN, 서버 DSN을 구성해야 합니다. 그리고 logical server name은 선택적으로 구성할 수 있습니다.

 

오라클 타임스텐 클라이언트/서버 접속 아키텍처

 

클라이언트 애플리케이션은 연결을 시작할 때 클라이언트 DSN을 참조합니다. 다음 세부 정보를 통해 연결 요청이 해결되면 의도한 타임스텐 데이터베이스에 연결할 수 있습니다:

클라이언트 DSN은 서버 호스트 이름(논리적 서버 이름:logical server name 또는 실제 서버 시스템 이름)과 서버에서 TimesTen 데이터베이스를 식별하는 서버 DSN으로 사용자 odbc.ini 파일 또는 시스템 sys.odbc.ini 파일에 구성됩니다.

논리적 서버 이름은 클라이언트에서 설정해도 되고 안 해도 되는 옵션 항목입니다. 만약 사용 한다면 타임스텐 데이터베이스가 설치된 서버 호스트 이름을 지정합니다. 서버 호스트 이름을 숨기거나 단순화하려는 경우에 사용됩니다.

( 참고로 공유 메모리 IPC 또는 UNIX 도메인 소켓을 사용할 때는 논리적 서버 이름을 사용해야 하지만, 일반적으로 TCP를 사용 시에는 사용하지 않아도 됩니다.)


서버 DSN은 타임스텐 데이터베이스 이름과 해당 연결 속성을 사용하여 시스템 sys.odbc.ini 파일에 구성됩니다. 연결 속성은 타임스텐 데이터베이스가 로드 및 구성되는 방법과 데이터베이스에 대한 연결을 제어 또는 관리하는 방법을 지정합니다.

따라서 이러한 속성이 올바르게 구성되면 클라이언트 애플리케이션은 클라이언트 DSN을 사용하여 타임스텐 데이터베이스를 찾아 연결할 수 있습니다. 클라이언트 DSN은 서버 시스템과 서버 DSN을 정의합니다. 서버 DSN은 해당 서버의 타임스텐 데이터베이스, 데이터베이스 로드 방법, 연결 관리 방법을 차례로 지정합니다.

 

Client Oracle TimesTen 설치하기

클라이언트 애플리케이션이 동작하는 시스템에 타임스텐 클라이언트를 설치하고 구성해야합니다. 이 시스템을 클라이언트 시스템이라고 합니다.

타임스텐 클라이언트를 설치해야합니다. 타임스텐 클라이언트 설치를 하려면 다음과 같은 절차대로 하면 됩니다.

  1. 적절한 배포 파일을 원하는 접근 가능한 위치에 배치합니다.
  2. 설치할 디렉터리를 만듭니다.
  3. 설치할 디렉터리를 원하는 디렉터리로 변경합니다.
  4. 해당 디렉터리로 배포 파일을 압축 해제합니다.

아래에는 ttInstall 이라는 디렉터리에 타임스텐 설치 파일 압축을 해제하는 것을 보여줍니다.

실제로 timesten 다운로드 페이지에는 client용 파일이 존재하지 않고 하나의 파일만 존재합니다. 해당 파일로 설치를 하면 됩니다.

~$ mkdir ttInstall
~$ cd ttInstall/
~/ttInstall$ ls
timesten2211220.server.linux8664.zip
~/ttInstall$ unzip timesten2211220.server.linux8664.zip
Archive:  timesten2211220.server.linux8664.zip
   creating: tt22.1.1.22.0/
   creating: tt22.1.1.22.0/oraclescripts/
  inflating: tt22.1.1.22.0/oraclescripts/checkAdminPrivileges.sql
  inflating: tt22.1.1.22.0/oraclescripts/ttCacheADGSiteFailover.sql
  inflating: tt22.1.1.22.0/oraclescripts/README.TXT
....
  tt22.1.1.22.0/bin/ttcapture -> ttCapture
  tt22.1.1.22.0/PERL/perl -> bin/perl

~/ttInstall$ ls
timesten2211220.server.linux8664.zip  tt22.1.1.22.0
~/ttInstall$ cd tt22.1.1.22.0/
~/ttInstall/tt22.1.1.22.0$ ls
3rdparty  PERL  README.html  bin  grid  include  info  kubernetes  lib  network  nls  oraclescripts  plsql  startup  support  ttoracle_home

 

저의 경우 테스트용으로 잠시 설치하고 간단한 테스트 후에 사용하지 않는데, 실제로 리눅스에서 사용하려면 다음의 xe 버전을 이용해서 설치하시면 일부 제한을 가진 타임스텐 버전을 무료로 사용하실 수 있습니다.

아래 링크는 로그인이 필요없이 바로 다운로드하실 수 있습니다.

Oracle TimesTen In-Memory Databse Express Edition (XE) Downloads

 

타임스텐 클라이언트 인스턴스를 생성하기

인스턴스 관리자가 배포의 압축을 풀고 설치를 생성한 후 다음 단계는 타임스텐 클라이언트 인스턴스를 생성하는 것입니다. 이를 위해 install_dir/tt22.1.1.10.0/bin 디렉터리에 있는 ttInstanceCreate 유틸리티를 이용합니다.

 

대화형으로 클라이언트 인스턴스를 생성하기 위해 ttInstanceCreate를 사용합니다.

-help 옵션을 통해서 사용법을 확인할 수 있습니다. client 설치를 위해서는 -clientonly 옵션을 사용합니다.

~/ttInstall/tt22.1.1.22.0/bin$ ./ttInstanceCreate -help

ttInstanceCreate - Creates a new instance

Usage:

  ttInstanceCreate [common_options] [server_options] [classic_options]

    Creates a classic instance

  ttInstanceCreate [common_options] [server_options] -grid

    Creates a Grid instance

  ttInstanceCreate [common_options] -clientonly

    Creates a Client-Only instance

common_options:

  -name <instance_name> Specifies the target instance name
  -location <path>      Specifies the target instance directory
  -force                Removes any existing instance in <location> without confirmation
  -record <file>        Creates instance and records prompt responses to the given file
  -batch <file>         Reads answers for prompted questions from the given file
  -strict               Prevents instance creation on unsupported platforms
  -tnsadmin <value>     Specifies a value for TNS_ADMIN
  -verbose              Displays extra information
  -help|h               Displays this help message and exits
  -clientonly           Creates a client instance
  -ssl_fips_140         Enables SSL (TLS) FIPS encryption for both client and server
  -db_fips_140          Enables FIPS symmetric encryption (TDE) for both client and server

server_options:

  -nostart              Do not start the daemon (even in interactive mode)
  -daemonport <port>    The port in which the daemon of the created instance will listen
  -csport <port>        The port in which the C/S server of the created instance will listen
  -systemd              Enable systemd
  -serverencryption <requirement>   Whether C/S traffic is encrypted
  -serverciphersuites <suites>      Cipher suites used for server encryption

classic_options:

  -start                Starts the daemon after instance creation (default when running this tool in interactive mode)


아래 예에서는 ttInstanceCreate 유틸리티를 대화형으로 실행하여 클라이언트 인스턴스를 만듭니다. 설치 디렉터리에서 유틸리티를 실행합니다. 사용자 입력은 굵게 표시됩니다.

저의 경우 oracle 19c가 설치되어있어서 해당 디렉터리의 TNS_ADMIN 설정을 사용하겠냐는 질문이 있어서 yes 하였습니다.

$ ./ttInstanceCreate --clientonly

NOTE: Each TimesTen instance is identified by a unique name.
      The instance name must be a non-null alphanumeric string, not longer
      than 255 characters.

Please choose an instance name for this installation? [ tt221 ] ttclient
Instance name will be 'ttclient'.
Is this correct? [ yes ] yes
Where would you like to install the ttclient instance of TimesTen? [ /home/test ] /home/test/ttInstall/ttclient
The directory /home/test/ttInstall/ttclient does not exist.
Do you want to create it? [ yes ] yes
Creating instance in /home/test/ttInstall/ttclient/ttclient ...

      TNS_ADMIN exists in your environment and is set to :
      /home/ora19c/orahome/network/admin

Would you like to use this TNS_ADMIN setting? [ yes ] yes

TNS_ADMIN will be set to /home/ora19c/orahome/network/admin
You can change TNS_ADMIN later by running <install_dir>/bin/ttInstanceModify.

The 22.1 Release Notes are located here :
  '/home/test/ttInstall/tt22.1.1.22.0/README.html'

Instance created successfully.

 

인스턴스가 생성되면 해당 디렉터리에 타임스텐 클라이언트 인스턴스 관련 파일들이 생성됩니다.

위에서 생성한 디렉터리가 인스턴스 이름으로 하나 더 들어갑니다. 참고하세요.

그리고, 여기에서 중요한 것은 ttenv 또는 ttenv.sh 입니다. 이 파일을 source 하거나 . 으로 환경변수 설정을 해줘야 해당 타임스텐 클라이언트 인스턴스를 사용할 수 있습니다.

~/ttInstall/ttclient/ttclient$ ls
bin  conf  diag  info  install  plsql
~/ttInstall/ttclient/ttclient$ ls bin/
README.TXT  ttCapture       ttInstanceModify  ttSchemaCS  ttThunk  ttVersion   ttcapture       ttenv      ttenv.sh          ttisqlcs    ttstatscs  ttversion
ttBulkCpCS  ttClientImport  ttIsqlCS          ttStatsCS   ttUser   ttbulkcpcs  ttclientimport  ttenv.csh  ttinstancemodify  ttschemacs  ttuser

 

Linux 또는 UNIX 시스템에서 TimesTen 서버용 서버 DSN 정의하기

 

서버 DSN은 클라이언트/서버 연결로 액세스하는 타임스텐 데이터베이스를 식별합니다.

서버 DSN은 타임스텐 서버에서 액세스하는 데이터베이스를 식별하는 데 사용되므로, 데이터 관리자 DSN과 동일한 연결 속성을 사용하여 서버 DSN을 구성할 수 있습니다. 또한 서버 DSN 사양 내에서만 허용되는 연결 속성이 있습니다. 이러한 속성을 사용하면 단일 서버에 대한 여러 클라이언트/서버 연결을 지정할 수 있습니다.

일부 연결 속성은 TimesTen 데몬 옵션 파일(timesten.conf)에서 구성할 수 있습니다. 서버 DSN과 데몬 옵션 파일 모두에 동일한 연결 속성을 설정한 경우 서버 DSN의 연결 속성 값이 우선합니다.

 

서버 DSN은 시스템 DSN으로 정의되어야 하며 데이터 관리자 DSN과 동일한 구성 형식 및 속성을 가져야 합니다.

TimesTen Classic을 사용하면 사용자 odbc.ini 파일 또는 시스템 sys.odbc.ini 파일을 생성하거나 편집하여 각 시스템 DSN을 생성합니다. 타임스텐 서버가 실행되는 동안 서버 DSN을 추가하거나 구성할 수 있습니다.

서버 DSN은 $TIMESTEN_HOME 환경변수 아래의 conf/sys.odbc.ini 파일에 다음과 같이 지정할 수 있습니다.

ODBC Data Sources 섹션에서는 DSN과 해당 DSN에 해당하는 드라이버 설명이 들어갑니다.

그리고, ODBC Data Sources 섹션에 있는 DSN에 대해서 DSN의 스펙에 해당하는 값들을 나열하도록 되어있습니다.

이 값들 중 Driver와 DataStore, DatabaseCharacterSet 그리고, UID, PWD 정도가 가장 필수적인 항목이라고 보시면 됩니다.

[ODBC Data Sources]
tpcc=TimesTen 22.1 Driver

[tpcc]
Driver=/home/timesten/tt_instances/ttinstance/install/lib/libtten.so
DataStore=/home/timesten/tt_instances/ttinstance/db/tpcc
DatabaseCharacterSet=KO16MSWIN949
UID=tpcc
PWD=tpcc

 

위에 설명드린 항목 이외의 더 자세한 내용은 아래 링크에 있는 타임스텐 클래식용 Linux 및 UNIX에서 DSN 만들기에서 보실 수 있습니다.

Creating a DSN on Linux and UNIX for TimesTen Classic.

 

기본적으로 TimesTen은 하위 프로세스당 서버에 대한 연결을 하나만 생성합니다. 그러나 연결 속성(아래 설명)을 사용하거나 타임스텐 서버에 대한 다중 연결 지정하에 설명된 대로 timesten.conf 파일에서 타임스텐 데몬 속성을 설정하여 단일 타임스텐 서버에 대한 여러 클라이언트/서버 연결을 지정할 수 있습니다. 서버 연결 속성과 관련 timesten.conf 데몬 속성을 모두 설정한 경우 서버 연결 속성의 값이 우선합니다.

 

다중연결 서버 지정하기

단일 서버 프로세스가 데이터베이스에 대한 여러 클라이언트 연결을 서비스할 수 있도록 자식 서버 프로세스를 멀티스레드 모드로 실행하려면 timesten.conf 파일에 max_conns_per_server 속성을 추가합니다.

max_conns_per_server=NumberOfClientConnections

 

자식 서버 프로세스 간 연결 분배 구성하기
라운드 로빈 연결 배포를 사용할 특정 서버 DSN의 자식 서버 프로세스 수를 지정하려면(max_conns_per_server > 1인 경우), timesten.conf 파일에 servers_per_dsn 속성을 추가합니다.

servers_per_dsn=NumberOfChildServerProcesses

 

기본적으로(value=1), 서버 DSN에 대한 첫 번째 max_conns_per_server 클라이언트 연결은 단일 하위 서버 프로세스에 할당되고, 다음 max_conns_per_server 연결은 두 번째 하위 서버 프로세스에 할당되는 식으로 할당됩니다. 서버 프로세스에 대한 연결이 분산되는 방식을 제어하기 위해 servers_per_dsn 및 max_conns_per_server 속성이 서로 어떻게 관련되는지에 대한 자세한 설명은 Linux 또는 UNIX 시스템에서 TimesTen 서버용 서버 DSN 정의하기를 참조하세요.

 

자식 서버 프로세스의 스레드 스택 크기 구성하기
각 클라이언트 연결에 대한 자식 서버 프로세스 스레드 스택의 크기를 설정하려면 timesten.conf 파일에 server_stack_size 속성을 추가합니다.

server_stack_size=ThreadStackSize

 

앞서 설명드린 몇 가지 속성 중 저는 다음과 같이 추가하였습니다.

저의 경우 테스트 세션으로 동시에 128개 세션을 접속하지는 않을 계획이기 때문에 다음과 같이 설정하였습니다.

# TimesTen Instance Configuration File
# Created by ttInstanceCreate
# Commented values are default values
hostname=altibase-KVM
timesten_release=22.1.1
instance_name=ttinstance
admin_user=timesten
admin_uid=1007
group_name=timesten
instance_guid=16CC43C4-55D2-4C17-A18E-397EF2040B89
tns_admin=
daemon_port=6624
server_port=6625
verbose=1
ssl_fips_140=0
db_fips_140=0
max_conns_per_server=128
server_per_dsn=128

 

이러한 속성은 처음 연결할 때 읽습니다. 서버 설정 변경 사항은 서버를 다시 시작할 때까지 적용되지 않습니다.
서버를 다시 시작하려면 다음 명령을 사용합니다.

ttDaemonAdmin -restartserver

~/tt_instances/ttinstance/conf$ ttDaemonAdmin -restartserver
TimesTen Server stopped.
TimesTen Server started.

 

클라이언트 DSN 설정

클라이언트 DSN은 원격 데이터베이스를 지정하고 타임스텐 클라이언트를 사용합니다.

클라이언트 DSN은 사용자 또는 시스템 DSN으로 정의할 수 있습니다. 클라이언트 DSN은 호스트 이름, DSN 쌍을 지정하여 타임스텐 데이터베이스를 간접적으로 참조하며, 여기서 호스트 이름은 타임스텐 서버가 실행되는 서버 시스템을 나타내고 DSN은 해당 호스트에 정의된 서버 DSN을 참조합니다. 이는 클라이언트 DSN 연결 속성 내에서 구성됩니다.

타임스텐 클라이언트 연결 속성(connection attributes)에 대한 전체 설명은 다음과 같습니다.

타임스텐 클라이언트 연결 속성 전체 리스트

 

클라이언트가 존재하는 Linux 및 UNIX에서는 사용자 DSN의 경우 user odbc.ini 파일을 편집하여 클라이언트 DSN을 정의하거나 시스템 DSN의 경우 sys.odbc.ini 파일을 편집하여 클라이언트 DSN을 정의할 수 있습니다.

 

클라이언트 DSN은 odbc.ini 파일의 ODBC 데이터 소스 섹션에서 클라이언트 DSN에 대한 항목을 추가합니다. 클라이언트 DSN은 다음과 같은 속성을 가진 TimesTen 데이터베이스의 위치를 지정합니다.

  • 연결에 사용할 TimesTen ODBC 클라이언트 드라이버.
  • 데이터베이스의 서버(및 기본 포트 번호를 사용하지 않으려는 경우 포트 번호)는 TTC_Server 속성에 지정됩니다.
  • 데이터베이스를 지정하는 서버 DSN은 TTC_Server_DSN 속성에 지정됩니다.

예를 들어 다음과 같이 지정할 수 있습니다.

[ODBC Data Sources]
tpccCS=TimesTen 22.1 Client Driver

[tpccCS]
TTC_SERVER=test-KVM
TTC_SERVER_DSN=tpcc

 

위와 같이 설정하고 ttIsqlCS를 통해서 CS 환경에서 접속해 보았더니, 인증 에러가 발생합니다.

그래서, UID와 PWD를 입력한 후 재 접속하여 접속이 성공하는 것을 확인하였습니다.

test~/ttInstall/ttclient/ttclient/bin$ ttIsqlCS tpccCS

Copyright (c) 1996, 2024, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.

connect "DSN=tpccCS";
 7001: User authentication failed
The command failed.
Done.
test~/ttInstall/ttclient/ttclient/bin$ vi ../conf/sys.odbc.ini
#UID/PWD 추가
[ODBC Data Sources]
tpccCS=TimesTen 22.1 Client Driver

[tpccCS]
TTC_SERVER=test-KVM
TTC_SERVER_DSN=tpcc
UID=tpcc
PWD=tpcc

test~/ttInstall/ttclient/ttclient/bin$ ttIsqlCS tpccCS

Copyright (c) 1996, 2024, Oracle and/or its affiliates. All rights reserved.
Type ? or "help" for help, type "exit" to quit ttIsql.



connect "DSN=tpccCS";
Connection successful: DSN=tpccCS;TTC_SERVER=test-KVM;TTC_SERVER_DSN=tpcc;UID=tpcc;DATASTORE=/home/timesten/tt_instances/ttinstance/db/tpcc;DATABASECHARACTERSET=KO16MSWIN949;CONNECTIONCHARACTERSET=US7ASCII;MAXCONNSPERSERVER=128;
(Default setting AutoCommit=1)
Command>
facebook twitter kakaoTalk kakaostory naver band shareLink