ASE on Linux FAQ

이 글은 Sybase Adaptive Server on Linux에 대한 FAQ입니다.


저자 : Michael Peppler
원문 : http://www.mbay.net/~mpeppler/Linux-ASE-FAQ.html, 최종 갱신일 2000-03-17 07:23:26
번역 : 윤석천, 2000-04-06

서 론

저는 작은 부하량이 걸리는 linux용 sybase를 운용하고 있습니다. 그래서, ASE(Sybase Adaptive Server 이하 ASE)와 여러 종류의 Linux와의 상호 운용및 관계에 대해서 아무런 책임있는 말씀을 드릴 수 없음을 양지하여 주십시요. 그러나, 이글을 적어가는 과정이 아주 재미있었으며, 가까운 훗날에 이러한 부분에 대해서도 포함하게 될 것이라 생각됩니다. 제가 만든 작은 FAQ가 도움이 되시길 바라며, 이 글의 내용은 International Sybase User Group에서 운용하는 ASE on Linux mailing list(ase-linux-list@isug.com)과, news://forums.sybase.com/sybase.public.sqlserver.linux newsgroup에서 수집한 내용으로 이루어져 있습니다.

이중 mailing list는 Aaron Ross의 도움으로 http://forum.swarthmore.edu/epigone/ase-linux-list에서 검색가능한 형태로 남겨져 있으니, 관심있으신 분들은 찾아가 보시기 바랍니다.

Henrik Fuxelius는 ASE 11.0.3.3 on Linux를 Slackware 3.6에 설치하는 간략한 "how to"를 작성하였으며, 이는 http://www.algonet.se/~fuxen/sybase.html에서 보실 수 있습니다.

ASE on Linux mailing list에 Teresa Larson님이 올려주신 글에서 Sybase에 관련하여 internet 상에서 참조할 만한 다른 곳들을 나열하여 주었습니다.

sybase사의 문헌들은 http://sybooks.sybase.com/에서 찾아 볼수 있습니다.

sybase에 대한 질문을 할 수 있는 다른 곳들은 아래와 같습니다.

comp.databases.sybase - 이곳은 sybase에 대한 news group입니다. 이곳은 오랫동안 운영되어 왔고, 이곳에서 많은 경험을 가진 분들과, 고급 기술자들이 참여 하고 있습니다.

SYBASE-L - 이곳은 여러햇 동안 운영되어 온 mailing list입니다. comp.database.sybae와 마찬가지도 많은 정보를 습득할 수 있으며, 이 list에 가입하기 위해서는 LISTSERV@UCSBVM.UCSB.EDU 으로 (SUBSCRIBE SYBASE-L 이름, 성) 형식의가입 신청서를 보내세요.

http://support.sybase.com/newsgroups - 이곳은 sybae에 의해서 운용되며, 이곳은 여러가지 주제 (예를 들면 sqlserver.general, sqlserver.administration, sqlserver.linux, sqlserver.unix, powersoft.public.jaquar.cts, powersoft.public.powerbuilder.general ...)등에 대해서 다루고 있습니다. news group에 접속하기 위한 독자분의 web browser 설정방법에 대한 설명도 찾아 보실수 있습니다.

위의 정보가 여러분들께 도움이 되길 바랍니다.

또다른 좋은 참조 문헌은 Sybase FAQ입니다. 이곳에서는 sybase에 대한 다양한 주제와 정보를 접하실 수 있습니다.

목차


어디서 ASE on Linux를 구할 수 있나요?

http://linux.sybase.com에서 간단한 설문서에 답하신 후 최신판을 구하실 수 있습니다.

Servr 접속 방법

2.0.36 미만의 커널에서는 TCP/IP의 버그가 있었고, 이는 2.0.36버젼에서 Alan Cox에 의해 고쳐졌습니다. 만약 정상적으로 운용하려 한다면, 2.0.36, 2.1.122이후의 kernel로 운용되어야 합니다.

ftp://ftp.us.kernel.org에서 새로운 kernel을 가져가실수 있습니다. 이곳은 전세계의 여러곳에서 mirroring되고 있으므로, 여러분은 위의 url에서 국가명(한국인 경우 kr, Australia인 경우au, 영국인 경우uk, Finland인 경우 fi등)을 바꾸면, 자국내의 site에 접속할 수 있습니다. http를 통해서 http://www.us.kernel.org 접속하는 것도 가능합니다.

Server로 운용되는 system의 kernel은 upgade되어야 하지만, client는 이전버젼의 kernel로서도 이상없이 운용될 수 있습니다.

Memory 설정 방법

default값으로 Linux kernel은 32megabyte의 shared memory의 한계를 가지고 있습니다. 만약 독자분께서 sybase에 더 많은 메모리를 할당하려고 한다면(sybase의 sp_configure 명령을 이용하여), 먼저 linux kernel의 shared memory한계를 늘려야 합니다.

2.2.x이상의 kernel에서는 shared memory의 양을 linux 시동시 아래와 같은 방법으로 설정하여 줄수 있습니다.

    # echo 134217728 > /proc/sys/kernel/shmmax
위의 값은 shared memory의 최대값을 128mb로 설정한 예입니다. 여러분들은 위의 간단한 명령문을 이용하여 1gb이상의 shared memory를 설정하실수 있지만, 저는 아직까지 시도해 본 바가 없습니다. Sybase FAQ의 9.25항을 참조하여 보세요, 이곳에서 2.2.x버젼의 상세한 메모리 설정방법을 보실수 있습니다.(역자 주: 현재 위의 page는 위치가 옮겨 졌습니다. ASE FAQ로 접속하여 찾아보세요.) 2.0.x의 커널에서는 /usr/src/linux/include/asm/shmparam.h를 아래와 같이 고쳐줘야 합니다.

#define SHMMAX 0x2000000 /* max shared seg size (bytes) */

를 다음과 같이

#define SHMMAX 0x4000000 /* max shared seg size (bytes) */

위의 예는 share memory segment의 크기를 64 MB로 늘려준 예입니다.

또한, linux는 기본 값으로 64 megabyte의 ram까지만을 인식하는 것으로 보입니다. 64MB이상의 ram을 가진 경우, lilo.conf화일에 "mem="라는 값을 넣어주고, lilo를 돌려줘서 linux가 이값을 받아들이도록 해야 합니다. 한분께서 256 MB ram을 가진 자신의 linux box에서의 lilo.conf 설정값을 보내주셔서 이를 아래에 싣습니다.

        boot=/dev/sda3
        map=/map
        install=/boot.b
        prompt
        timeout=50
        image=/vmlinuz
                label=linux
                root=/dev/sda3
                initrd=/boot/initrd-2.0.34-0.6.img
                append="mem=256M"
                read-only       
    

append="mem=256M"행을 관심깊게 보시기 바랍니다.

Sybase의 rc scripts 과 IDENTITY 값

ASE 11.0.3.3과 11.9.2에서 제공되는 rc script는 독자분께서 stop명령을 줄 때(예, RedHat에서는 /etc/rc.d/init.d/sybase stop), killproc를 써서 server를 멈추게 합니다. 이는 shutdown with nowait로서 server에 작용하며, 이로인하여 database내의 IDENTITY coloum에 부정적 영향을 미칩니다.(예를 들자면, 생성된 값들 사이에 큰 빈 공간을 남겨둠). 이를 고치기 위해서는, sybase rc script의 stop부분을 바꿈으로서 killproc을 쓰는 대신, syabse의 shutdown기능을 사용하도록 하여야합니다. 아래의 부분을
    stop)
        echo -n "Shuting down Sybase ASE configured servers: "
        killproc dataserver
        killproc backupserver
        killproc monserver

        # Add your own openserver applications.
        echo
        ;;
다음과 같이 고쳐주세요.
    stop)
       echo -n "Stopping Sybase SQL Server"
       $SYBASE/bin/isql -Usa -P******* -S$DSQUERY <<STOPIT
shutdown SYB_BACKUP with nowait
go
shutdown 
go
exit
STOPIT

        killproc monserver

        # Add your own openserver applications.
        echo
        ;;
물론 독자께서는 isql로 보내지는 password와 $DSQUERY부분를 고쳐주셔야 합니다. 또는 이를 직접 작성하셔도 무방합니다. 또한, 하나이상의 server가 운용되고 있다면, 이명령문을 여러번 사용하셔야 합니다.
독자께서는 원하신다면, 각 database에 대해 checkpoint명령을 추가 함으로써 다음번 server재기동시 기동시의 recovery속도를 올려줄수 있습니다.

Raw disk I/O

Linux는 현재 raw disk I/O를 제공하지 않습니다. 심지어는, 독자분께서 file name대신 device name을 사용하더라도 I/O는 여전히 kernel에 의해 요리됩니다. 이는 file system에 대해서 여전히 bufferd write를 함을 의미합니다. 이는 ASE의 운용속도를 빠르게 합니다만, 여러가지 재난(예를 들자면 갑작스런 정전등)에 대한 복구를 힘들게 합니다. 왜냐하면, ASE는 disk에 저장하려는 내용이 여전히 Linux의 disk cache에 남아 있더라도, 이내용이 disk 써넣어 졌다고 여기기 때문입니다.

11.9.2버젼에서는 모든 open call에 대해서 O_SYNC flag를 사용하고 있으며, 이는 kernel이 모든 data를 disk에 즉시 써 넣도록 강요하는 기능을 합니다. 그러나, 이로 인하여 I/O등에 있어서 속도가 떨어지지만, ASE로 하여금 disk에 써 넣었다고 생각하는 내용이, 실제로 disk에 써넣어지고, buffer등에 남아 있지 않아, 정전등의 문제 발생시, 복구를 보장해 줄수도 있습니다.

여러분은 RUN_server 화일에서 "dataaserver" 바로 다음에 -T1625 traceflag를 사용함으로써 이 기능을 꺼 줄수도 있습니다. 주의할 점은 이명령은 server전체에 대해서 영향을 미친다는 점입니다. 앞으로 출시될 12.0 버젼은 각 device별로 이 flag를 지정할 수 있을 것입니다. 몇몇분은 sybase device를 놓아둘 file system에 chattr +S을 사용하는 것을 언급한 바 있습니다. man page에 의하면 chattr +S는 filesystem의 buffering을 꺼주는 기능이며, 복구성을 높여 줄수 있다고 합니다. 이는 개개의 화일에 적용도 가능하다고 합니다.(예 chattr +S master.dat) 저는 아직 이를 시험해 본 바 없습니다.

저는 ASE on Linx의 복구와 관련된 내용에 대하여 누군가가 시험해 보는 것에 대하여 책임이 없습니다. 현시점에 있어어, RAID에 sybase의 database를 올려두는 것과 같은 hardware관점에서의 해결법도 있을 수 있습니다. raw disk I/O를 Linux가 지원하는 것에 대한 논의는 진행중이지만, 곧 지원되리라 보지는 않습니다.(역자주 kernel 2.4부터 지원된다는 내용을 다른 곳에서 본 바가 있습니다만, kernel에서 지원해준다고 하더라도 ASE에서 지원해 줄지는 정확히 모르겠습니다. 대용량 DB를 활용하시거나, ASE의 전문가 분들께서는 다른 생각을 가지시는 분들도 많으시겠지만, raw disk I/O를 사용하는 것보다 bufferd filesystem의 사용할 때의 속도 향상때문에 그냥 그대로 사용하겠다는 분들도 mailing list상에서 많이 보입니다. 단, 이경우 자주 back up을 하시고, 안정적인 hardware지원은 잊지 않으시더군요. ^.^; )

sybperl on linux 설치

주요문제는 sybase의 Sybase의 DB-Library와 -ldb and -lndbm libraries간의 충돌 입니다. Perl은 이들 기본 값으로 library와 link되어 있습니다. 그러므로 Sybperl의 Sybase::DBlib module은 제대로 작동되지 않습니다.

그래서 아래에 제가 bulid한 방법을 보여드립니다.

여러분은 이제 작동되는 sybperl을 가지게 되었습니다.

또한 Sybperl FAQ에서 이문제에 대한 정보를 얻을 수 있으며, README.linux에서도 읽으실수 있습니다.

Sybtcl on linux 설치 방법

Sybtcl 은 Tcl/Tk가 설치되어 있다면 Linux상에서는 어려운 일이 아닙니다. Tcl 8.0 혹은 그 이상을 권장합니다. RedHat 5.1이상에는 rpm화일로 Tcl/Tk 8.0이 포함되어 있습니다.

Sybtcl을 설치하기 위해서, Sybtcl배포본을 구해서 압축을 풀고, sybtcl-2.5/unix driectory로 들어간 후 아래의 명령들을 실행합니다.

configure make make install

여러분은 /usr directory에 설치하기 위해서 반드시 root이어야 합니다.

Wisqlite를 설치하기 위해서는, ./samples directory에서 'wisqlite'화일을 /usr/bin로 복사해 넣으세요. /usr/bin/wisqlite의 첫줄을 아래와 같이 바꿉니다.

#!/usr/bin/wish8.0

Win NT/95/98에서의 접속방법

Shaun Lipscombe가 작성한 간략한 How-to를 읽어 보세요.

일반적으로 Sybase사는 server 구매시 windows client library를 제공합니다. linux용 11.9.2버젼은 PC용 Client tool(sybase central포함)을 포함하여, 이를 이용하여 linux server에 접속할 수 있습니다. 저는 이 package를 사용함에 있어서 불법복제와 관련된 내용을 100%확실히 말씀드릴 수 없습니다. 여러분은 win32 client를 download받을 수 있습니다만, 이는 이론적으로 개발 용도로만 사용할 수 있습니다. 상업용으로 사용하려면, 소정액을 지불 하여야 합니다. ( 적어도 server 자체에 대해서는 그러합니다. 다시 한번 말씀드리지만, 저는 win32 client tool에 대하여 어떤 상황인지 정확히 모릅니다. 만약 궁금하시다면 sybase에 물어 보시기 바랍니다. ) 이들 화일은 http://linux.sybase.com에서 가져 오실수 있습니다.
Geoff Winkless님이 이들 library를 사용하려고 하였지만 ctl3d32.dll화일이 없다고 알려왔습니다만, 이 화일은 일반적으로 windows설치 운용자라면 가지고 있을 것입니다.

Openlink software사로 부터 (http://www.openlinksw.com) ODBC driver를 구하실 수 있으며, MS-SQL driver를 아래와 같이 sybase data source에 맞게 설정하여 사용하 실 수 있습니다. (Carol Lerche님이 알려 주셨습니다.)

ASE on Linux에 접속하기 위한 MS SQL client설치 방법

먼저, 몇몇 프로그램(예를 들자면 MS SQL isql.exe등)은 MS/SQL판의 dblib를 직접적으로 사용하고, 또다른 프로그램들(예를 들자면 Perl DBI)는 ODBC를 통하여 이를 사용합니다. 그러므로, Sybase server를 MS/SQL dblib client에 맞게 설정하는 것에서 시작합니다.

STEP 1: SQL Server Clinet Configurateion Utiltity를 실행합니다.(시작 메뉴의 M$ SQL server 6.5 program group에 있을 것입니다.)

STEP 2: 'Advanced' tab의 'server'칸에 여러분의 Linux/ASE server의 적절한 이름을 넣습니다.(예를 들자면 MS2Linux) 'DLL Name' tab에서 'TCP/IP sockets'를 선택합니다. Connextion String 칸에는 DNS 이름과 port를 접속하려는 linux ASE compute와 이에 들어 있는 Sybase의 interface화일과 같게 써 넣습니다. port 번호는 쉼표로 DNS이름과 나누어 넣습니다.

linux-sybase.anydomain.com,2345
어떤 포트를 사용하거나 문제가 되지 않지만, ASE on Linux의 interface화일에 사용된 port 번호와 같게 사용하셔야 합니다.

"Add/Modify" 버튼을 누르고, 이 값을 Adcanced Client Option 의 list box에 넣어 줍니다. 이는 registrye에 HKEY_LOCAL_MACHINE->SOFTWARE->Microsoft->MSSQLServer->Client->ConnectTo 에 name으로 여러분이 넣어주신 (예 MS2Linux)와 값으로 "DBMSSOCN,linux-sybase.anydomain.com,2345"를 넣어주신 것과 같습니다.

STEP 3: (여기서 저는 NT에서의 설정방법을 설명합니다만, windows 9x에 있어서 user, system DSN간에 큰 차이는 없다고 생각됩니다.) 시작메뉴-설정-제어판-ODBC에서 user DSN혹은 system DSN탭을 선택하여 (이는 모든 NT 사용자가 사용할 것인지 아닌지에 따라 선택하세요) Add 버튼을 누르세요.

STEP 4: "Create New Data Source" window에서 "Microsoft SQL Sever"나 "SQL Server"를 선택하고 Finish를 누르세요.

STEP 5: Data Source Name과 Desctiption를 넣어주세요. Server Selection Combo Box에서 pull down시킨후 , Step2에서 설정한 서버를 선택하세요. Network Library란에 "linux-sybase.anydomain.com,2345"와 Network Library란에 DBMSSOCN혹은 "defualt"값을 넣어주세요. 단 "use trusted connection"은 선택하면 안됩니다. OK를 누르세요.

STEP 6 (optionional): Options버튼울 누르시고, database name과 language와 다른 설정치를 넣어주세요. 모든 것을 마치면 이 칸은 잊으셔도 됩니다.

여기까지 마친후 잘 안될때 : database를 admin하기 기능을 실행시, MS SQL server에서 확장되거나, 이곳에만 있는 DDL/DML/SQL을 바탕으로 운용된는 tool과 GUI를 통하여 생성된 SQL문은 잘못된 SQL문을 보내줄수 있습니다. 또한, MS/SQL ODBC driver를통한 Syabse 사용은, Perl:ODBC은 작동하지만, Java JDBC clinent는 동작하도록 만들수 없었습니다.

Date Formats

이 내용은 free 11.0.3.3 판에 들어 있는 10.0.4 verion의 OpenClient에 해당되는 내용입니다.)
제가 OpenClient on Linux의 locale 사용에 있어서 Bug로 여겨지는 것이 한가지 있습니다. 기본값으로, "select getdate()"를 실행하면 일반적으로 다른 OS에서 운용되는 ASE에서 받을 수 있는 "Jan 14 1999 7:50AM"이라는 값대신 단지 "01/15/99"라는 값을 받을수 있습니다. 이는 /opt/sybase/locales/us_english/iso_1/common.loc화일을 고쳐서 수정하고, 수정방법은 아랫줄을 주석문 처리하세요.
dateformat=mdy

또 다른 방법은 OpenClient API를 이용하여 default date converion formate을 바꿔주는 방법입니다.(예 Client Library에서 cs_dt_info()) sybperl은 이 기능을 사용하여 값을 얻습니다.

Sybase Central on linux

Sybase 11.9.2는 Sybase Central GUI admin tool이 win32용으로만 제공됩니다. linux 자체 실행화일이 필요하시다면 Pascal Ginola가 개발하고 있는 GPL을 따르는 Like Sybase Central을 사용해 보세요. 이는 http://perso.wanadoo.fr/laserquest/linux/에서 구하실수 있습니다.

tempdb를 RAM disk에 올리는 방법

먼저, kernel에서 CONFIG_BLK_DEV_RAM = 1로 설정하여 Ram disk를 사용가능하도록 하세요. 이는 /usr/src/linux디렉토리에서 make menuconfig 혹은 make xconfig등을 사용하여 Block Devices항목에서 RAM disk support를 가능하게 하여도 됩니다. 그리고 나서 kernel을 다시 compile하여 이 설정값이 적용된 kernel을 얻습니다.

Stefan Goebel님이 아래의 내용을 sybase.public.sqlserver.linux에 올려 주셨습니다:

file descriptors의 최대값

CPU갯수 보다 많은 DB engine을 돌릴 수 있나요?

FreeBSD에서의 설치방법

Wim ten Have는 FreeBSD 3.3에서 ASE 11.9.2 for Linux의 실행에 성공하였습니다. (1999년10월7일자 ase-linux-list@isug.com에서 발췌)
저는 Linux/ASE 11.9.2와 Linux/OCS 11.1.1를 FreeBSD에 설치하였습니다. FreeBSD 3.3-RELEASE #1는 Linux와 실행화일 호환을 지원합니다. 작동 상황은 아래와 같습니다.
       % uname -a
       FreeBSD calera.sybase.com 3.3-RELEASE FreeBSD 3.3-RELEASE #1: Thu Sep 30 19:32:09 CEST 1999 root@calera.sybase.com:/usr/src/sys/compile/SYBASE_KERNEL  i386
       % ps
         PID  TT  STAT      TIME    COMMAND
       10273  p0     Ss      0:00.10 -csh (csh)
       10294  p0     R+      0:00.00  ps
         266  v0-    S      35:47.04  dataserver -d./master.dat -sSYBASE
       % ipcs
       Message Queues:
       T     ID     KEY        MODE     OWNER    GROUP
       Shared Memory:
       T     ID     KEY        MODE     OWNER    GROUP
       m 196608 1761877794 --rw------- sybase    group
       Semaphores:
       T     ID     KEY        MODE     OWNER    GROUP

       % isql -Usa -P
       1> select @@version
       2> go

       Adaptive Server Enterprise/11.9.2/P/Linux Intel/Linux 2.2.5 i586/OPT/Wed Aug 18 10:57:21 1999
*** "Linux Interl"용으로 배포되는 "ASE"는 상기상황을 고려하거나, 시험되거나, 지원하지 않습니다. 저는 호기심과 시험, 교육목적으로 상기 설정을 시험해봤습니다. ;-) -- Wim ten Have.

Client가 실행되지 않을 때

glibc 2.1를 기반으로 한 Liux 배포본 (예 Red Hat 6.x)에서, 응용 프로그램(sybperl's Sybase::CTlib 과 DBD::Sybase를 포함한) 프로그램 시작이 되지 않을수 있습니다. ASE는 date formating등과 data변환을 위해서 SYBASE, LANG and LC_ALL환경변수를 사용하여, context allocation routine이 locale 설정을 읽어 들입니다.
locales.dat화일은 아래와 같습니다.
[linux]
        locale = ENGLISH, us_english, iso_1
        locale = FRENCH, french, iso_1
        locale = GERMAN, german, iso_1
        locale = C, us_english, iso_1
        locale = default, us_english, iso_1
SYBASE 환경변수는 locates.dat화일을 찾는데 사용되고 ( $SYBASE/locales/locales.date), LANG혹은 LC_ALL환경 변수로 locales.dat안에서 내용을 찾는데 사용됩니다. 이러한 절차를 거쳐 [linux]항목으로 찾아 간후, locale = 다음의 첫번째 단어가 LANG혹은 LC_ALL 환경 변수와 같은 것을 찾습니다.
RedHat 6.x(그리고 아마도 다른 배포판들도)은 LC_ALL을 국가와 언어를 합하여 설정합니다. 제 computer에서는 이 값은 us_EN (USA, English)로 설정됩니다. 이 값이 localtes.dat값 안에 없다면 문제가 발생됩니다.
저는 제 컴퓨터에서 아래의 값을 locales.dat값에 넣어 줌으로써 이러한 문제를 해결하였습니다.
*** locales.dat.orig    Tue Jan 18 17:48:32 2000
--- locales.dat Thu Dec 23 10:14:39 1999
***************
*** 166,171 ****
--- 166,172 ----
        locale = default, us_english, iso_1
  
  [linux]
+       locale = en_US, us_english, iso_1
        locale = ENGLISH, us_english, iso_1
        locale = FRENCH, french, iso_1
        locale = GERMAN, german, iso_1
만약, 여러분의 응용프로그램이 시작되면서 죽어 버릴때, 이 환경변수를 확인하여 보시고, 적절히 고쳐주세요.
저자 : Michael Peppler
원문 : http://www.mbay.net/~mpeppler/Linux-ASE-FAQ.html
번역 : 윤석천

Last modified: Fri Mar 17 07:23:26 PST 2000 (원문) , 2000-04-06 (번역문)