반응형

[출처 : http://flowrider.tistory.com/6]


  Windows/NT
                  AMQHASMN.EXE - The logger
                  AMQHARMN.EXE - Log formatter (LINEAR logs only)
                  AMQZLLP0.EXE - Checkpoint process
                  AMQZLAA0.EXE - LQM agents
                  AMQZTRCN.EXE - Trace
                  AMQZXMA0.EXE - Execution controller
                  AMQXSSVN.EXE - Shared memory servers
                  AMQCRSTA.EXE - Any remotely started channel over TCP/IP
                               - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  AMQCRS6A.EXE - Any remotely started channel over LU62/SNA

                               - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  RUNMQCHL.EXE - Any locally started channel over any
                  protocol
                               - Could be SENDER,SERVER,CLUSSDR,REQUESTER
                  RUNMQLSR     - LISTENER PROCESS
                  RUNMQCHI     - CHANNEL INITIATOR
                  RUNMQSC.EXE  - MQSeries Command processor
                  AMQPCSEA.EXE - PCF command processor
                  AMQSCM.EXE   - Service Control Manager

                  SOLARIS
                  amqhasmx - logger
                  amqharmx - log formatter, used only if the queue manager
                  has linear logging selected
                  amqzllp0 - checkpoint processor
                  amqzlaa0 - queue manager agents
                  amqzxma0 - processing controller
                  amqcrsta - Any remotely started channel over TCP/IP
                           - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  amqcrs6a - Any remotely started channel over LU62/SNA
                           - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  runmqchl - Any locally started channel over any protocol
                           - Could be SENDER,SERVER,CLUSSDR,REQUESTER
                  runmqlsr - listener process
                  runmqchi - channel initiator
                  runmqsc  - MQ Command interface
                  amqpcsea - PCF command processor

                  AS/400
                  AMQHIXK4 - Storage Manager (Housekeeper)
                  AMQMCPRA - Data Store (Object Cache)
                  AMQCLMAA - Listener
                  AMQALMP4 - Check Point Process
                  AMQRMCLA - Sender channel
                  AMQCRSTA - Any remotely started channel over TCP/IP
                           - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  AMQCRS6A - Any remotely started channel over LU62/SNA
                           - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  AMQPCSVA - PCF command processor
                  AMQRIMNA - Channel initiator (trigger monitor to start
                  channel)
                  AMQIQES4 - Quiesce (forces user logoffs - for upgrades)
                  AMQIQEJ4 - Quiesce (without user logoffs - for daily use
                  if desired)

                  AIX
                  amqhasmx - logger
                  amqharmx - log formatter, used only if the queue manager
                  has linear logging selected
                  amqzllp0 - checkpoint processor
                  amqzlaa0 - queue manager agent(s)
                  amqzxma0 - processing controller
                  amqcrsta - Any remotely started channel over TCP/IP
                           - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  amqcrs6a - Any remotely started channel over LU62/SNA
                           - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  runmqchl - Any locally started channel over any protocol
                           - Could be SENDER,SERVER,CLUSSDR,REQUESTER
                  runmqlsr - listener process
                  runmqchi - channel initiator
                  runmqsc  - MQ Command interface
                  amqpcsea - PCF command processor

                  HP/UX
                  amqhasmx - logger
                  amqharmx - log formatter, used only if the queue manager
                  has linear logging selected
                  amqzllp0 - checkpoint processor
                  amqzlaa0 - queue manager agents
                  amqzxma0 - processing controller
                  amqcrsta - Any remotely started channel over TCP/IP
                           - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  amqcrs6a - Any remotely started channel over LU62/SNA
                           - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  runmqchl - Any locally started channel over any protocol
                           - Could be SENDER,SERVER,CLUSSDR,REQUESTER
                  runmqlsr - listener process
                  runmqchi - channel initiator
                  runmqsc  - MQ Command interface
                  amqpcsea - PCF command processor

                  OS2
                  AMQHASM2.EXE - The logger
                  AMQHARM2.EXE - Log formatter (LINEAR logs only)
                  AMQZLLP0.EXE - Checkpoint process
                  AMQZLAA0.EXE - LQM agents
                  AMQZXMA0.EXE - Execution controller
                  AMQXSSV2.EXE - Shared memory servers
                  AMQCRSTA.EXE - Any remotely started channel over TCP/IP
                               - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  AMQCRS6A.EXE - Any remotely started channel over LU62/SNA

                               - Could be
                  RECEIVER,REQUESTER,CLUSRCVR,SVRCONN,SENDER,SERVER
                  RUNMQCHL.EXE - Any locally started channel over any
                  protocol
                               - Could be SENDER,SERVER,CLUSSDR,REQUESTER
                  RUNMQLSR     - LISTENER PROCESS
                  RUNMQCHI     - CHANNEL INITIATOR
                  RUNMQSC.EXE  - MQSeries Command processor
                  AMQPCSEA.EXE - PCF command processor

반응형

'UTIL > WMQSeries' 카테고리의 다른 글

WMQ Channel Status  (7) 2014.07.09
WMQ 간단한 사용팁2 (7.1.x, 7.5.x MQRC 2035 문제)  (0) 2013.08.19
WMQ 간단한 사용팁1  (0) 2011.08.23
[EAI]IBM WMQ 구성 참고  (0) 2011.08.21
WMQ 7.0 Linux에서 설치하기  (0) 2011.08.21
반응형

 

 

WMQ 7.1 이나 7.5 이상 버전에서는 channel의 mcauser만 바꿔준다고 해서 서드파티 모니터링 툴이 해당 큐매니저에 붙을 수 없다.

몇 가지 작업을 더 해줘야 하는데 해당 문제는 WMQ가 업그레이드 되며 보안문제 이슈 해결을 위해 추가된 기능으로 보인다.

 

해당 문제는 WMQ 6, 7.0.x 대에서는 해당하지 않는다.

 

2035 MQRC_NOT_AUTHORIZED

해당 문제가 발생할 때 근본적으로는 system.def.svrconn의 mcauser가 관리자로 지정되어 있지 않기 때문에 그랬다.

하지만 해당 버전 부터는 해당 큐 매니저 접속 채널 자체의 인증작업을 거쳐야 하는데 이는 관리자가 추가할 수 있다.

 

이 전과 동일하게 사용하기 위해서는 가장 간단하게 이 채널 인증 기능을 DISABLE 해버리는 것이다.

 

$ runmqsc QmgrName
DISPLAY QMGR CHLAUTH
AMQ8408: Display Queue Manager details.
QMNAME(TEST01) CHLAUTH(ENABLED) <- 인증 작업을 거치도록 설정되어 있음.

DISPLAY CHLAUTH(*)
1 : DISPLAY CHLAUTH(*)
AMQ8878: Display channel authentication record details.
CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(ADDRESSMAP)
ADDRESS(*) USERSRC(CHANNEL)
AMQ8878: Display channel authentication record details.
CHLAUTH(SYSTEM.*) TYPE(ADDRESSMAP)
ADDRESS(*) USERSRC(NOACCESS)
AMQ8878: Display channel authentication record details.
CHLAUTH(*) TYPE(BLOCKUSER)
USERLIST(*MQADMIN)

 

따라서 아래와 같이 설정해 주면 이 이전 버전들과 동일하게 사용할 수 있다.

ALTER QMGR CHLAUTH(DISABLED)

 

하지만 기껏 인증 기능 추가했더니 인증기능 Disable 시키는건 아무도 좋아하지 않을터.

IBM에서는 아래의 방법을 가이드하고 있다.

 

1) You can add the following two Channel Authentication Records discussed in the following presentation:
The first rule blocks administrative users and the MCAUSER "nobody" (which prevents someone from creating a user ID "nobody" and putting it into an authorized group).
$ runmqsc QmgrName
SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST('nobody','*MQADMIN')

The second rule provides a reduced blacklist for SYSTEM.ADMIN channels that allows administrators to use these. It is assumed here that some other CHLAUTH rule such as an SSLPEERMAP has validated the administrator’s connection or than an exit has done so.
SET CHLAUTH(SYSTEM.ADMIN.*) TYPE(BLOCKUSER) USERLIST('nobody')

The above rules apply to SYSTEM.ADMIN.SVRCONN which is used by the MQ Explorer.

If you are using another user-defined channel, such as MY.ADMIN.SVRCONN, then you need to add the following two records:
SET CHLAUTH(MY.ADMIN.SVRCONN) TYPE(ADDRESSMAP) ADDRESS(*) USERSRC(CHANNEL)
SET CHLAUTH(MY.ADMIN.SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody')


Note: it is not advisable to use SYSTEM.DEF.* channels for active connections. The system default channels are the objects from which all user-defined channels inherit properties. The recommended practice is that SYSTEM.DEF.* and SYSTEM.AUTO.* channels should NOT be configured to be usable.

 

 

2) This is a variation of 1) but allowing the MQ Administrator to only use a particular host.
The first rule blocks MCAUSER "nobody".
SET CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody')

The second rule removes all access to SYSTEM.ADMIN.SVRCONN ...
SET CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(ADDRESSMAP) ADDRESS(*) ACTION(REMOVE)

... and the third rule adds an entry for the server that needs access.
SET CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(ADDRESSMAP) ADDRESS(9.27.4x.7y) USERSRC(CHANNEL)

 

반응형

'UTIL > WMQSeries' 카테고리의 다른 글

WMQ Channel Status  (7) 2014.07.09
IBM WMQ 운영체제별 상주프로세스 - 기능 목록  (0) 2013.08.19
WMQ 간단한 사용팁1  (0) 2011.08.23
[EAI]IBM WMQ 구성 참고  (0) 2011.08.21
WMQ 7.0 Linux에서 설치하기  (0) 2011.08.21
반응형

Centos 설치 후 yum update 부터 실시

#yum update

 

외부 접속을 위해 ssh와 telnet 설치

 

1. ssh 설치

 

1-1. 설치 리스트 확인 (64비트의 경우는 뒤에 .x86_64가 붙음)

# yum list | grep openssh

 

1-2. ssh 설치 (yum 에서 -y 옵션은 무조건 yes)

# yum -y install openssh*

 

1-3. 정상 설치되었는지 확인 (뒤에 @가 붙으면 설치된 것)

# yum list | grep openssh

openssh.x86_64                       5.3p1-84.1.el6            @base/$releasever
openssh-askpass.x86_64          5.3p1-84.1.el6            @base/$releasever
openssh-clients.x86_64             5.3p1-84.1.el6            @base/$releasever
openssh-server.x86_64              5.3p1-84.1.el6            @base/$releasever

 

1-4. sshd (뒤에 d가 붙으면 데몬) 시작

# service sshd start

 

1-5. 리부팅시 데몬 자동 재시작할 수 있도록 설정

# chkconfig --level 345 sshd on

# chkconfig --list | grep sshd => 정상적으로 설정되었는지 확인.

 

 

2. telnet 설치

 

1-1. 설치 리스트 확인

# yum list | grep telnet

 

1-2. telnet 설치

# yum -y install telnet*

 

1-3. 정상 설치되었는지 확인

# yum list | grep telnet

telnet.x86_64                        1:0.17-47.el6_3.1         @base
telnet-server.x86_64              1:0.17-47.el6_3.1         @base

 

# rpm -qa | grep telnet

telnet-0.17-47.el6_3.1.x86_64
telnet-server-0.17-47.el6_3.1.x86_64

 

1-4. telnet 서비스 설정 (disable을 no로 설정)

# vi /etc/xinetd.d/telnet

 

service telnet
{

      disable        = no
        flags               = REUSE
        socket_type     = stream
        wait                = no
        user               = root
        server             = /usr/sbin/in.telnetd
        log_on_failure  += USERID
}

 

1.5 telnet 서비스 재시작

# service xinetd restart

 

1.6 telnet root 접속 가능하도록 설정 pts/1, pts/2 추가.

# vi /etc/securetty

..

pts/1

pts/2

 

1.7 telnet 접속시 안내문구 수정

# vi /etc/motd

 

------------------------------------------------------------------------------------------------

HostName 변경

 

1. /etc/hosts

127.0.0.1        localhost.localdomain localhost

::1                 localhost6.localdomain6  localhost6

[설정 IP]        [설정하고자 하는 HostName]

127.0.0.1         [설정하고자 하는 HostName]

 

2. /etc/sysconfig/network

NETWORK=yes

NETWORKING_IPV6=no

HOSTNAME=[설정하고자 하는 HostName]

 

3. /etc/resolv.conf => DNS 서버 주소

nameserver 8.8.8.8 [구글 무료 DNS]

 

4. /proc/sys/kernel/hostname (굳이 안해줘도 1,2 번 하고 재부팅하면 자동으로 바껴있음)

[설정하고자 하는 HostName]

 

service network restart

reboot


hostname

ifconfig 로 확인

 

 

 

반응형

'OS > CentOS' 카테고리의 다른 글

CENTOS vsftpd 설정  (2) 2013.12.02
반응형

 

현재 폴더의 SVN 폴더를 해제하기 위해서는 .svn 폴더를 삭제해주면 된다.

더불어 .cvs CVS 폴더까지 깔끔하게 지우려면 해당 디렉토리에서 아래 명령어를 입력해주자

 

참고로 정상적인 방법은 아니고 꼼수...

 

FOR /r . %f IN (.svn) DO RD /s /q "%f"   (.svn 폴더 하위 삭제)
FOR /r . %f IN (.cvs) DO RD /s /q "%f"   (.cvs 폴더 하위 삭제)
FOR /r . %f IN (CVS) DO RD /s /q "%f"   (CVS 폴더 하위 삭제)

 

반응형
반응형

 

 

원래 솔라리스 SPARC 관련 패키지는 sunfressware.com에서 받을 수 있었다.

하지만 어느순간 유료가 되버린 사이트..

 

해메고 해매다 아래 사이트 들을 발생할 수 있었다.

차 후 참고하자

 

http://ftp.twaren.net/Sun/sunfreeware.com/sparc/5.8/

http://sunfreeware.lib.tsinghua.edu.cn/forsunsites/programlistsparc8.html#zlib

 

반응형
반응형

 

솔라리스나 기타 유닉스에서 tar로 압축해제시 압축이 정상적으로 풀리지 않고

체크섬 오류가 날 경우가 있다.

 

이 경우는 여러가지 이유가 있는데 내가 경험해 본 바로는 아래와 같은 경우가 있다.

 

1. ASCII 모드 tar를 BINARY 모드로 ftp 전송해서 체크섬 오류 발생

2. BINARY 모드 tar를 ASCII 모드로 ftp 전송해서 체크섬 오류 발생

3. GNU tar를 이용해서 압축한 파일을 솔라리스(or 각 유닉스 시스템) 기본 tar를 이용해서 압축해제 하는 경우 체크섬 오류 발생

 

1, 2번의 경우는 처음 압축 해제시 부터 체크섬 오류가 발생하므로 간단히 디텍트 할 수 있지만

3번의 경우는 압축이 해제되다가 중간부터 갑자기 체크섬 오류가 발생하므로 간단히 디텍트 할 수 없다.

 

이럴 경우 각 로컬 시스템에 있는 tar를 이용해서 압축을 한 뒤 이종 시스템의 tar를 이용해서 압축해제시 발생할 수 있는데

가장 흔하게 발생하는 경우가 GNU tar 관련 문제이다.

 

나의 경우는 GNU tar로 압축된 것을 솔라리스에서 압축해제할 때 발생했었는데

한참을 해메다가 GNU tar를 설치 한 뒤 해당 문제를 해결 할 수 있었다.

 

GNU tar 설치 후 library 종속성 문제가 발생할 수 있는데 해당 라이브러리는 적당히 찾아서 설치 해서 해결해주자.

반응형

'OS > LINUX Common' 카테고리의 다른 글

Linux에서 ZFS 파일 시스템 구축.  (0) 2015.03.25
tmpfs 설정하는 방법  (0) 2014.04.16
리눅스 vsftpd 설치 / 설정.  (0) 2011.10.14
리눅스 계정관리 ----LINUX  (0) 2011.08.21
Linux에서 JDK 설치  (1) 2011.08.21
반응형

 

 

 

우선 기본적으로 솔라리스 8에서 정확한 이유는 모르겠지만 jdk 1.7 이상이 설치가 잘 안됐다...

이유는 잘 모르지만 어쨋든.

 

SunStudio 11설치를 위해 1.6u45를 받아서 설치를 해봤더니 무수한 Exception 에러...

그렇다면 뭐가 문제인고 찾아보니.. 1.4.2 나 1.5 설치를 권장한단다. 1.6.10... 정도였나 12였나

어쨋든 그 이하 버전을 설치 해야 한다는데 안전하게 1.5 버전을 설치 했다.

 

 sparc jdk 설치를 하려면 32비트와 64비트가 있는데

 

jdk-1_5_0_22-solaris-sparc.tar.Z - 32비트

jdk-1_5_0_22-solaris-sparcv9.tar.Z - 64비트

 

두가지를 받아야 한다.

64비트 jdk 설치를 위해서는 32비트를 먼저 설치해야 하는데 처음에 Z 확장자가 뭔가해서 당황했지만..

예전 유닉스 압축 형태란다.

 

uncompress [파일명] 혹은 gzip 으로 평소에 압축해제 하듯이 압축을 풀면 잘 풀린다.

그 다음 나오는 SUNW 관련 패키지 들이 있는데

 

SUNW[version]rt

SUNW[version]dev

 

대충 설명을 읽어보니 두개는 필수 인 것 같다. 더불어 SUNW[version]cfg, SUNW[version]man 등도 같이 설치하자.

나머지 한개 패키지는 아마도 일본어 관련 패키지 인것 같다.

 

64비트 패키지도 설치

SUNW[version]rtx

SUNW[version]dvx

 

설치가 정상적으로 끝나면 /usr/jdk/jdk[version] 에 설치가 완료된다.

jdk 버전 확인도 잊지 말자

/usr/jdk/jdk[version]/bin/java -version

/usr/jdk/jdk[version]/bin/java -d64 -version

 

profile 등록

export JAVA_HOME=/usr/jdk/jdk[version]

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib:.:$CLASSPATH

 

솔라리스 8에는 기본적으로 1.2.2 인가? 로 설치되어 있는데 /usr/bin 에 모든 사용자를 위해 링크를 변경해 놓자.

ln -s /usr/jdk/jdk[version]/bin/java /usr/bin/java

ln -s /usr/jdk/jdk[version]/bin/javac /usr/bin/javac

 

끝.

반응형
반응형

 

압축파일이다.

초기 유닉스 환경에서 사용되던 것인데 이번 Solaris studio 설치를 위해 jdk 설치를 하려 보니

jdk 압축이 .gz, Z 등으로 되어 있었다.

 

gz 이야 그렇다 치지만 Z는 뭔가 특이한건줄 알았더만 보통 압축파일 이었다... 허허허

기본적으로 압축과 압축해제는 아래와 같다.

 

compress [파일명]

uncompress [파일명]

 

하지만 기본적으로 gzip 으로 압축해제가 가능하다.

 

gzip -d [파일명]

gunzip [파일명]

 

 

 

 

반응형
반응형

 

 

해당 작업을 실행하기 위해서는 반드시 VMDK 파일이 single file로 존재해야 한다.

multiple files로 되어 있을 경우 아래를 참고하여 single file로 변경해 줄것. 아주 간단하다.

 

http://jangpd007.tistory.com/73

 

그 다음은 툴을 이용하여 vmdk 파일을 vhd 파일로 변경해주면 된다.

 

http://www.2tware.com/product/6/2tware+convert+vhd+free

 

해당 툴을 사용하면 아주 간단하게 변경할 수 있다. 게다가 무료 툴!

 

vmdk2vhd 라는 툴도 있긴한데 해당 툴은 경우에 따라서 multiple files로 나눠져 있던 가상하드를 하나로 합쳐도

hyper-v에 이식할 경우 os error가 발생하는 경우가 있다.

 

vmd2vhd 툴은 구굴에서도 쉽게 구할 수 있음.

 

반응형
반응형

 

 

 

 

위와 같이 가상 하드 디스크의 용량 문제로 인해서 multiple files로 나눠서 쓴 경우.

single files로 변환하는 방법이 있다.

 

vmware에서 제공하는 vmware-vdiskmanager를 사용하면 되는데

해당 바이너리 파일은 vmware가 설치된 디렉토리에 있다.

 

기능 및 옵션은 아래와 같다.

 

 

 

기본 사용 방법은 ex 4 를 참고하면 될 듯하다. 옵션은 각자 읽어서 해보면 아주 간단하게 사용할 수 있는 툴.

 

반응형
반응형

원본 : http://jacking75.cafe24.com/Network/OCI_Ref%28k%29.htm

 

작성일 : 2005. 08. 25          작성자 : 최흥배  ( jacking@korea.com )



OCIEnvCreate(),  OCIHandleAlloc(),  OCILogon(),  OCIStmtFetch(),

OCIStmtFetch2(), OCIStmtPrepare(), OCIAttrGet(), OCIStmtExecute(),

OCIParamGet(), OCIDefineByPos(), OCILogoff(), OCIHandleFree()

 

 

 

 

OCIEnvCreate()

 

 

용도

OCI 함수가 실행되는 환경을 작성 및 초기화합니다.

 

구문

sword OCIEnvCreate ( OCIEnv **envhpp,

ub4 mode,

CONST dvoid *ctxp,

CONST dvoid *(*malocfp)(dvoid *ctxp, size_t size),

CONST dvoid *(*ralocfp)(dvoid *ctxp, dvoid *memptr, size_t newsize),

CONST void (*mfreefp)(dvoid *ctxp, dvoid *memptr))size_t xtramemsz,

dvoid **usrmempp );

 

 

파라미터

 

envhpp (OUT)

: 환경 핸들에의 포인터입니다. 환경 핸들의 인코딩 설정은 mode로 지정 합니다.

 설정은  envhpp 부터 도출된 문장 핸들에 계승됩니다.

 

mode (IN)

: 모드의 초기화를 지정합니다. 다음의 모드가 유효합니다.

_ OCI_DEFAULT - 디폴트 값. UTF-16 인코딩 입니다.

_ OCI_THREADED thread 환경을 사용합니다. 유저에게 공개되어 있지 않은 내부

데이터 구조체가 멀티 thread에 의해 동시에 액세스 되지 않게 보호합니다.

_ OCI_OBJECT - 오브젝트 기능을 사용합니다.

_ OCI_UTF16 - 환경 핸들과 환경 핸들로부터 계승된 핸들은  UTF-16 인코딩으로 간주해집니다.

_ OCI_SHARED - 공유 데이터 구조를 이용합니다.

_ OCI_EVENTS 파브릿슈/ 사브스크라이브 통지를 이용합니다.

_ OCI_NO_UCB - 동적 콜백·루틴 OCIEnvCallback 의 콜을 억제 합니다.

 디폴트의 동작에서는 환경의 작성시에 OCIEnvCallback 의 콜이 허가 됩니다.

_ OCI_ENV_NO_MUTEX - 이 모드에서는 mutex 화 되지 않습니다. 환경 핸들 또는 환경 핸들로부터 도출된 핸들로 행해진 모든 OCI 콜은 시리얼화 필요가 있습니다.

_ OCI_NEW_LENGTH_SEMANTICS - 캐릭터 셋에 관계없이 모든 핸들에 대해서 일관된 바이트 장() 시멘틱스를 사용합니다.

 

ctxp (IN)

: 메모리·콜백·루틴의 유저 정의 문맥을 지정합니다.

 

malocfp (IN)

: 유저 정의의 메모리 할당 함수를 지정합니다. 모드가 OCI_THREADED 의 경우 이 메모리 할당 루틴은  thread ·세이프로 해 주세요.

 

ctxp (IN)

: 유저 정의의 메모리 할당 함수의 문맥·포인터를 지정합니다.

 

size (IN)

: 유저 정의의 메모리 할당 함수에 의해 할당할 수 있는 메모리의 사이즈를 지정 합니다

 

ralocfp (IN)

: 유저 정의의 메모리 재할당 함수를 지정합니다. 모드가 OCI_THREADED 의 경우 이 메모리 할당 루틴은 thread·세이프로 해 주세요.

 

ctxp (IN)

: 유저 정의의 메모리 재할당 함수의 문맥·포인터를 지정합니다.

 

memp (IN)

: 메모리 블록의 포인터입니다.

 

newsize (IN)

: 새롭게 할당할 수 있는 메모리의 사이즈를 지정합니다.

 

mfreefp (IN)

: 유저 정의의 메모리 해방 함수를 지정합니다. 모드가 OCI_THREADED 의 경우 이 메모리 해방 루틴은 thread·세이프로 해 주세요.

 

ctxp (IN)

: 유저 정의의 메모리 해방 함수의 문맥·포인터를 지정합니다.

 

memptr (IN)

: 해방되는 메모리의 포인터입니다.

 

xtramemsz (IN)

: 환경의 계속(연속) 시간 중에 할당할 수 있는 유저 메모리의 양을 지정합니다.

 

usrmempp (OUT)

: (호출)에 의해 유저가 할당할 수 있던 사이즈 xtramemsz 의 유저 메모리의 포이터를 되돌립니다.

 

코멘트

 

이 콜(호출)의해  유저에 의해 지정된 모드를 사용해 모든 OCI 콜의 환경이 작성됩니다.

이 콜은 다른 OCI 콜의 앞에 불려 집니다.  따라서 이 콜에 의해 톱 레벨에서의 환경 핸들의 Unicode 서포트가 설정됩니다.

Unicode의 설정은 mode 의 인수에 의해 행해집니다.  mode OCI_UTF16로 설정합니다.

이 콜에서는 나머지 OCI 함수로 사용되는 환경 핸들이 되돌려집니다. OCI 에는 독자적인 환경 모드를 가지는 복수의 환경이 존재할 가능성이 있습니다. 이 함수에서는 어떤 모드로 초기화가 요구되어도 프로세스 레벨의 초기화를 실행합니다. 예를 들어 환경계를 OCI_THREADED로 초기화했을 경우는 OCI로 사용되는 모든 라이브러리도 그 thread 모드로 초기화됩니다.

OCI 라이브러리를 사용해 DLL 또는 공유 라이브러리를 기술하고 있는 경우는 반드시 이 콜을 사용해 OCIInitialize() OCIEnvInit() 콜은 사용하지 말아주세요.

 

 

관련 함수

OCIHandleAlloc(), OCIHandleFree(), OCIEnvInit(), OCIEnvNlsCreate(), OCITerminate()



 

 

 

 

 

 

 

OCIHandleAlloc()

 

용도

이 콜은 할당 및 초기화가 끝난 핸들의 포인터를 되돌립니다.

 

구문

sword OCIHandleAlloc ( CONST dvoid *parenth,

dvoid **hndlpp,

ub4 type,

size_t xtramem_sz,

dvoid **usrmempp );

 

파라미터

parenth (IN)

: 환경 핸들입니다.

 

hndlpp (OUT)

: 핸들을 되돌립니다.

 

type (IN)

: 할당할 수 있는 핸들의 형태를 지정합니다. 사용할 수 있는 형태를 다음에 나타냅니다.

_ OCI_HTYPE_AUTHINFO C 형의 인증 정보 핸들 OCIAuthInfo 의 생성을 지정 합니다.

_ OCI_HTYPE_COMPLEXOBJECT C 형의 복합 오브젝트 검색 핸들 OCIComplexObject 의 생성을 지정합니다.

_ OCI_HTYPE_SECURITY C 형의 보안 핸들 OCISecurity 의 생성을 지정합니다.

_ OCI_HTYPE_CPOOL C 형의 접속 풀링 핸들 OCICPool 의 생성을 지정 합니다.

_ OCI_HTYPE_DIRPATH_CTX C 형의 다이렉트 패스 문맥 핸들 OCIDirPathCtx 의 생성을 지정합니다.

_ OCI_HTYPE_DIRPATH_COLUMN_ARRAY C 형의 다이렉트 패스 열배열 핸들 OCIDirPathColArray 의 생성을 지정합니다.

_ OCI_HTYPE_DIRPATH_STREAM C 형의 다이렉트 패스 스트림 핸들 OCIDirPathStream 의 생성을 지정합니다.

_ OCI_HTYPE_ENV C 형의 환경 핸들 OCIEnv 의 생성을 지정합니다.

_ OCI_HTYPE_ERROR C 형의 에러 리포트 핸들 OCIError 의 생성을 지정 합니다.

_ OCI_HTYPE_SVCCTX C 형의 서비스 문맥 핸들 OCISvcCtx 의 생성을 지정합니다.

_ OCI_HTYPE_STMT C 형의 문장(어플리케이션 요구) 핸들 OCIStmt 의 생성을 지정합니다.

_ OCI_HTYPE_DESCRIBE C 형의 선택 리스트 기술 핸들 OCIDescribe 의 생성을 지정합니다.

_ OCI_HTYPE_SERVER C 형의 서버·문맥·핸들 OCIServer 의 생성을 지정합니다.

_ OCI_HTYPE_SESSION C 형의 유저·세션·핸들 OCISession 의 생성을 지정합니다.

_ OCI_HTYPE_TRANS C 형의 트랜잭션(transaction)·문맥·핸들 OCITrans 의 생성을 지정합니다.

_ OCI_HTYPE_SPOOL C 형의 세션·풀·핸들 OCISPool 의 생성을 지정 합니다.

_ OCI_HTYPE_SUBSCR C 형의 예약 구독·핸들 OCISubscription 의 생성을 지정합니다.

_ OCI_HTYPE_PROCESS C 형의 프로세스·핸들 OCIProcess 의 생성을 지정합니다.

 

xtramem_sz (IN)

: 할당할 수 있는 유저 메모리의 양을 지정합니다.

 

usrmempp (OUT)

: 콜에 의해 유저가 할당할 수 있던 사이즈 xtramem_sz 의 유저 메모리의 포인터를 되돌립니다.

 

코멘트

type 으로 지정된 형태에 대응하는 할당 및 초기화가 끝난 핸들의 포인터를 반환.

성공시에는 NULL 핸들이 돌아옵니다. 모든 핸들이 부모 핸들로서 반환되는 환경 핸들과 대응 붙여 할당할 수 있습니다.

에러 발생시에 진단은 이용할 수 없습니다. 이 콜은 성공했을 경우는 OCI_SUCCESS 에러가 발생했을 경우는 OCI_INVALID_HANDLE 되돌립니다.

핸들은 OCI 콜에 건네주기 전에 OCIHandleAlloc()를 사용해 할당할 필요가 있습니다.

 

환경 핸들의 할당 및 초기화를 실시하려면  OCIEnvInit()를 콜 합니다.

 

관련 항목 :  xtramem_sz 파라미터를 사용한 유저 메모리 할당에 대한 자세한 내용은 2-14 페이지의 「유저 메모리의 할당」을 참조해 주세요

 

다음의 코드예는  OCIHandleAlloc()를 사용해 어플리케이션의 시작 시에 여러가지 핸들을 할당하는 예입니다.

 

OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &errhp, (ub4)

           OCI_HTYPE_ERROR, 0, (dvoid **) &tmp);

 

OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &srvhp, (ub4)

            OCI_HTYPE_SERVER, 0, (dvoid **) &tmp);

 

OCIHandleAlloc( (dvoid *) envhp, (dvoid **) &svchp, (ub4)

            OCI_HTYPE_SVCCTX, 0, (dvoid **) &tmp);

 

관련 함수

OCIHandleFree(), OCIEnvInit()

 

 

 

 

 

 

 

 

OCILogon()

 

용도

이 함수는 로그인 세션을 작성할 경우에 사용합니다.

 

구문

sword OCILogon ( OCIEnv *envhp,

OCIError *errhp,

OCISvcCtx **svchp,

CONST OraText *username,

ub4 uname_len,

CONST OraText *password,

ub4 passwd_len,

CONST OraText *dbname,

ub4 dbname_len );

 

파라미터

envhp (IN)

: OCI 환경 핸들입니다.

 

errhp (IN/OUT)

: 에러 발생시의 진단 정보를 위해서 OCIErrorGet()에 건네주는 에러·핸들입니다.

 

svchp (IN/OUT)

: 서비스 문맥 포인터입니다.

 

username (IN)

: 유저명 입니다.  OCI_UTF16 환경 모드에서의 UTF-16 인코딩인 것이 필요합니다.

 

uname_len (IN)

: username 의 길이는 인코딩의 유무에 관계없이 바이트 단위입니다.

 

password (IN)

: 유저의 패스워드입니다.  OCI_UTF16 환경 모드에서의 UTF-16 인코딩인 것이 필요합니다.

 

passwd_len (IN)

: password 의 길이는 인코딩의 유무에 관계없이 바이트 단위입니다.

 

dbname (IN)

: 접속처의 데이터베이스 명 입니다.  OCI_UTF16 환경 모드에서의 UTF-16 인코딩 이어야 합니다.

 

dbname_len (IN)

: dbname 의 길이는 인코딩의 유무에 관계없이 바이트 단위입니다.

 

코멘트

이 함수는 어플리케이션을 위한 로그인 세션을 작성할 경우에 사용 합니다.

이 콜은 건네 받은 서비스·문맥 핸들의 할당을 실시합니다. 이 콜은 세션에 대응 관련된 서버와 유저 · 세션 핸들의 암묵적인

할당도 실행합니다. 이러한 핸들은 서비스 문맥 핸들에 대해서 OCIAttrGet()를 콜 하는 것으로써 꺼낼 수 있습니다.

 

관련 함수

OCILogoff()

 

주의 :  TP 모니터 어플리케이션 등의 복잡한 세션을 필요로 하는 유저는 2-26 페이지의 「어플리케이션의 초기화, 접속 및

세션 작성」을 참조해 주세요.

 

 

 

 

 

 

 

 

 

OCIStmtFetch()

 

용도

질의로 부터 행을 패치 합니다. 새로운 패치 콜 OCIStmtFetch2()의 사용을 추천합니다. 이 콜은 사용할 수 없습니다.

 

구문

sword OCIStmtFetch ( OCIStmt *stmtp,

OCIError *errhp,

ub4 nrows,

ub2 orientation,

ub4 mode );

 

파라미터

 

stmtp (IN)

: 문장(어플리케이션 요구) 핸들입니다.

 

errhp (IN)

: 에러 발생시의 진단 정보를 위해서 OCIErrorGet()에 건네주는 에러·핸들입니다.

 

nrows (IN)

: 현 행의 위치로부터 패치 되는 행수입니다.

 

orientation (IN)

: 릴리스 8.1. 7 이하로 사용 가능한 값은 OCI_FETCH_NEXT(디폴트 ) 뿐입니다.

 

mode (IN)

: OCI_DEFAULT 건네줍니다.

 

코멘트

프리패치 된 행으로 질의한 경우 패치 콜은 로컬 콜이 됩니다.

다만 이것은 어플리케이션에 대해서 투과적으로 행해집니다.

LOB 열이 읽히는 경우 LOB locator에 대해서 실행되는 후속의 LOB 조작을 위해서 그러한 locator가 패치 됩니다.

LONG 열의 경우 프리패치는 오프가 됩니다.

이 함수는 다음의 에러 중 한쪽이 발생하면  EOF OCI_NO_DATA OCI_SUCCESS_WITH_INFO 반환합니다.

 

_ ORA-24344 「정상적으로 종료했습니다만 컴파일·에러가 있습니다.

_ ORA-24345 「잘라서 버림 또는 NULL 패치 에러가 발생했습니다.

_ ORA-24347 「경고: 그룹 함수에 NULL 열이 있습니다.

 

nrows 파라미터에 0(제로)을 설정해 OCIStmtFetch()를 콜 했을 경우는 커서가 삭제됩니다.

OCI_ATTR_ROWS_FETCHED 사용해 마지막 패치 콜로 유저의 버퍼에 정상적으로 패치 된 행수를 검색합니다.

 

관련 함수

OCIStmtExecute()

 

 

 

 

 

 

 

OCIStmtFetch2()

 

용도

이 콜은 (스크롤 가능한) 결과 세트로부터 행을 패치 합니다. 사용할 수 없는 OCIStmtFetch() 대신에 이 패치 콜을 사용하는 것을 추천 합니다.

 

구문

sword OCIStmtFetch2 ( OCIStmt *stmthp,

OCIError *errhp,

ub4 nrows,

ub2 orientation,

sb4 fetchOffset,

ub4 mode );

 

파라미터

stmthp (IN/OUT)

: 이것은(스크롤 가능한) 결과 세트의 문장 핸들입니다.

 

errhp (IN/OUT)

: 에러 발생시의 진단 정보를 위해서 OCIErrorGet()에 건네주는 에러·핸들입니다.

 

nrows (IN)

: 현행의 위치로부터 패치 되는 행수입니다.

 

orientation (IN)

: 받아들이기 가능한 값은 다음과 같습니다.

_ OCI_DEFAULT OCI_FETCH_NEXT 와 같은 결과를 얻을 수 있습니다.

_ OCI_FETCH_CURRENT - 현재 행을 취득합니다.

_ OCI_FETCH_NEXT - 현행 위치의 다음의 행을 취득합니다. 이것은 디폴트입니다

(OCI_DEFAULT 와 같은 결과를 얻을 수 있습니다). 스크롤 불가인 문장 핸들에 사용 합니다.

_ OCI_FETCH_FIRST - 결과 세트의 최초의 행을 취득합니다.

_ OCI_FETCH_LAST - 결과 세트의 마지막 행을 취득합니다.

_ OCI_FETCH_PRIOR - 결과 세트의 현재 행의 전의 행을 취득합니다.

_ OCI_FETCH_ABSOLUTE - 절대적인 위치 지정을 사용해 결과 세트의 행 번호

   (fetchOffset 파라미터로 지정) 패치 합니다.

_ OCI_FETCH_RELATIVE - 상대적인 위치 지정을 사용해 결과 세트의 행 번호

    (fetchOffset 파라미터로 지정) 패치 합니다.

 

fetchOffset (IN)

: 현재 행의 위치를 변경하기 위해서 orientation 파라미터와 병용 하는 오프셋(offset)입니다.

 

mode (IN)

: OCI_DEFAULT 건네줍니다.

 

코멘트

패치 콜은 OCIStmtFetch() 콜에 fetchOffset 파라미터를 추가한 경우와 같은 기능을 합니다. 스크롤 가능한가 어떤가에 관계없이 모든 문장 핸들에 사용 할 수 있습니다.  스크롤 불가인 문장 핸들의 경우 유일하게 받아들이는 것이 가능한 orientation 값은 OCI_FETCH_NEXT 입니다.  fetchOffset 파라미터는 무시됩니다.

새로운 어플리케이션에는 이 새로운 콜 OCIStmtFetch2()의 사용을 추천 합니다.

 

orientation OCI_FETCH_RELATIVE 설정되어 있는 fetchOffset 는 다음의 모든 콜과 등가입니다.

_ fetchOffset 의 값이 0(제로) OCI_FETCH_CURRENT.

_ fetchOffset 의 값이 1 OCI_FETCH_NEXT.

_ fetchOffset 의 값이―1 OCI_FETCH_PRIOR.

 

OCI_ATTR_ROW_COUNT 에는 패치 된 최상위 행의 절대치가 포함됩니다.

OCI_FETCH_ABSOLUTE OCI_FETCH_RELATIVE 제외하는 모든 orientation 모드에는 fetchOffset 치는 무시됩니다.

이 콜을 사용하면 OCI_FETCH_LAST 사용하고 나서 OCI_ATTR_CURRENT_POSITION 에 대해서 OCIAttrGet()를 콜 하는 것으로 결과

세트내의 행수를 검색할 수도 있습니다. 다만 이 콜의 응답 시간은 꽤 길게 됩니다.

리턴 코드는 OCIStmtFetch()의 경우와 같습니다. 다만 스크롤 가능한 문장 핸들의 패치(또는 실행)마다 리턴 코드 OCI_NO_DATA 포함하는 OER(1403)가 되돌려집니다. 또 어플리케이션이 요구하는 모든 행이 패치 된다는 것은 아닙니다.

서버측의 자원을 이 스크롤 커서용으로 해방하려면 스크롤 가능한 문장 핸들을 명시적으로 취소할까( 0(제로) 행으로 패치 한다) 또는 해방하는 필요점이 있습니다. 스크롤 불가인 문장 핸들은 OER(1403)를 받으면 암묵적으로 취소됩니다.

OCI_ATTR_ROWS_FETCHED 사용해 마지막 패치 콜로 유저의 버퍼에 정상적으로 패치 된 행수를 검색합니다.

 

 

 

 

 

 

 

 

OCIStmtPrepare()

 

용도

이 콜은 실행하는 SQL 문 또는 PL/SQL 문을 준비합니다.

 

구문

sword OCIStmtPrepare ( OCIStmt *stmtp,

OCIError *errhp,

CONST text *stmt,

ub4 stmt_len,

ub4 language,

ub4 mode );

 

파라미터

stmtp (IN)

: 실행 대상의 문장에 관련 지어지는 문장 핸들입니다. 디폴트에서는 도출원(導出元)의 환경 핸들의 인코딩 설정이 포함되어 있습니다. 문장을 UTF-16 인코딩으로 준비할 수 있는 것은 UTF-16 환경만입니다.

 

errhp (IN)

: 에러 발생시의 진단 정보를 위해서 OCIErrorGet()에 건네주는 에러 핸들입니다.

 

stmt (IN)

: 실행되는 SQL 문 또는 PL/SQL 문입니다. 널 문자로 종료하는 캐릭터 라인으로 해 주세요. 이를테면 마지막 문자는 인코딩에 따라서는 NULL 바이트의 수치입니다. 환경 핸들이 OCI_UTF16 모드로 작성되어 있는 경우는 문장도 UTF-16 인 것이 필요합니다.

파라미터를 반드시(text *)에 캐스트 해 주세요. 문장이 UTF-16 준비되면 바인드 버퍼와 정의 버퍼의 캐릭터 셋은 UTF-16 에 디폴트 설정됩니다.

문장의 텍스트에의 포인터는 그 문장이 실행되거나 그 문장으로부터 데이터가 패치 되는 사이에는 사용 가능하다라고 하는 것이 필요합니다.

 

stmt_len (IN)

: 문장의 길이입니다. 인코딩에 의해 문자 수 또는 바이트수의 단위가 됩니다.  0(제로) 이외로 할 필요가 있습니다.

 

language (IN)

: V7 구문 또는 네이티브 구문을 지정합니다. 가능한 값은 다음과 같습니다.

_ OCI_V7_SYNTAX V7 Oracle 해석 구문.

_ OCI_NTV_SYNTAX - 서버의 버젼에 의존하는 구문.

 

mode (IN)

: OCIEnvCreate() 콜의 mode 에 유사하고 있습니다. 다만 이 콜은 필연적으로 계승된 모드 설정을 쓰기 할 수 있기 때문에 우선 순위가 높아집니다.

 

다음의 값이 있습니다.

_ OCI_DEFAULT - 디폴트·모드. 문장 핸들 stmtp , 부모의 환경 핸들에 지정되어 있는 내용을 사용합니다.

_ OCI_NO_SHARING SQL 문의 공유 모드를 사용 금지로 합니다. 2-22 페이지의 「공유 데이터모드」 참조해 주세요.

 

코멘트

이 콜은 OCI 어플리케이션으로 실행하는 SQL 문 또는 PL/SQL 문을 준비하기 위해 사용합니다. OCIStmtPrepare() 콜은 어플리케이션 요구를 정의합니다.

 

mode 파라미터는 문장의 내용이 UTF-16 인코딩 되고 있는지 어떤지를 판단합니다.

문장의 길이는 코드 포인트 수 또는 바이트 수로 인코딩에 따라서 달라 집니다.

문장 핸들은 부모의 환경 핸들로부터 인코딩 설정을 계승합니다만 이 콜의 mode 에 의해 문장 핸들 자체의 인코딩 설정도 변경할 수 있습니다.

후속의 바인드 콜로 초기화되는 이 문장의 데이터 치는 이 문장 핸들의 설정을 dfault 로서 사용하는 바인드 핸들 내에 격납됩니다.

이 콜은 이 문장 핸들과 특정의 서버간의 대응 부는 작성하지 않습니다.

 

관련 함수

OCIAttrGet(), OCIStmtExecute()

 

관련 항목: 이 콜의 사용 방법의 자세한 것은,4-4 페이지의 「문장의 준비」 참조해 주세요.

 

 

 

 

 

 

 

 

OCIAttrGet()

 

용도

이 콜은 핸들의 특정의 속성을 취득할 경우에 사용합니다.

 

구문

sword OCIAttrGet ( CONST dvoid *trgthndlp,

ub4 trghndltyp,

dvoid *attributep,

ub4 *sizep,

ub4 attrtype,

OCIError *errhp );

 

파라미터

trgthndlp (IN)

: 핸들 타입의 포인터입니다. 실제의 핸들은 문장 핸들이나 세션 핸들등의 경우가 있습니다. 이 콜에 의해 인코딩을 취득하면 유저는 환

경계 핸들 또는 문장 핸들과 조합해 체크할 수 있습니다.

 

trghndltyp (IN)

: 핸들 타입입니다. 다음의 형태가 유효합니다.

_ OCI_DTYPE_PARAM, 파라미터 기술자(記述子)

_ OCI_HTYPE_STMT, 문장 핸들용

_ 2-1OCI 핸들·타입」에 나타나는 모든 핸들·타입

 

attributep (OUT)

: 속성 값의 격납 장소에의 포인터입니다. OCI_UTF16 환경 모드에서는 캐릭터 라인 속성의 값은 UTF-16 캐릭터 라인으로서 되돌려집니다.

 

sizep (OUT)

: 속성 값의 사이즈는 항상 바이트 단위입니다. 이것은 attributep   dvoid 포인터로 있기 때문입니다.

비 문자열 속성 사이즈는 OCI 라이브러리에서 벌써 인식되고 있기 때문에 대부분의 속성의 값은 NULL 로서 건네줄 수가 있습니다. text* 파라미터에서는 문자열의 길이를 취득하기 위해서 ub4 의 포인터를 건네줄 필요가 있습니다.

 

attrtype (IN)

: 꺼내지는 속성의 타입입니다. 속성 타입은 이 메뉴얼의 다음의 장에 리스트 되어 있습니다.

관련 항목: 핸들·타입과 그 읽기 가능한 속성에 대해서는 부록 A 「핸들 및 기술자의 속성」의 리스트를 참조해 주세요.

 

errhp (IN/OUT)

: 에러 발생시의 진단 정보를 위해서 OCIErrorGet()에 건네주는 에러·핸들입니다.

 

코멘트

이 콜은 핸들의 특정의 속성을 취득할 경우에 사용합니다. OCI_DTYPE_PARAM은 암묵적으로 및 명시적으로 기술하는 경우에 사용합니다. 파라미터 기술자는 다이렉트 패스 로드에서도 사용합니다. 암묵적인 기술의 경우 파라미터 기술자에게는 선택 리스트 마다 열 기술이 있습니다. 명시적인 기술의 경우 파라미터 기술자에게는 기술하는 각 스키마 오브젝트에 대한 기술 정보가 포함되어 있습니다. 톱 레벨 파라미터 기술자에 그 자체가 기술자가 되는 속성이 있는 경우 OCIAttrGet()에의 후속 콜로 속성의 형으로서 OCI_ATTR_PARAM 사용합니다.

이 콜을 사용해 환경 핸들 또는 문장 핸들의 Unicode 정보를 취득합니다.

OCIAttrGet()와 밀접하게 관련하고 있는 함수는 OCIDescribeAny()입니다. 이것은 표, , 동의어, 프로시저, 펑션, 패키지, 순서, 형태등의 기존의 스키마 오브젝트를 기술하는 범용적인 기술 콜입니다. 이 콜의 결과 기술 핸들에는 OCIAttrGet() 콜을 개입시켜 취득할 수 있는 오브젝트 고유의 속성이 이입됩니다.

다음에 이 기술 핸들에 대한 OCIParamGet()에 의해 지정 위치의 파라미터 기술자가 되돌려집니다. 파라미터 위치는 1 로부터 개시합니다. 파라미터 기술자에 대해서 OCIAttrGet()를 콜 하면 스토어드 프로시저나 스토어드 펑션의 파라미터의 특정의 속성 경우에 따라서는 표의 열기술자가 되돌려집니다.

 

OCIDescribeAny()에 의해 schema·오브젝트 기술 전체가 클라이언트 측에 캐쉬 되고 있기 때문에 이러한 후속 콜은 서버에의 라운드 트립을 따로 실시하는 필요가 없습니다. 기술 핸들에 대한 OCIAttrGet() 콜에 의해 위치의 총수도 반환하는 것이 가능합니다.

 

특히 UTF-16 모드로 루프를 실행하는 경우는 속성에 대응하고 있는 같은 포인터 변수를 재 이용해 OCIAttrGet()의 콜 후에 그 내용을 로컬 변수에 카피해 주세요. 복수의 포인터를 같은 속성에 사용하면 메모리 리크가 발생할 가능성이 있습니다.

 

관련 함수

OCIAttrSet()

 

관련 항목: 코드·fragment의 예에 대해서는,6-23 페이지의 「OCIDescribeAny()의 사용 예」 및 4-12 페이지의 「선택 리스트 항목의 기술」을 참조해 주세요.

 

 

 

 

 

 

 

 

 

 

OCIStmtExecute()

 

용도

이 콜은 어플리케이션 요구를 서버에 대응 합니다.

 

구문

sword OCIStmtExecute ( OCISvcCtx *svchp,

OCIStmt *stmtp,

OCIError *errhp,

ub4 iters,

ub4 rowoff,

CONST OCISnapshot *snap_in,

OCISnapshot *snap_out,

ub4 mode );

 

파라미터

svchp (IN/OUT)

: 서비스 문맥 핸들입니다.

 

stmtp (IN/OUT)

: 문장 핸들입니다. 서버로 실행되는 문장 및 대응에 관련된 데이터를 정의합니다.

svchp Oracle7 Server를 지시하고 있을 때 릴리스 8. x 이상에서만 서포트 된다

데이터형의 바인드를 가지는 문장 핸들을 건네주어도 무효가 됩니다.

 

errhp (IN/OUT)

: 에러 발생시의 진단 정보를 위해서 OCIErrorGet()에 건네주는 에러 핸들입니다.

 

iters (IN)

: SELECT 문 이외의 경우 이 문장이 실행되는 회수는  iters - rowoff 의 경우와 같게 됩니다.

SELECT 문에서는 iters 0(제로) 이외의 경우는 문장 핸들에 대한 정의를 실시할 필요가 있습니다. 실행하면 iters 가 사전 정의 버퍼에 패치 되어 프리패치 행 카운트에 따라 한층 더 행이 프리패치 됩니다.  SELECT 문에 의해 꺼내지는 행수가 불명의 경우는 iters 0(제로)으로 설정합니다.

이 함수는 SELECT 문 이외에 대해 iters=0 의 경우는 에러를 되돌립니다.

주의: 배열 DML 조작의 경우는 iters <= 32767 설정하는 것으로 보다 높은 퍼포먼스를 얻을 수 있습니다.

rowoff (IN)

: 이 복수 행 실행에 관련하는 배열 바인드의 데이터가 시작되는 개시 색인(開始索引)입니다.

 

snap_in (IN)

: 파라미터는 옵션입니다. 지정할 경우는 OCI_DTYPE_SNAP 형의 스냅 쇼트 기술자를 지시할 필요가 있습니다. 이 기술자의 내용은 직전의 콜의 snap_out 파라미터로부터 취득할 필요가 있습니다. 이 기술자는 SQL SELECT 가 아닐 경우는 무시됩니다.  이 기능을 사용하면 Oracle 의 복수 서비스 문맥에 따라서 데이타베이스의 커밋이 끝난 데이터에 관해서 같은 일관성이 있는 snapshot를 참조할 수 있습니다.  다만 어느 문맥으로 커밋 되어 있지 않은 데이터는 같은 스냅 쇼트를 사용해도 다른 문맥으로 참조할 수 없습니다.

 

snap_out (OUT)

: 파라미터는 옵션입니다. 지정하는 경우는 OCI_DTYPE_SNAP 형의 기술자를 지시 할 필요가 있습니다. 이 기술자에게는 현행의 Oracle 의 시스템 변경 번호가 암호화되어 격납되고 있어 후속의 OCIStmtExecute() 콜의 snap_in 에의 입력치로서 사용으로 가능합니다. 기술자는 필요 이상으로 길게 사용하지 말아 주세요. snapshot이 너무 낡았음」이라고 하는 에러가 발생합니다.

 

mode (IN)

: 다음의 모드가 유효합니다.

_ OCI_BATCH_ERRORS - 이 모드의 자세한 것은 4-9 페이지의 「OCIStmtExecute() 용의 배치 에러 모드」 참조해 주세요.

_ OCI_COMMIT_ON_SUCCESS - 이 모드로 문장을 실행했을 경우 실행이 정상적으로 종료와 실행 후에 경향 트랜잭션(transaction)커밋 됩니다.

_ OCI_DEFAULT - 이 모드로 OCIStmtExecute()를 콜 한다고 문장이 실행됩니다.  또 선택 리스트에 관한 기술 정보가 암묵적으로 되돌려집니다.

_ OCI_DESCRIBE_ONLY - 이 모드는 실행 전에 질의를 기술하는 유저용입니다. OCIStmtExecute()를 이 모드로 콜 하면 문장은 실행됩니다만 선택 리스트 기술은 되돌려집니다. 퍼포먼스를 최대로 하기 위해서 어플리케이션에서는 dfault 모드로 문장을 실행해 실행에 수반하는 암묵적인 기술을 사용하는 것을 추천 합니다.

_ OCI_EXACT_FETCH - 어플리케이션으로 패치 되는 행수가 미리 정확하게 알고 있을 때 사용합니다. 이 모드에 의해 Oracle 릴리스 8. x 이상의 모드의 프리패치가 오프가 됩니다. 또 실행 콜의 전에 정의되어 있을 필요가 있습니다.  이 모드를 사용한다고 요구한 행이 패치 된 후 커서를 취소 없애기 때문에 서버 측의 자원 사용량을 삭감할 수 있습니다.

_ OCI_PARSE_ONLY - 이 모드를 사용하면 유저는 실행 전에 질의를 해석 할 수 있습니다.  이 모드로 실행하면 질의가 해석되어 SQL 내에 해석 에러가 있는 경우는 그 에러가 되돌려집니다.  이 모드에서는 서버에의 추가 라운드 트립이 발생 하는 것에 주의할 필요가 있습니다. 퍼포먼스를 향상 시키려면 번들 조작의 일부로서 문장을 해석하는 디폴트 모드로 문장을 실행하는 것을 추천 합니다.

_ OCI_STMT_SCROLLABLE_READONLY - 결과 세트를 스크롤 가능하게 설정하는 경우는 필수입니다.  결과 세트는 갱신할 수 없습니다.  4-16 페이지의 「결과의 패치」 참조 해 주세요. 다른 모드와의 병용은 할 수 없습니다. 이러한 모드는 상호 배타적이지 않고 배합해 사용할 수 있습니다. 다만 OCI_STMT_SCROLLABLE_READONLY를 제외 합니다.

 

코멘트

이 함수는 프리 컴파일 된 SQL 문을 실행하기 위해서 사용합니다. 어플리케이션은 실행 콜을 사용해 요구를 서버에 대응 합니다. SELECT 문이 실행되면 선택 리스트의 기술이 응답으로서 암묵적으로 사용 가능하게 됩니다. 이 기술은 기술, 패치 및 형태 변환 정의용으로 클라이언트 측에 버퍼 처리 됩니다.  따라서 선택 리스트의 기술은 실행 후에만 실시하는 것이 최선의 방법입니다.

SELECT 문의 경우는 일부의 결과도 암묵적으로 사용 가능해집니다. 실행 종료의 시점에서 행이 받아 들여져 버퍼 처리됩니다. 행수가 적은 질의 에서는 프리패치 하는 것으로 패치의 마지막에 달했을 때에 서버내의 메모리가 해방되어 이것에 의해 메모리의 사용량이 삭감되도록 최적화할 수 있습니다. 프리패치 하는 행수를 결과 세트 마다 설정하는 속성 설정 콜이 정의되고 있습니다.

SELECT 문에서는 문장 핸들은 그것이 실행된 서비스·문맥에 대한 참조를 실행 종료 시에 암묵적으로 보관 유지하고 있습니다. 서비스 문맥의 완전성은 유저에게 보수의 의무가 있습니다. 암묵적인 참조는 문장 핸들이 해방되던가 또는 패치가 취소,  패치 조건의 마지막에 달할 때까지 보관 유지됩니다.

 

관련 함수

OCIStmtPrepare()

관련 항목: 4-12 페이지 「선택 리스트 항목의 기술」

 

주의: OCIStmtExecute()의 콜 전에 SELECT 문에 대해서 출력 변수를 정의하면  iters 에 의해 지정된 행수가 정의가 끝난 출력 버퍼에 직접 패치 되어 프리패치 건수와 같은 수의 추가 행이 프리패치 됩니다. 추가행이 없는 경우는 패치는 OCIStmtFetch()를 콜 하지 않고 완료합니다.

 

 

 

OCIStmtExecute() 용의 배치·에러·모드

 

OCI 에서는 배열 DML 조작을 실행할 수 있습니다. 예를 들어 어플리케이션 에서는  INSERT ,  UPDATE 문 또는 DELETE 문의 배열을 1 회의 문장 실행으로 처리할 수 있습니다. 일의성 제약 위반 등의 서버로부터의 에러를 때문에 조작중 한쪽이 실패하면 배열 조작은 중지되어 OCI는 에러를 되돌립니다. 그 경우 배열내의 나머지의 행은 모두 무시됩니다. 이 때문에 어플리케이션 에서는 나머지의 배열을 재 실행 할 필요가 있어 한층 더 에러가 발생했을 경우는 이 처리 전체를 재차 반복할 필요가 있습니다. 이것에 의해 추가의 라운드 트립이 발생 합니다.  배열 DML 조작을 용이하게 처리하기 위해서 OCI 에서는 배치 에러 모드(확장 DML 배열 기능 이라고도 불립니다)가 준비되어 있습니다. 이 모드는 OCIStmtExecute() 콜에 지정해서 ,  1 개 이상의 에러가 발생하는 경우의 DML 배열 처리를 단순화 합니다. 이 모드에서는 OCI 는 모든 행의 INSERT , UPDATE 문 또는 DELETE 문을 시행해 발생한 에러에 관한 정보를 수집(배치처리)합니다. 다음에 어플리케이션으로 이 에러 정보를 꺼내 최초의 콜로 실패한 임의의 DML 조작을 재실행할 수 있습니다.

이 방법에서는 배열내의 모든 DML 조작이 최초의 콜로 시행되어 실패한 조작을  2번째의 콜로 재 발행 할 수 있습니다.

 

이 모드는 다음과 같이 사용합니다.

1.  OCIStmtExecute() 콜의 mode 파라미터로서 OCI_BATCH_ERRORS 지정 합니다.

2.  OCIStmtExecute()로 배열 DML 조작을 실행한 후 어플리케이션에서는 문장 핸들로 OCIAttrGet()를 콜 해 OCI_ATTR_NUM_DML_ERRORS 속성을 꺼내는 것에 따라 조작 중에 발생한 에러의 번호를 꺼낼 수가 있습니다. 다음에 예를 표시합니다.

ub4 num_errs;

OCIAttrGet(stmtp, OCI_HTYPE_STMT, &num_err, 0, OCI_ATTR_NUM_DML_ERRORS, errhp);

 

3.  에러의 리스트가 꺼내지면 에러 핸들이 해방됩니다.

어플리케이션에서는  OCIParamGet()을 사용해  OCIStmtExecute() 콜에 건네 받은 에러 핸들로부터 각 에러를 행 정보와 함께 추출합니다. 이 정보를 취할려면 어플리케이션으로 OCIParamGet() 콜 용의 추가의 새로운 에러 핸들을 할당 할 필요가 있습니다. 이 새로운 에러 핸들에는 배치로서 기록 된 에러 정보가 포함되어 있습니다. 어플리케이션에서는  OCIErrorGet()로 각 에러의 구문을 취득해 새로운 에러 핸들로 OCIAttrGet()를 콜 하는 것에 의해 에러가 발생한 행의 오프셋(offset)(DML 배열내에) 취득합니다.

예를 들어 num_errs 의 결과가 꺼내진 다음에 어플리케이션으로부터 다음의 콜을 발행 할 가능성이 있습니다.

 

...

 

OCIError errhndl;

 

for (i=0; i<num_errs; i++)

 

{

 

OCIParamGet(errhp, OCI_HTYPE_ERROR, errhp, &errhndl, i);

 

OCIAttrGet(errhndl, OCI_HTYPE_ERROR, &row_offset, 0,

 

OCI_ATTR_DML_ROW_OFFSET, errhp);

 

OCIErrorGet(..., errhndl, ...);

 

...

 

다음에 어플리케이션에서는 배치로서 기록된 에러로부터 꺼내진 진단 정보를 사용해 배열 내의 해당하는 엔트리의 바인드 정보를 수정할 수 있습니다. 해당하는 바인드 버퍼가 수정 또는 갱신되면 어플리케이션으로 거기에 대응하는 DML 문장을 재 실행 할 수 있습니다. 어플리케이션에서는 최초의 실행으로 에러의 원인이 되는 행을 컴파일 시에 검출 할 수 없기 때문에 후속의 DML 바인드는 실행 시에 해당하는 버퍼를 건네주는 것으로 동적으로 실행할 필요가 있습니다. 유저는 최초의 DML 조작에서의 배열 바인드로 사용 된 바인드 버퍼를 재이용할 수 있습니다.

 

배치 에러 모드의 예

다음의 코드는 이 실행 모드의 사용 방법의 예를 나타내고 있습니다. 이 예에서는 표에 5개의 행을 (NUMBER CHAR 형태의2 개의 열과 함께) 삽입하는 어플리케이션이 있는 것으로 합니다. 게다가 2개의 행(1 3)만이 최초의 DML 조작으로 정상적으로 삽입되는 것으로 합니다. 유저는 다음에 데이터(최초의 조작으로 삽입된 잘못한 데이터)를 수정해 수정한 데이터의 UPDATE를 발행 합니다. 유저는 문장 핸들 stmtp1 stmtp2를 사용 해 INSERT UPDATE를 각각 발행 합니다.

 

OCIBind *bindp1[2], *bindp2[2];

 

ub4 num_errs, row_off[MAXROWS], number[MAXROWS] = {1,2,3,4,5};

 

char grade[MAXROWS] = {'A','B','C','D','E'};

 

...

 

/* Array bind all the positions */

 

OCIBindByPos (stmtp1,&bindp1[0],errhp,1,(dvoid *)&number[0],

 

sizeof(number[0]),SQLT_NUM,(dvoid *)0, (ub2 *)0,(ub2 *)0,

 

0,(ub4 *)0,OCI_DEFAULT);

 

OCIBindByPos (stmtp1,&bindp1[1],errhp,2,(dvoid *)&grade[0],

 

sizeof(grade[0],SQLT_CHR,(dvoid *)0, (ub2 *)0,(ub2 *)0,0,

 

(ub4 *)0,OCI_DEFAULT);

 

/* execute the array INSERT */

 

OCIStmtExecute (svchp,stmtp1,errhp,5,0,0,0,OCI_BATCH_ERRORS);

 

/* get the number of errors */

 

OCIAttrGet (stmtp1, OCI_HTYPE_STMT, &num_errs, 0,

 

OCI_ATTR_NUM_DML_ERRORS, errhp);

 

if (num_errs) {

 

/* The user can do one of two things: 1) Allocate as many */

 

/* error handles as number of errors and free all handles */

 

/* at a later time; or 2) Allocate one err handle and reuse */

 

/* the same handle for all the errors */

 

OCIError *errhndl[num_errs];

 

for (i = 0; i < num_errs; i++) {

 

OCIParamGet(errhp, OCI_HTYPE_ERROR, errhp, &errhndl[i], i);

 

OCIAttrGet (errhndl[i], OCI_HTYPE_ERROR, &row_off[i], 0,

 

OCI_ATTR_DML_ROW_OFFSET, errhp);

 

/* get server diagnostics */

 

OCIErrorGet (..., errhndl[i], ...);

 

}

 

}

 

/* make corrections to bind data */

 

OCIBindByPos (stmtp2,&bindp2[0],errhp,1,(dvoid *)0,0,SQLT_NUM,

 

(dvoid *)0, (ub2 *)0,(ub2 *)0,0,(ub4 *)0,OCI_DATA_AT_EXEC);

 

OCIBindByPos (stmtp2,&bindp2[1],errhp,2,(dvoid *)0,0,SQLT_DAT,

 

(dvoid *)0, (ub2 *)0,(ub2 *)0,0,(ub4 *)0,OCI_DATA_AT_EXEC);

 

/* register the callback for each bind handle */

 

OCIBindDynamic (bindp2[0],errhp,row_off,my_callback,0,0);

 

OCIBindDynamic (bindp2[1],errhp,row_off,my_callback,0,0);

 

/* execute the UPDATE statement */

 

OCIStmtExecute (svchp,stmtp2,errhp,2,0,0,0,OCI_BATCH_ERRORS);

 

...

 

이 예에서는 어느 행이 에러와 함께 되돌려 지는지는 컴파일 시에는 모르기 때문에 OCIBindDynamic() 콜백과 함께 사용하고 있습니다. 콜백 에서는 row_off 격납 된 에러를 포함한 행의 번호를 콜백 문맥을 통해서 건네주어 갱신 또는 수정의 필요가 있는 행만을 송신할 수 있습니다.  INSERT의 실행과 UPDATE의 실행으로는 같은 바인드 버퍼를 공유할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

OCIParamGet()

 

용도

기술 핸들 또는 문장 핸들내의 지정 위치에 있는 파라미터의 기술자를 되돌립니다.

 

구문

sword OCIParamGet ( CONST dvoid *hndlp,

ub4 htype,

OCIError *errhp,

dvoid **parmdpp,

ub4 pos );

 

파라미터

hndlp(IN)

: 문장 핸들 또는 기술 핸들입니다.  OCIParamGet() 함수는 이 핸들 용의 파라메타 기술자를 되돌립니다.

 

htype (IN)

: hndlp 파라미터에게 건네지는 핸들의 형태입니다. 다음의 형태가 유효합니다.

- OCI_DTYPE_PARAM             파라미터 기술자용

- OCI_HTYPE_COMPLEXOBJECT  복합 오브젝트 검색 핸들용

- OCI_HTYPE_STMT              문장 핸들용

 

errhp (IN/OUT)

: 에러 발생시의 진단 정보를 위해서 OCIErrorGet()에 건네주는 에러 핸들입니다.

 

parmdpp (OUT)

: 핸들 타입 OCI_DTYPE_PARAM pos 파라미터로 지정된 위치에 있어서의 파라미터의 기술자입니다.

 

pos (IN)

: 문장 핸들 또는 기술 핸들에 있어서의 위치 번호입니다. 이 정도 값에 있는 파라미터 기술자가 돌아옵니다.

 

주의: 지정 위치에 파라미터 기술자가 없는 경우는 OCI_ERROR 반홥됩니다.

 

코멘트

이 콜은 기술 핸들 또는 문장 핸들내의 지정 위치에 있는 파라미터의 기술자를 반환합니다.  파라미터 기술자는 항상 OCI 라이브러리에 의해 내부적으로 할당할 수 있습니다. OCIDescriptorFree()를 사용해 해방할 수 있습니다.  예를 들어 문장을 실행할 때마다 같은 열의 메타 데이타를 패치 하는 경우는 OCIParamGet()의 각 콜간에 파라미터 기술자를 명시적으로 해방하지 않는 한 프로그램에서는 메모리 합니다.

 

관련 함수

OCIAttrGet(), OCIAttrSet(), OCIParamSet(), OCIDescriptorFree()

 

 

 

 

 

 

 

 

OCIDefineByPos()

 

용도

선택 리스트 내의 항목을 형태와 출력 데이터 버퍼에 관련 짓습니다.

 

구문

sword OCIDefineByPos ( OCIStmt *stmtp,

OCIDefine **defnpp,

OCIError *errhp,

ub4 position,

dvoid *valuep,

sb4 value_sz,

ub2 dty,

dvoid *indp,

ub2 *rlenp,

ub2 *rcodep,

ub4 mode );

 

파라미터

stmtp (IN/OUT)

: 요구된 SQL 문의 조작에의 핸들입니다.

 

defnpp (IN/OUT)

: 정의 핸들의 포인터에의 포인터입니다. 파라미터를 NULL로 건네주면 정의 핸들을 암묵적으로 할당 할 수 있습니다. 재 정의의 경우는 비 NULL 핸들을 이 파라미터에 건네는 것이 가능합니다. 이 핸들은 이 열용의 정의 정보를 격납 하기 위해서 사용됩니다.

 

errhp (IN/OUT)

: 에러 발생시의 진단 정보를 위해서 OCIErrorGet()에 건네주는 에러 핸들입니다.

 

position (IN)

: 선택 리스트에서의 이 값의 위치입니다. 위치는 1로부터 시작되어 왼쪽에서 오른쪽에 번호가 차입니다.

예를 들면 다음의 SELECT 문장이 있다고 합니다.

SELECT empno, ssn, mgrno FROM employees;

empno 는 위치 1 ssn는 위치 2 mgrno는 위치 3이 됩니다.

 

valuep (IN/OUT)

: dty 파라미터로 지정되고 있는 타입의 버퍼 또는 버퍼의 배열의 포인터입니다. 단독의 패치 콜로 복수의 행을 패치 하는 경우는 복수의 버퍼를 지정 할 수 있습니다.

 

value_sz (IN)

: valuep 버퍼의 바이트 사이즈입니다. 데이터가 VARCHAR2 형식에서 내부적으로 격납 되어 있는 경우 필요한 문자수가 바이트 단위의 버퍼 사이즈와 다를 때는 OCIAttrSet()를 사용해 추가 지정할 수 있습니다.

멀티 바이트 변환 환경에서는 지정한 바이트수가 처리하는 문자 수에 대해서 불충분한 경우 잘라 버림 에러가 발생합니다.

OCI_ATTR_CHARSET_ID 속성이 OCI_UTF16ID(하위 호환성을 위해서 보관 유지되고 있는 사용 할 수 없는 OCI_UCS2ID 대신 지정)으로 설정되어 있는 경우는 대응하는 정의 콜과의 사이에 주고 받음을 실시하는 데이터는 모두 UTF-16 인코딩으로 간주해집니다.

 

dty (IN)

: 데이터 형입니다. 이름 첨부 데이터형(SQLT_NTY) REF(SQLT_REF)는 환경이 오브젝트 모드로 초기화되고 있는 경우만 유효합니다.

SQLT_CHAR SQLT_LNG CLOB 열에 SQLT_BIN 라고 SQLT_LBI BLOB 열로 지정 할 수 있습니다.

 

indp (IN)

: 인디케이터(indicator) 변수 또는 배열에의 포인터입니다. 스칼라 데이터형의 경우는 sb2 또는 sb2 의 배열에의 포인터입니다. SQLT_NTY 정의의 경우는 무시됩니다. SQLT_NTY 정의로는 이름 첨부 데이터형의 인디케이터(indicator) 구조체 또는 이름 첨부 데이터형의 인디케이터(indicator) 구조체 배열의 포인터는 후속의 OCIDefineObject() 콜에 의해 관련 지을 수 있습니다.

 

rlenp (IN/OUT)

: 패치 된 데이터의 길이의 배열의 포인터입니다.  rlenp 안의 각 요소는 패치 후의 행에 있는 대응하는 요소의 데이터 길이입니다( 코드 포인트의 경우는 valuep 의 데이터가 Unicode 가 아닌 한 바이트 단위입니다).

 

rcodep (OUT)

: 열 레벨의 리턴 코드의 배열의 포인터입니다.

 

mode (IN)

: 다음의 모드가 유효합니다.

_ OCI_DEFAULT - 이것은 디폴트의 모드입니다.

_ OCI_DYNAMIC_FETCH - 패치 할 경우에 데이터를 동적으로 할당할 필요가 있다. 어플리케이션에서는 이 모드를 사용할 필요가 있습니다. 유저는 OCIDefineDynamic() 을 추가로 콜 해 동적으로 할당할 수 있었던 버퍼를 받아 들이기 위해 호출 되는 콜백 함수를 설정할 수 있습니다. 이 모드에서는 valuep value_sz 파라미터는 무시됩니다.

 

코멘트

이 콜은 Oracle부터 꺼내진 데이터를 받는 출력 버퍼를 정의합니다. 이 정의는 SELECT 문장이 OCI  어플리케이션에 데이터를 되돌릴 때 필요한 로컬 스택 입니다.

이 콜은 선택 리스트 항목 용의 정의 핸들의 암묵적인 할당도 실시합니다. NULL 포인터가 *defnpp에게 건네지면 OCI 에서는 OCIHandleAlloc() 또는 OCIDefineByPos()의 콜로 이전에 할당할 수 있던 유효한 핸들을 지시합니다. 다른 주소에 대해서 핸들을 재정의하고 있는 어플리케이션의 경우는 이것이 들어맞기 때문에 복수의 패치에 같은 정의 핸들을 재이용할 수 있습니다. 열을 패치 하기 위한 속성의 정의는 1개 이상의 콜로 실행됩니다. 최초의 콜은 패치를 지정하기 위해서 필요한 최소한의 속성을 정의하는 OCIDefineByPos() 입니다. 어떤 종류의 데이터 형 또는 패치 모드에서는 OCIDefineByPos()의 콜의 뒤에 다음의 추가 정의 콜이 필요합니다.

 

_ 수열을 배열 패치하기 위한 스킵 파라미터를 설정하려면 ,

  CIDefineArrayOfStruct() 의 콜이 필요합니다.

 

_ 이름 첨부 데이터형(즉 오브젝트나 콜렉션) 또는 REF 의 패치에 적절한 속성을 설정하려면 OCIDefineObject() 의 콜이 필요합니다. 이 경우

   OCIDefineByPos() 안의 데이터 버퍼 포인터는 무시됩니다.

 

_ 이름 첨부 데이터형의 열을 가지는 복수 행을 패치 하려면 OCIDefineByPos()의 후에

   OCIDefineArrayOfStruct() OCIDefineObject() 의 양쪽 모두를 콜 할 필요가 있습니다.

 

LOB 정의에서는 버퍼 포인터는 OCIDescriptorAlloc() 콜에 의해 할당되는 OCILobLocator 형의 LOB locator의 포인터로 해 주세요.  LOB 열에는 LOB 의 값은 아니고 항상 LOB locator가 돌아옵니다.  LOB 값은 패치   locator 대해 OCI LOB 콜을 사용하여 패치 할 수 있습니다. 이것과 같은 방식이 모든 기술자 데이터 형으로 사용됩니다.

NCHAR(고정장가변장)에서는 버퍼 포인터는 필요한 NCHAR 문자를 보관 유지하는데 충분한 바이트 배열을 지시하고 있을 필요가 있습니다.

NESTED TABLE 의 열은 다른 모든 이름 첨부 데이터 형과 같이 정의 및 패치 됩니다.

기술자 또는 locator의 배열을 정의할 경우에 기술자 또는 locator의 포인터 배열을 건넬 필요가 있습니다.

캐릭터열의 배열을 정의할 경우에 문자 버퍼 배열을 건네줄 필요가 있습니다.

이 콜의 mode 파라미터에 OCI_DYNAMIC_FETCH 가 설정되었을 경우는 클라이언트 어플리케이션으로부터 실행 시에 데이터를 동적으로 패치 할 수 있습니다.  런타임 데이타는 다음의 2개의 방법으로 준비할 수 있습니다.

 

_ OCIDefineDynamic() 의 후속 콜에 의해 등록할 필요가 있는 유저 정의 함수를 사용하는 콜백 / 클라이언트 라이브러리가 패치 한 데이터를 되돌리기 위해서 버퍼가 필요하게 되면이 콜백이 불려 져 준비된 런타임 버퍼가 데이터의 일부 또는 전부를 되돌립니다.

 

_ OCI 에서 제공되는 콜을 사용하는 폴링 메카니즘. 콜백이 정의되어 있지 않는 경우는 이 모드가 됩니다. 이 경우 페치 콜에 의해 OCI_NEED_DATA 에러 코드가 되돌려져 데이터는 부분 단위의 폴링 메소드로 준비됩니다.

 

관련 함수

OCIDefineArrayOfStruct(), OCIDefineDynamic(), OCIDefineObject()

 

관련 항목:

_ OCI_DYNAMIC_FETCH 모드의 사용 방법의 자세한 것은 5-44 페이지의 「런타임·데이터 할당과 부분 단위 조작」을 참조해 주세요.

_ 정의의 자세한 것은 5-18 페이지의 「정의」 참조해 주세요.

 

 

 

 

 

 

 

OCILogoff()

 

용도

이 함수는 OCILogon2() 또는 OCILogon() 을 사용해 취득한 세션을 해방하기 위해서 사용합니다.

 

구문

sword OCILogoff ( OCISvcCtx *svchp

OCIError *errhp );

 

파라미터

svchp (IN)

: OCILogon() 또는OCILogon2() 의 콜에 사용된 서비스 문맥 핸들 입니다.

 

errhp (IN/OUT)

: 에러 발생시의 진단 정보를 위해서 CIErrorGet()에 건네주는 에러 핸들입니다.

 

코멘트

이 함수는 OCILogon2() 또는 OCILogon()을 사용해 취득한 세션을 해방 하기 위해 사용합니다.  OCILogon() 을 사용했을 경우 이 함수는 그 접속 및 세션을 종료합니다.  OCILogon2() 사용했을 경우 이 콜의 동작은 대응하는 OCILogon2() 함수가 콜 되었을 때의 mode 에 의해 정해집니다.  디폴트로는 세션/ 접속을 클로우즈 합니다.  접속 풀링의 경우 이 함수는 세션을 클로즈 해 접속을 풀에 되돌립니다.  세션 풀링의 경우 이 함수는 세션과 접속의 페어를 풀에 되돌립니다.

 

관련 함수

OCILogon(), OCILogon2()

 

관련 항목 : 어플리케이션에서의 로그 온 및 로그 오프의 자세한 것은 2-26 페이지의 「어플리케이션의 초기화, 접속 및 세션 작성」을 참조해 주세요.

 

 

 

 

 

 

 

OCIHandleFree()

 

용도

이 콜은 핸들의 할당을 명시적으로 해제합니다.

 

구문

sword OCIHandleFree ( dvoid *hndlp,

ub4 type );

 

파라미터

hndlp (IN)

: OCIHandleAlloc() 에 의해 할당할 수 있는 핸들입니다.

 

type (IN)

: 해방하는 기억 역의 형태를 지정합니다. 지정하는 형태를 다음에 나타냅니다.

_ OCI_HTYPE_CPOOL - 접속 풀 핸들

_ OCI_HTYPE_ENV - 환경 핸들

_ OCI_HTYPE_ERROR - 에러 리포트 핸들

_ OCI_HTYPE_SVCCTX - 서비스 문맥 핸들

_ OCI_HTYPE_STMT - 문장(어플리케이션 요구) 핸들

_ OCI_HTYPE_DESCRIBE - 선택 리스트 기술 핸들

_ OCI_HTYPE_SERVER - 서버 핸들

_ OCI_HTYPE_SESSION - 유저 세션 핸들

_ OCI_HTYPE_TRANS - 트랜잭션(transaction) 핸들

_ OCI_HTYPE_COMPLEXOBJECT - 복합 오브젝트 검색 핸들

_ OCI_HTYPE_SECURITY 시큐러티 핸들

_ OCI_HTYPE_SUBSCR - 예약 구독 핸들

_ OCI_HTYPE_DIRPATH_CTX 다이렉트 패스 문맥 핸들

_ OCI_HTYPE_DIRPATH_COLUMN_ARRAY 다이렉트 패스 열 배열 핸들

_ OCI_HTYPE_DIRPATH_STREAM 다이렉트 패스 스트림 핸들

_ OCI_HTYPE_PROCESS - 프로세스 핸들

 

코멘트

이 콜은 핸들에 대응 되어 있는 기억 역으로 type 파라미터로 지정된 형태에 해당하는 것을 해방합니다.

이 콜은 OCI_SUCCESS 또는 OCI_INVALID_HANDLE 을 되돌립니다.

핸들은 모두 명시적으로 할당 해제할 수 있습니다.  OCI 에서는 부모 핸들의 할당을 해제하면 자식 핸들의 할당이 자동적으로 해제됩니다.

 

관련 함수

OCIHandleAlloc(), OCIEnvInit()

[출처] 오라클 OCI|작성자 푸른바다

 

반응형
반응형
< Solaris_10 Hostname 변경 >

 

Solaris 8~9는 전부 다, 10부터는 1~3까지만 등록

 

1. /etc/inet/hosts에 name 등록

2. /etc/nodenames에 name 등록

3. /etc/hostname.인터페이스에 name 등록

4. /etc/net/ticlts/hosts에 name 등록

5. /etc/net/ticotsord/hosts에 name 등록

[출처] Solaris Hostname 변경|작성자 KREUZ

■ 작업할 파일
(1) /etc/inet/hosts ( /etc/hosts 같은 파일)
(2) /etc/inet/ipnodes
(3) /etc/nodename (없는 파일은 생성해야함)
(4) /etc/hostname.e1000g0 (pcn0 일수도 있음)
(5) /etc/net/ticlts/hosts
(6) /etc/net/ticots/hosts
(7) /etc/net/ticotsord/hosts
(8) /etc/syslog.conf (mail 에러 메시지 관련 수정)
  

 
(1) /etc/inet/hosts

 [변경 전]

 # cat /etc/inet/hosts
::1 localhost
127.0.0.1 localhost
192.168.xxx.xxx unknown # Added by DHCP

 

 [변경 후]

 # cat /etc/inet/hosts
::1 localhost
127.0.0.1 localhost
192.168.xxx.xxx [HostName] # Added by DHCP

 
(2) /etc/inet/ipnodes

 # cat /etc/inet/ipnodes
::1 localhost
127.0.0.1 localhost
192.168.xxx.xxx [HostName] # Added by DHCP

 
(3) /etc/inet/nodename

 # cat /etc/nodename
cat: cannot open /etc/nodename

 # vi /etc/nodename
[HostName]

 
(4) /etc/inet/nodename

 # cat /etc/hostname.e1000g0

 

 # vi /etc/hostname.e1000g0
[HostName]

 # cat /etc/hostname.e1000g0
[HostName]

 
(5) /etc/net/ticlts/hosts

 # vi /etc/net/ticlts/hosts
[HostName] [HostName]

 
(6) /etc/net/ticots/hosts

 # vi /etc/net/ticots/hosts
[HostName] [HostName]

 
(7) /etc/net/ticotsord/hosts

 # vi /etc/net/ticotsord/hosts
[HostName] [HostName]

 

 

(8) 재부팅 후 Host 변경 및 네트워크 확인
# reboot
# ifconfig -a
 
반응형
반응형

출처 : http://cafe.naver.com/cafec/260475

 

 

1. 동기(
同期, synchronous)

동기의 사전적 의미는 "동시에 발생하는 것" 입니다.
클라이언트서버에 "저 지금 접속했습니다." 라고 요청했다면,
서버가 "아 그래? 너 접속했구나? 너 접속했다고 해줄께." 라고 대답할 때까지 클라이언트가 무릎 꿇고 가만히 기다려야합니다.
"이게 동시에 발생하는 것과 무슨 상관이 있지?"
라고 생각하시는 분들을 위해, 간단한 예를 들어 설명해드리겠습니다.

제가 고또님께 꼭 드릴 말씀이 있어 전화를 걸었습니다.
그런데 고또님이 전화를 받지 않으십니다.
저는 고또님이 전화를 받으실 때까지 계속 전화기를 붙잡고 기다립니다.

이 과정에서 저는 전화기를 붙잡고 기다리느라 아무런 행동도 할 수 없습니다.
(물론 코를 판다던가, 하품을 한다던가 하는 자잘한 행동들은 예외지만요.)

이를 적용하면, 클라이언트는 서버가 답하기 전까지 죽어버린다는 겁니다.

그러니 클라이언트가 언제 요청할지, 서버가 언제 답할지를 프로그램 설계시에 명확히 해야겠습니다.

이를 동시에 요청하고 응답한다고 말할 수도 있지 않을까요?
(물론 완벽히 동시는 아니지만, "거의" 동시니까요 ^^)




2. 비동기(非同期, asynchronous)

비동기의 사전적 의미는 "동시에 발생하지 않는 것" 입니다.
동기 앞에 아닐 비(非)가 붙었으니 당연하려나요? ^^;
이번에는 바로 예를 들어보겠습니다.

제가 고또님께 꼭 드릴 말씀이 있어 전화를 걸었습니다.
그런데 고또님이 전화를 받지 않으십니다.
저는 전화기를 스피커폰으로 전환하고 게임을 하면서 기다립니다.

동기와는 다르게 전화를 걸면서 게임을 하고 있습니다!

이를 프로그램에 적용해볼까요?

클라이언트는 서버에게 요청을 하고, 그 요청이 오기 전까진 다른 일을 할 수 있습니다.

즉, 서버가 응답하지 않는다고해서 프로그램이 죽어버리지는 않는다는 것이죠!
(물론 서버가 응답하지 않으면 프로그램을 종료시킨다던가의 루틴은 제외하구요..)




※ "그럼 동기보다 비동기가 무조건 좋은 것이 아니냐?"

라고 하시는 분들이 계실 것 같습니다.

아닙니다. 동기와 비동기가 둘 다 존재하는 이유는 동기와 비동기가 각각 쓰임새가 다르기 때문입니다.




3. 블로킹(blocking)

블로킹"무언가를 막는다"는 뜻입니다.
무엇을 막을까요?
동기식으로 설계를 했을 때, 응답이 오기 전까지 다음 루틴으로 넘어가는 것을 막습니다.

즉, 고또님이 전화를 받으시기 전까지(응답이 오기 전까지)
다른 행동(다음 루틴)을 못하도록 막는 것이죠.

다음에 소켓 프로그래밍에 대한 예제에서 다시 설명드리겠지만,

socket 함수로 소켓을 생성하면 기본적으로 블로킹 모드로 소켓이 생성됩니다.

이 상태에서 send 함수나 recv 함수를 사용하게 돼면 응답이 있기 전까지 return을 하지 않습니다.

함수에서 계속 머뭅니다.




4. 논-블로킹(non-blocking)

앞에 "~이 아닌" 이라는 접두어 "non"이 붙었으니 "무언가를 막지 않는다."라는 뜻이겠죠?
블로킹과는 반대로 비동기식으로 설계했을 때, 응답이 왔든 안왔든 다음 루틴으로 넘어가는 것을 막지 않습니다.

고또님께 전화를 걸어 놓고(서버에 요청하고)
스피커 폰으로 전환한 뒤(서버에서 응답이 오든 안오든)
게임을 하면서(다음 루틴을 실행하면서)
고또님이 전화를 받으시면(서버에서 응답하면)
고또님과 대화하면 되는거죠.(서버와 통신)

이 또한 다음에 다시 설명드리겠지만,

fcntl 함수로 소켓을 논-블로킹 상태로 만들 수 있습니다.

이때에, send 함수와 recv 함수를 실행했을 때, 보내거나 받을 데이터가 있으면 보내고 받지만,

그렇지 않을 경우 errno.h 헤더파일에 존재하는 errno 변수에 상태를 넣어주므로

errno 변수의 값을 판단하여 어떤 행동을 할지 설계하면 됩니다.

꼭 이 방법 뿐만 아니라 다른 많은 방법으로도 비동기식으로 설계가 가능하다고 합니다.






시험이 끝난 후에 간단한 예제와 함께 돌아오겠습니다!

혹시 잘못된 점이 있으면 따끔히 지적해주세요!

읽어주셔서 감사합니다. m(_ _)m

 

반응형
반응형

 

출처 : http://parkya.tistory.com/469

 

nslookup 으로 정보수집 및 IP추적





통 해커들은 웹해킹을 수행하기 전에 정보를 수집 합니다.

그래서 기본적인 방화벽과 서버 보안설정은 필수인데 이것을 안하는 몇몇 기관들이 있어서 이번 시간에는 보안설정을 하는 방법에 대해서 알아 보도록 하겠습니다.




cmd 창에서 nslookup 명령어 입력 후 

server ns.도메인.ac.kr 을 입력해서 IP를 알아 낼 수 있습니다.




문제는 모대학의 경우 관리자가 보안설정을 허술하게 하여 문제가 될 수 있습니다.

물론 이런 정보만으로 해킹을 하는 것은 아니지만 적어도 그런 실마리를 조금이라도 주는 것은 보안적으로 좋지

않다는 것을 말씀 드리는 것입니다.



ls -t 도메인.ac.kr  을 입력하자 이렇게 서버들의 아이피 정보가 쫘~악 뿌려줍니다.

언뜻 보기엔 이걸로 뭘 하나 싶지만.. card 라던지 자세히 살펴보면 무슨업무를 수행하는 서버의 아이피 인지

유추해 낼 수 있다는 점은 자칫 해킹사고로 이어질 수도 있습니다.






특히 haksa (학사) 라고 표기되는 이 서버는 언뜻 생각해 봐도 아마 학사관리 서버.. 즉 성적관리를 담당하는

서버의 ip정보를 손에 넣을 수 있었습니다.


해킹은 크게 3가지 단계로 진행 됩니다.

(1) 정보수집 -> (2) 공격 -> (3) 사후처리: 로그삭제,백도어 설치 


여기서 첫번째 단계인 정보수집에 해당하는 것이 바로 이런 공격 대상의 서버의 아이피 정보를 수집하는

것도 포함 되는 것입니다.


이것을 막기 위해서는 보안관리자가 해당 서버의 도메인 속성에서 영역전송이 초기에는 '아무서버로 전송'

으로 되어 있는데 이것을 영역전송(이름서버 탭에 나열된 서버로만) 으로 변경 하거나 보조 DNS가 있을 경우

그쪽으로 체크를 해주어야 합니다.


이렇게 클릭한번만 해줘도 되는것은 몰라서, 또는 귀찮아서 안하게 되면 이렇게 해커의 표적이 되기 십상입니다.


윈도우7 에서 안되는 경우에는 

set type=all 이라고 옵션을 먹이고 하면 보이는 경우가 있었습니다.







* NMS (Network Management System)  에 대해서 알아 보겠습니다.

NMS는 네트워크 관리시스템을 말하며, 망을 관리하는 시스템 입니다. 대표적인 프로그램으로 솔라윈드(Solawind)가 있습니다. 


NMS는 트레이드 오프가 적용 됩니다.

즉, 편리성이 높아지고 보안성은 낮아지는 것 이런것이 대표적인 트레이드 오프 입니다.


NMS를 하기 위해서는 먼저 SNMP Protocol을 설치 해야 합니다.






- Windows 구성 요소 마법사 에서 '관리 및 모니터링 도구'를 클릭 합니다.





- SNMP(단순 네트워크 관리 프로토콜)을 체크해 주고 확인을 눌러 줍니다.





저기 윈도우 아이콘의 플러스를 눌러주면 해당 아이피의 컴퓨터의 정보를 상세히 볼 수 있습니다.

계정정보 부터 하드웨어에 대한 정보등 해당 PC의 거의 모든 정보를 수집할 수 있습니다.



* VM웨어로 실험을 할때에는 한쪽 컴퓨터에는 솔라윈드가 설치 되어 있어야 하며 다른쪽 컴퓨터는 SNMP Protocol 일 위에 설정처럼 잡아줘야 합니다.


다음으로 통신을 진행하기 위한 보안조건 2가지를 알아보도록 하겠습니다.


(1) CS(Community String)값이 일치 해야 합니다. 

기본값은 보통 public (퍼블릭) 으로 설치 되어 있습니다. 문제는 아마 전세계의 60%가 이렇게 설정 되어 있을

거라는 점입니다. 그러나 보안상 퍼블릭을 사용하면 안됩니다. 다른 CS( Community String ) 값을 사용 해야 합니다. 


(2) NMS System의 IP 주소를 지정해서 사용해야 합니다.



★ 트레이드 오프관계: 편의성이 높아지면, 보안성이 낮아 집니다.


★ UDP : 161번으로 통신을 합니다.






- 서비스에서 SNMP Service 를 클릭합니다.






- 여기 보시면 public가 기본적으로 설정 되어 있는 것을 알 수 있습니다. 이것을 

바꾸어서 설정 해 주셔야 합니다.


- 다음 호스트로부터 SNMP 패킷 받아 들이기 를 클릭 합니다.




원하는 값을 입력 합니다. 물론 여기에 설정하는 CS값(커뮤니티 스트링) 값은 NMS가 설치

되어 있는 관리자의 컴퓨터의 CS값과 일치해야 합니다.

그래서 일종의 암호의 개념으로 볼 수가 있습니다.


그후 솔라윈드로 확인해 보면 설정된 값의 시스템 정보만 확인 할 수 있습니다.








[ ICMP의 2가지 기능 ]


(1) 오류보고 (2) 질의 



[ NETSTAT 정보 ] 


netstat -na

netstat -ra  의 차이를 구별해서 알아야 합니다.


netstat는 네트워크 포트(TCP,UDP) 상태를 확인함으로서 바이러스나 해킹여부를 진단 할 수가 있죠


netstat  의 간단한 옵션을 알아보도록 하겠습니다.


-a :컴퓨터에서 수신되어 활성화 되어 있는 모든 TCP 및 UDP 포트를 표시 해줍니다

-n : 현재 다른 PC와 연결되어 있는 포트번호를 확인 할 수 있습니다 ( IP주소로 화면을 출력 )


- r : 라우팅 테이블 확인 및 연결(Connection) 되어 있는 포트번호를 확인 합니다.

- e : 랜카드에서 송수신한 패킷의 용향 및 종류를 확인합니다. -s 와 같이 사용 합니다.

- s : IP , ICMP, TCP, UDP 프로토콜의 상태를 확인 합니다.





[ 로드밸런서 (Load Balancer) ] 


: 네트워크 트래픽 Packet 들로부터 Application Port 번호를 해석하여 , Application 트래픽 부하 분산 및 우선 

순위를 관리자가 결정하고, 통제 처리할 수 있도록 해서 전체 시스템의 성능과 속도를 향상 시키는 네트워크 

장비 입니다.


[ 로드밸런싱 ]


: 클러스트의 한종류 이며, 1대의 서버 시스템에 대규모로 들어오는 요청을 여러대의 서버로 분산 처리하여

서버부하 및 트래픽 증가등의 단일서버로 인하여 발생 될 수 있는 문제점을 해결하기 위한 '부하분산서비스' 

입니다.


반응형
반응형

 

 

 

기본적으로 게스트 OS가 윈도우 Vista 이상(Server 2008 이상) 일때 ESX나 WorkStand에서 논리 하드 디스크를 Expand 시키면 바로 제어판에서 해당 파티션을 Merge 할 수 있지만 XP나 서버 2003에서는 서드 파티 툴로 가능했다.

 

그나마 XP의 경우는 파티션 매직, 파티션 위자드 등... 여러 툴이 있지만

윈도우 서버 같은 경우에는 답이 없다.

 

diskpart 로 논리적 드라이브를 연속시키는 방법도 있지만

해당 방법도 여의치 않을 경우

 

Gparted 라는 툴을 사용해서 진행하면 된다.

 

systemrescuecd-x86-3.4.1.iso

일단 까먹을까봐.. 적어놓고..

 

1. VM에서 해당 iso 파일을 물고 부팅한 다음 CD-ROM 부팅으로 우선순위 변경

2. 나오는건 죄다 엔터

3. 프롬프트 창이 나오면 (root .... > root 어쩌구 였던거 같은데) wizard 입력

4. 그래픽 모드 부팅 선택 (Recommand 방식)

5. 리눅스 GUI 부팅 완료 한 후 왼쪽 하단에 Gparted 선택.

6. 확장하려는 디스크 선택 후, 파티션 선택 한 후 Resized 이 후, apply 클릭

7. 완료 후 shutdown -h 0 으로 종료

8. 윈도우로 재부팅 chkdisk 할 때 용량 변화된거 확인

9. 내컴퓨터에서 용량 Merge 잘 됐나 확인.

10. 끝 

반응형
반응형

_open

_O_APPEND
모든 쓰기 작업 전에 파일 포인터를 파일 끝으로 이동한다.
_O_BINARY
모드로 파일을 연다. (fopen 참고)
_O_CREAT
쓰기위해 생성하고 새로 만든 파일을 연다. 만약 이미 존재한 파일이면 아무런 효과가 없다. _O_CREAT가 쓰일 때 pmode 인자를 필요로 한다.
_O_CREAT | _O_SHORT_LIVED
만약 디스크에서 flush가 가능 하지 않을때 임시로서 파일을 생성한다. _O_CREAT가 쓰일 때 pmode 인자를 필요로 한다.
_O_CREAT | _O_TEMPORARY
임시로 파일을 생성한다.; 마지막 파일 descriptor가 닫혀질때 파일은 삭제된다. O_CREAT가 쓰일 때 pmode 인자를 필요로 한다.
_O_CREAT | _O_EXCL
파일이 이미 존재한다면 에러를 리턴한다. 오직 _O_CREAT일때만 적.
_O_RANDOM
Specifies that caching is optimized for, but not restricted to, random access from disk.
_O_RDONLY
오직 읽기위해 연다.; O_RDWR or _O_WRONLY와 함께 쓰여질 수 없다.
_O_RDWR
읽고 쓰기위해 연다.; _O_RDONLY or _O_WRONLY와 함께 쓰여질 수 없다.
_O_SEQUENTIAL
Specifies that caching is optimized for, but not restricted to, sequential access from disk.
_O_TEXT
text모드로 변환되어 연다. (더 많은 정보는 Text and Binary Mode File I/O 과 fopen 참고.)
_O_TRUNC
Opens file and truncates it to zero length; file must have write permission. You cannot specify this flag with _O_RDONLY. _O_TRUNC used with _O_CREAT opens an existing file or creates a new file.
Note The _O_TRUNC flag destroys the contents of the specified file.
_O_WRONLY
오직 쓰기위해 연다.; _O_RDONLY 또는 _O_RDWR와 함께 쓰여질 수 없다.

밑에 있는 플래그는 SYS\STAT.H 에 정의 되어있다.

_S_IREAD

오직 읽기만 허락됨.

_S_IWRITE

쓰기가 허락됨(실제로 쓰기, 읽기가 허락됨).

_S_IREAD | _S_IWRITE

쓰기, 읽기가 허락됨.

_close

_read

_write

_lseek - FP를 특정한 위치로 이동한다.

SEEK_SET
Beginning of file.
SEEK_CUR
Current position of file pointer.
SEEK_END

_tell - FP위치를 얻는다.

_access - 파일 접근의 허가를 결정한다.

00 오직 존재한다.
02 쓰기 허가
04 읽기 허가
06 읽고쓰기 허가

remove - 파일을 삭재한다.

_unlink - 파일을 삭재한다.

rename - 파일이나 디렉토리의 이름을 바꾼다.

_chmod - 파일 허가 설정을 바꾼다.

_S_IWRITE
쓰기를 허락한다.
_S_IREAD
읽기를 허락한다.

_findfirst - 파일을 처음으로 검색한다.

_findnext - 다음으로 검색한다.

_findclose - 검색을 마친다.

struct _finddata_t {

unsigned attrib;

time_t time_create; /* -1 for FAT file systems */

time_t time_access; /* -1 for FAT file systems */

time_t time_write;

_fsize_t size;

char name[260];

};

_chdir - 지금 활동중인 디렉토리를 바꾼다

_mkdir - 새로운 디렉토리를 만든다.

_rmdir - 디렉토리를 삭제한다.

_getcwd - 지금 활동중인 디렉토리를 얻는다.

_splitpath - 파일 경로를 각 구성성분으로 나눈다.

_makepath - 구성성분으로부터 파일 경로를 만든다.

_getdrive - 현재의 드라이브를 얻는다.

_chdrive - 현재 활동중인 드라이브를 바꾼다.

_getdiskfree - 디스크 정보인 밑의 구조체를 얻는다.

struct _diskfree_t {

unsigned total_clusters;

unsigned avail_clusters;

unsigned sectors_per_cluster;

unsigned bytes_per_sector;

};

반응형
반응형

 

 

참고는 여러 블로그를 참고했슴

 

우선 Solaris에서 랜카드 종류마다 약간씩 이름이 다른데 아래와 같다.

 

Cpu - SPAC

scmin - 1000 baseT

bge    - 1000 baseT 

ce      - 1000 baseT

ge      - 1000 baseSX

hme    - 100  bastT

gfe     - 1000 baseT

 

Cpu - X86

e1000g - 1000 baseT

elx      - 100 baseT

pcn     - 1000/100 baseT

 

1. 우선 호스트 이름을 바꾸려면 /etc/hosts 파일을 수정해야 한다.

etc/hosts 파일은 /etc/inet/hosts 파일에 링크되어 있으며 처음에 아마 ReadOnly 일꺼니깐 chmod로 변환해서 수정해주면 되겠다.

 

맨 마지막 줄에 호스트 고유 정보를 추가해주면 되겠다. 구분자는 tab 키이니 유념바람.

::1    localhost

127.0.0.1        localhost

[호스트 IP]    [호스트 이름]    loghost

 

2. 그 다음 게이트 웨이 주소 기본 라우팅 주소를 설정해줘야 한다.

/etc/defaultrouter 에 해당 정보를 기록해주면 된다. 없으면 만들면 된다. 딱 한줄만 넣어주면 됨.

[기본 라우팅 주소]

3. 그 다음 넷마스크를 설정해주자.

/etc/netmasks의 맨 마지막 줄에 설정해주면 되는데

해당 IP 주소의 0 주소와 넷마스크를 입력

[해당 아이피 주소 4번째 자리에 xxx.xxx.xxx.0] [넷 마스크]

 

4. 그 다음 DNS로 사용할 nameserver 정보를 입력.

/etc/resolv.conf

nameserver 168.126.63.1

nameserver 168.126.63.2

domain kns.kornet.net

 

5. 마지막 dns 설정 /etc/nsswitch.conf 에서 host 엔트리에 dns를 추가해야 한다.

hosts : file dns

 

 

자 이제 추가로 하드웨어 네트워크 카드에 ifconfig 정보를 바인딩 해주는 방법인데

위에 했을시 잘 되면 추가로 설정할 필요는 없고 추가적인 팁으로 알아놓자.

 

plumb는 커널에 특정 네트워크 카드를 연결시킬때 사용한다. unplumb는 연결 해제시 사용.

ifconfig e1000g0 unplumb

ifconfig e1000g0 plumb

 

up을 이용하면 e1000g0 인터페이스에 특정 ip주소와 netmask를 올려준다.

ifconfig e1000g0 [호스트 IP 주소] netmask [넷마스크 주소] up

 

인터페이스가 특정 ip와 서브넷을 물고 있으려면 특정 파일을 수정해 줘야 한다.

파일 수정을 안하면 Reboot시 설정한 ip 주소가 사라지니 유의해야 한다.

 

1. vi /etc/hostname.[인터페이스명] 파일에 호스트 ip 주소 한줄 추가해주면 된다.

[호스트 이름]

 

라우팅 테이블을 확인해보자

 

netstat -nr

default라고 되있는 부분이 게이트 웨이 주소다. 게이트 웨이 추가 및 삭제는

route add[delete] defualt xxx.xxx.xxx.xxx

 

네트워크 관련 설정 파일을 다시 읽어 들이려면

svcadm -v restart svc:/milestone/network:default 네트워크 서비스 재시작

svcadm restart network/physical

 

반응형
반응형

 

솔라리스 10 u10의 경우 telnet과 ssh는 자동으로 설치된다.

하지만 처음에는 root 계정으로 터미널에 접속할 수 없는데 그 이유는 보안문제인지... 어쨋든

 

ssh와 telnet으로 root를 접속하고자 하면 아래의 3가지를 수정해야 한다.

 

---------------------------------------------------------------------------

참고 : http://wooriwil.blog.me/20105449038

 

1. [SSH & sFTP]

# vi /etc/ssh/sshd_config

132 PermitRootLogin yes     // no 에서 yes로 변경

#svcadm restart ssh

 

2. [Telnet]

# vi /etc/default/login

18 #CONSOLE=/dev/console // 주석 처리

 

3. [FTP]

# vi /etc/ftpd/ftpusers

5 #root                     // 주석처리

 

---------------------------------------------------------------------------

 

그 다음은 gcc를 설치해야 한다.

gcc는 libiconv 에 dependency가 걸려 있어서 libiconv 먼저 설치해야 한다.

 

해당 사이트에서 관련 패키지 들을 받을 수 있다. (가입해야 됨)

www.sunfreeware.com

 

Solaris 10의 경우

intel의 경우는 x86/Soraris

Spac의 경우 SPAC/Soraris

 

구분되어 있으니 잘 확인하고 받자.

 

gcc를 누르면 Dependencies의 libiconv를 누르고 해당 패키지 먼저 다운 받자.

뭐 시기 마다 다르니.. 일단 이 포스트를 쓸때는 libiconv-1.14-sol10-x86-local.gz 이게 최신임.

 

운영체제에서 직접 받던 받아서 ftp로 올리던...

어쨋든 적당한 위치에서 압축을 푼다.

gzip -d libiconv-1.14-sol10-x86-local.gz 또는 gunzip libiconv-1.14-sol10-x86-local.gz

 

그 다음 설치..

pkgadd -d libiconv-1.14-sol10-x86-local

 

엔터랑 y 잘 눌러서 설치 한다.

만약에 패키지를 한곳에 모으고 싶으면 /var/spool/pkg로 복사해서 설치할 것.

 

그다음 gcc를 받아 압축을 풀고 설치 한다. gcc-3.4.6-sol10-x86-local.gz

gzip -d gcc-3.4.6-sol10-x86-local.gz

pkgadd -d gcc-3.4.6-sol10-x86-local

 

만약 gcc를 설치했을 때 이상이 있으면 Solaris 10 설치 CD 패키지에

SUNWarc라는 패키지를 재설치 해본다. 위치는 cdrom/sol_10_811_x86/Solaris_10/Product/SUNWarc 임.

해당 패키지를 /var/spool/pkg로 옮긴 뒤

pkgadd -d /var/spool/pkg로 재설치. 잘 되어 있으면 안해도 됨.

 

자 그 다음 gcc의 환경 변수를 설정할 차례다.

/etc/profile에 PATH를 등록.

 

PATH=/usr/local/bin:$PATH 를 추가해주고. env로 확인해봤을시 현재 디렉토리가 PATH로 안 잡혀 있으면 . 추가 해줄것

ln -s /usr/local/bin /usr/bin/gcc 로 모든 사용자가 gcc를 사용할 수 있게 링크 추가.

 

마지막으로 설치가 잘 되었는지 확인해보려면 간단하게 하나 짜서 컴파일 해보면 된다.

#gcc

gcc : no input files

이렇게 나오면 정상이라고 할 수 있음.

 

---------------------------------------------------------------------------------------

자 이제 네트워크를 설정해보자.

해당 부분은 다음 글로 대체!

 

 

 

반응형
반응형

 

 

윈도우에서 마우스 우 클릭으로 Context Menu에 현재 폴더에서 cmd 창을 띄우는 방법 3가지를 소개합니다.

 

1. Shift + 우클릭으로 "여기서 명령 창 열기" 메뉴 이용. (윈도우 기본 제공)

2. 폴더 아이콘을 우 클릭하여 해당 폴더의 위치에서 관리자 cmd 콘솔 창 띄우기.(사용자 특별 설정)

3. 바탕화면에서 우 클릭하여 "c:\user\유저명\Desktop"에서 관리자 cmd 콘솔 창 띄우기.(사용자 특별 설정)

 

 

두 가지 방법 모두 regedit 부분을 수정해야 함.

우선 관리자 권한으로 띄우느냐 마느냐에 대한 부분은 선택임

 

 

1. Shift + 우클릭으로 "여기서 명령 창 여기" 메뉴 이용

윈도우에서 기본적으로 제공하는 기능입니다.

하지만 굳이 shift를 누르지 않아도 작동하게 하고자 한다면 [HKEY_CLASSES_ROOT\Directory\Backgroud\shell\cmd]의 값 중

Extended 라는 값이 있는데 이 값을 제거해주면 굳이 Shift 안 눌러도 됩니다.

 

 

2. 특정 폴더 우 클릭으로 (관리자 권환)으로 콘솔 창 띄우기

2-1. 특정 폴더 우 클릭 후 관리자 권한으로 띄우기 

[HKEY_CLASSES_ROOT\Folder\shell]에서 새로 만들기로 runas 키값을 만들고 그 하위로 command 키 값도 만듭시다.

runas를 클릭하고 기본값의 데이터를 "현 위치에서 관리자 콘솔창 띄우기" 라고 입력해 놓고 (자기 맘대로 입력하셈)

command에서 기본 값은 "c:\windows\system32\cmd.exe /s /k pushd "%V" 라고 입력

 

2-2. 특정 폴더 우 클릭 후 일반 사용자 권환으로 띄우기

[HKEY_CLASSES_ROOT\Folder\shell]에서 "현 위치에서 콘솔창 띄우기" 라고 키값을 만들고 그 하위로 command 키 값도 만듭시다.

그 다음 command에서 기본 값을 "c:\windows\system32\cmd.exe /s /k pushd "%V" 라고 입력

 

차이는 runas를 만들고 안 만들고의 차이입니다. (runas 는 관리자 UAC 창이 띄고 안 뜨고의 차이 인듯)

 

 

3. 바탕 화면에서 우 클릭하여 (관리자 권한)으로 콘솔 창 띄우기

3-1. 바탕 화면에서 우 클릭으로 관리자 권한으로 띄우기

[HKEY_CLASSES_ROOT\Directory\Backgroud\shell]에서 새로 만들기로 runas 키값을 만들고 그 하위로 command 키 값도 만듬.

runas를 클릭하고 기본값의 데이터를 "현 위치에서 관리자 콘솔창 띄우기" 라고 입력해 놓고 (자기 맘대로 입력하셈)

command에서 기본 값은 "c:\windows\system32\cmd.exe /s /k pushd "%V" 라고 입력

 

2-2. 바탕 화면에서 우 클릭 후 일반 사용자 권환으로 띄우기

[HKEY_CLASSES_ROOT\Directory\Backgroud\shell]에서 "현 위치에서 콘솔창 띄우기" 라고 키값을 만들고 그 하위로 command 키 값도 만듬.

그 다음 command에서 기본 값을 "c:\windows\system32\cmd.exe /s /k pushd "%V" 라고 입력

 

특정 폴더에서 만들기와 차이는 키 값의 생성 위치 입니다. Folder 냐 Directory 냐...

 

 

 

 

반응형
반응형

 

 

 

1. JAVA_HOME

자바 설치 디렉토리

ex) C:\Program\Java\jdk.1.7.0_04

 

 

2. PATH - 전역으로 해도 되고 사용자로 해도 되지만 기본적으로 사용자 설정만

ex) %JAVA_HOME%\bin 추가.

 

3. CLASS_PATH

ex) %JAVA_HOME%\lib;. 추가

 

반응형
반응형

굉장히 도움이 될 것 같아서 퍼옴..

출처 : http://cafe.daum.net/oddtip/Jxkw/94?docid=1CBe5Jxkw9420081218175643]

 

AIX, HP-UX, SOLARIS 특징 및 명령어 비교
     
Directory AIX HP-UX SOLARIS
Root filesystem / {/dev/hd4} / {/dev/vg00/lvol1} / {/dev/vx/dsk/rootvol}
Home Directory /home {/dev/hd1} /home {/dev/vg00/lvol4} /export/home
      /dev/vx/dsk/home}
  /tmp {/dev/hd3} /tmp {/dev/vg00/lvol6} /tmp
      /dev/vx/dsk/swapvol}
  /usr {/dev/hd2} /usr {/dev/vg00/lvol7} /usr
  /var {/dev/hd9var} /var {/dev/vg00/lvol8} /var
Sample configuration files - /usr/newconfig  
User Accounts AIX HP-UX Solaris
Password files /etc/passwd /etc/passwd /etc/passwd
  /etc/security/passwd /tcb/files/auth/r/root /etc/shadow
Groups file /etc/group /etc/group /etc/group
  /etc/security/group /etc/logingroup  
Maximum # of user ID 4294967295 2147483647 2147483647
Allow/Deny remote login /etc/security/user /etc/securetty /etc/default/login
  {rlogin=true} {console} {CONSOLE=/dev/console}
User nobody's id # 4294967294 -2 60001 & 65534(nobody4)
Group nobody's id # 4294967294 -2(nogroup) 60002 & 65534(nogroup)
Recover root password boot from CD/Tape ISL>hpux -is boot cdrom -s
  Installation/Maintenance vi /tcb/files/auth/r/root mount /dev/c0t0d0s0 /mnt
  Start Limited Shell vi /etc/shadow vi /mnt/etc/shadow
  getrootfs hdisk0    
  vi /etc/security/passwd    
Create new user mkuser useradd useradd
Delete user rmuser userdel userdel
List users lsuser -f ALL logins logins
Modify user account chuser -a usermod usermod
General Commands AIX HP-UX Solaris
Unique host ID hostid uname -i hostid
Administrator smit sam admintool
Performance monitor top top top
  monitor glance  
System activity reporter sar sar sar
Virtual Memory statistics vmstat vmstat vmstat
I/O statistics iostat iostat iostat
Error logs alog -o -t boot dmesg dmesg
  errpt    
Physical RAM 1M TB 4TB 16TB
Shared Memory 64K TB 8TB  
Process Data Space 384K TB 4TB  
Swap device /dev/hd6 /dev/vg00/lvol2 /dev/vx/dsk/swapvol
Swap file type /etc/swapspaces swap swap
Display swap size lsps -a swapinfo -a swap -l
Activate Swap swapon -a swapon -a swap -a
Printers AIX HP-UX Solaris
Printer Queues /etc/qconfig /etc/lp/interface/* /etc/lp/interfaces/*
Stop LP stopsrc -s lpd lpshut /usr/lib/lp/lpshut
Start LP startsrc -s lpd lpsched /usr/lib/lp/lpsched
Submit print jobs enq lp lp
  lp   lpr
  lpr    
  qprt    
LP statistics enq -A lpstat lpstat
  lpq    
  lpstat    
  qchk    
Remove print jobs cancel cancel cancel
  lprm   lprm
  qcan    
  enq -x    
Add printer queue smit mkpq lpadmin -p pq lpadmin -p pq
Remove Printer queue smit rmpq lpadmin -x pq lpadmin -x pq
Make default printer export LPDEST="pq" lpadmin -d pq lpadmin -d pq
TCP/IP AIX HP-UX Solaris
Network IP configuration lsattr -E -l inet0 /etc/rc.config.d/netconf /etc/hostname.*
      /etc/inet/*
      /etc/defaultrouter
Hosts IP addresses /etc/hosts /etc/hosts /etc/inet/hosts
Name service switch /etc/netsvc.conf /etc/nsswitch.conf /etc/nsswitch.conf
Network parameters no -a ndd -h ndd /dev/[tcp|ip]
Routing daemon gated gated in.routed
NIC Configurations ifconfig -a lanscan -v ifconfig -a
Secondary IP Address ifconfig en0 alias IP ifconfig lan0:1 IP ifconfig hme0:1 IP up
       
Login prompt HERALD @ telnetd -b /etc/issue BANNER @
  /etc/security/login.cfg   /etc/default/telnetd
Increase the # of pseudo-terminals odmget -q "attribute=num and uniquetype=pty/pty/pty" PdAt | sed "s/0-64/0-512/" | rebuild your kernel with these new values NPTY=# {/etc/system}
  odmchange -q "attribute=num and uniquetype=pty/pty/pty" -o PdAt NSTRPY=# set pt_cnt = # {SYSV}
      set npty = # {BSD}
  chdev -l pty0 -anum=256 -P reboot  
  reboot   {/etc/iu.ap}
    insf -d ptys -n # ptsl 0 # ldterm ttcompat
    insf -d ptym -n #  
    insf -d pts -s # -e -v halt
      boot -r
Maximum # of ptys 512 {MAXUSERS} 176 {BSD}
      3000 {SYSV}
Remote Shell remsh remsh rsh
  rsh    
YP/NIS service binder /usr/lib/netsvc/yp/ypbind /usr/lib/netsvc/yp/ypbind /usr/lib/netsvc/yp/ypbind
System Files AIX HP-UX Solaris
NFS exported /etc/exports /etc/exports /etc/dfs/dfstab
      /etc/dfs/sharetab
NFS Client mounted directories /etc/xtab /etc/xtab /etc/rmtab
Max File System 128 GB 128 GB 1 TB
Max File Size 64 GB 128 GB 1 TB
Max # File Descriptors 64 K 60~ K 64 K
DISK/LVM Commands AIX HP-UX:Disk &Filesystem SOLARIS
Filesystem table /etc/filesystems /etc/fstab /etc/vfstab
Free disk blocks df -k bdf df -k
Device listing lsdev -C /sbin/ioscan sysdef
Disk information bootinfo -s hdisk# diskinfo /dev/rdsk/c#t#d# format -d c#t#d#
      format>current
      format>inquiry
Disk Label lspv -l hdisk# pvdisplay -v /dev/dsk/C#t#d# prtvtoc
LVM Concepts Partition logical extents sub disk
  Volume logical volume Volume
      Plex
  Volume group volume group disk group
Journal Filesystem type jfs vxfs vxfs
Default volume group /dev/rootvg /dev/vg00 /dev/vx/dsk/rootdg
Display volume group lsvg -l rootvg vgdisplay -v vg00 vxprint -l -g rootdg
Modify physical volume chpv pvchange  
Prepare physical disk mkdev -c disk -l hdisk# pvcreate vxdiskadd
List physical volume lspv pvdisplay vxprint -dl
Remove disk from volume group reducevg vgreduce vxdg rmdisk
Move logical volumes to another physical volumes migratepv pvmove vxassist move
Create volume group mkvg vgcreate vxdg init
Remove volume group   vgremove  
Volume group availability chvg vgchange  
  varyonvg    
  varyoffvg    
Restore volume group   vgcfgrestore  
Exports volume group exportvg vgexport vxdg deport
Imports volume group importvg vgimport vxdg import
Volume group listing lsvg vgscan  
Change logical volume characteristics chlv lvchange vxedit set
List logical volume lslv lvdisplay vxprint -vl
Make logical volume mklv lvcreate vxassist make
Extend logical volume extendlv lvextend vxassist growto
Reduce logical volume AIX reduce LV lvreduce vxassist shrinkto
Remove logical volume rmlv lvremove vxedit rm
Prepare boot volumes bootlist -m normal lvlnboot vxbootsetup
Remove boot volumes   lvrmboot  
Extend File system chfs -a size=# extendfs -F vxfs -s # vxva
    fsadm -F vxfs -b {LE * 1024} mkfs -M
Reduce/Split mirrors rmlvcopy lvsplit  
Merge mirrors   lvmerge  
Create mirrors mklv -c 2 lvcreate -m 1 vxassist mirror
Add mirrors mklvcopy lv 2 lvextend -m 1  
Create striped volumes mklv -u 3 -S 64K lvcreate -i 3 -I 64 vxassist make vol 100mb layout=raid5
System recovery tape mksysb -i /dev/rmt0 /opt/ignite/bin/make_recovery  
Backup savevg -i rootvg fbackup ufsdump
Restore restvg frecover ufsrestore
MISC AIX HP-UX SOLARIS
Startup script /etc/rc /sbin/rc /sbin/init.d
Kernel /usr/lib/boot/unix_up /stand/vmunix /kernel/genunix
Kernel Parameters lsattr -E -l sys0 kmtune sysdef- i
    kmsystem  
Reconfigure the kernel   cd /stand/build vi /etc/system
  chdev -l sys0 -a /usr/lbin/sysadm/system_prep -v -s system reboot
    vi system  
    mk_kernel -s system  
    cd /stand  
Reconfigure the kernel   mv system system.prev  
    mv vmunix vmunix.prev  
    mv dlkm dlkm.prev  
    mv ./build/system system  
    kmupdate /stand/build  
       
List modules   kmadmin -s modinfo
Load module   kmadmin -L modload
Unload module   kmadmin -U modunload
Initialize system install_assist set_parms initial sys-unconfig
Physical RAM bootinfo -r grep -i Physical /var/adm/syslog/syslog.log prtconf
Kernel Bits getconf WORD_BIT getconf KERNEL_BITS isainfo -kv
Crash utility crash crashutil crash
Machine model uname -m model uname -imp
  bootinfo -m uname -m  
OS Level oslevel uname -r uname -r
Run Level who -r who -r who -r
Core dump files /var/adm/ras /var/adm/crash /var/crash/`uname -n`
Boot single user Key on service mode/F4 ISL>hpux -iS ok boot -s
  Boot from CD/Tape    
  Select Maintenance    
  Limited function Shell    
Maintenance mode   ISL>hpux -lm ok boot -as
Interrupt Key   control-B Stop-A
Return to console   co ok go
Software AIX HP-UX SOLARIS
Install Software installp -a swinstall pkgadd
Uninstall software installp -u swremove pkgrm
List installed software lslpp -L all swlist pkginfo
Verify installed software lppchk -v swlist -l fileset -a state pkginfo -i
      pkginfo -p
List all files lslpp -f fileset swlist -l file fileset pkgchk -l package
List installed patches instfix -i swlist -l patch patchadd -p
    what /stand/vmunix  
Package owner lslpp -w path swlist -l file | grep path pkgchk -l -p path
SW Directory /usr/lpp /var/adm/sw/ /var/sadm
Devices AIX HP-UX SOLARIS
Devices /dev /dev /devices
Install devices for attached peripherals cfgmgr -v insf -e drvconfig
      devlinks
      disks
      tapes
      ports
Remove device rmdev -l rmsf rem_drv
Device drivers lscfg lsdev prtconf -D
CPU lsdev -Cc processor ioscan -fnC processor psrinfo -v
List Terminal lsdev -Cc tty ioscan -fnC tty pmadm -l
Diagnostics diag stm /usr/platform/`uname -m`/
      sbin/prtdiag
      ok test-all
      /opt/SUNWvts/bin/sunvts
Whole Disk /dev/hdisk# /dev/dsk/c#t#d0 /dev/c#t#d0s2
CDROM /dev/cd0 /dev/dsk/c#t2d0 /dev/dsk/c#t6d0s2
CDROM file type cdrfs cdfs hsfs
Rewinding tape drive /dev/rmt0 /dev/rmt/0m /dev/rmt/0
Non-rewinding tape drive /dev/rmt0.1 /dev/rmt/0mn /dev/rmt/0n
Floppy drive /dev/rfd0 - /dev/diskette
Links AIX HP-UX SOLARIS
FAQ AIX-FAQ HP-UX FAQ Solaris 2 FAQ
Online Manual AIX 4.3 Books HP-UX 11.00 Collection Solaris 7 Documentation
Technical Support RS/6000 TechSupport IT Resource Center SunSolve
Phone Number 1-800-CALL-AIX 1-800-633-3600 1-800-USA-4SUN
Free Software Bull HP-UX Ports Sun Freeware
Certification www.ibm.com education.hp.com suned.sun.com

 

잘 알아놓고 두고두고 써야겠당

 

 

 

반응형

'OS > Common' 카테고리의 다른 글

유닉스 언어 설정 확인 및 변경  (0) 2013.10.02
Z 확장자 압축해제  (0) 2013.07.09
해당 바이너리의 비트 확인하기  (0) 2012.05.21
ftp 사용법 [명령어]  (0) 2011.10.20
Tar 와 Gzip Bzip2사용법  (0) 2011.10.20
반응형

 

AIX에서 사용하는 컴파일러는 기본적으로 xl c/C 인데

xlc는 c Compiler이며 xlC는 C++ Compiler가 되겠다.

 

리눅스는 gcc/g++ , HP-UX는 cc/aCC 와 매칭되는 컴파일러들인데

해당 시스템에 해당 컴파일러가 어디에 위치하고 설치되어 있는데 그리고 각각 어떠한 Fileset을 가지고 있는지 알아보자

 

우선 일반적으로 AIX 시스템에는 /usr/bin에 해당 컴파일러들의 심볼릭 링크가 걸려있는데 xlc, xlC 등의 실행은 이곳에서도 실행 시킬 수 있다.

문제는 각각 C/C++ Compiler Fileset이 설치가 되어 있는지 안 되어 있는지 확인하고자 할 때 어떻게 해야 하냐는 건데

 

우선 일반적으로 바이너리가 설치되는 위치를 살펴보자.

 

/usr/vac/bin     <- XL C Compiler Binary 설치 위치

/usr/vacpp/bin  <- XL C++ Compiler Binary 설치 위치

 

각각의 디렉토리에 가보면 xlc, xlc_r, xlC, xlC_r 부터 시작해서 뭐 이상한 바이너리가 잔뜩 있는데...

ls -la 해서 가만히 살펴보면 심볼릭 링크가 되어 있는 것을 따라가다 보면 신기하게도 죄다 xlc로 귀결된다.

어떤 바이너리를 실행시켜도 결국에는 xlc가 실행된다는건데, 이는 AIX의 XL 컴파일러가 내부적으로 실행 시킨 바이너리 파일을 기준으로

다른 전처리 옵션을 타는게 아닌가 싶은데.. 뭐 자세한 동작 원리는 아직 잘 모르겠다.

 

우선적으로 AIX 시스템의 경우 /usr/lpp에 보면 xlC 부분도 있긴 한데 이는 SW Directory로 해당 소프트웨어의 Description을 확인할 수 있는 뭐... 그런거 같다. 정확하게는 이것도 아직 공부 중임. 어쨋거나 AIX에서 소프트웨어가 설치될때 installp 를 사용하는데 이를 사용하여 설치된 소프트웨어는 /usr/lpp에서 관리된다는 사실 알아놓으면 좋을꺼 깥다.

 

그렇다면 IBM 공식 홈페이지에 적혀 있는 각각 Compiler의 Fileset을 살펴보자

각각의 Fileset이 현재 AIX 서버 머신에 설치되어 있는지 확인하고자 한다면

 

lslpp -la | grep [fileset 명] 을 입력해주면 되겠다.

 

(XL C/C++ V8.0 for AIX 기준)

 

XL C compiler filesets

The following filesets are included in the XL C compiler.

Table 3. XL C compiler filesets
Fileset name Fileset description
vac.C IBM XL C compiler
vac.include IBM XL C compiler include files
vac.man.LANG
Note:
LANG is one of: en_US, EN_US, ja_JP, Ja_JP, JA_JP, zh_CN, Zh_CN, ZH_CN.
IBM XL C compiler manual pages
vac.lib IBM XL C compiler libraries
vac.aix50.lib IBM XL C compiler libraries for AIX 5
vac.lic IBM XL C license files
Note:
For licensed customers only
vac.msg.LANG.C
Note:
LANG is one of: en_US, EN_US, ja_JP, Ja_JP, JA_JP, zh_CN, ZH_CN.
IBM XL C compiler messages

 

XL C++ compiler filesets

The following filesets are included in the XL C/C++ compiler.

Note:
All of the filesets required for the XL C compiler, except vac.ndi and vac.licAgreement, are also required for the XL C/C++ compiler.

Table 4. XL C/C++ compiler filesets
Fileset name Fileset description
vacpp.cmp.aix50.lib IBM XL C/C++ libraries for AIX 5.1, 5.2 and 5.3
vacpp.cmp.aix50.tools IBM XL C/C++ tools for AIX 5.1, 5.2 and 5.3
vacpp.cmp.core IBM XL C/C++ compiler
vacpp.cmp.include IBM XL C/C++ compiler include files
vacpp.cmp.lib IBM XL C/C++ libraries
vacpp.cmp.rte IBM XL C/C++ compiler application runtime
vacpp.cmp.tools IBM XL C/C++ tools
vacpp.lic IBM XL C/C++ license files
vacpp.licAgreement IBM XL C++ electronic license agreement files
vacpp.memdbg.aix50.lib IBM XL C/C++ user heap/memory debug AIX 5.1, 5.2 and 5.3 libraries
vacpp.memdbg.aix50.rte IBM XL C/C++ user heap/memory debug AIX 5.1, 5.2 and 5.3 runtime
vacpp.memdbg.lib IBM XL C/C++ user heap and memory debugger static library
vacpp.memdbg.rte IBM XL C/C++ user heap and memory debugger runtime
vacpp.msg.LANG.cmp.core
Note:
LANG is one of: en_US, EN_US, ja_JP, Ja_JP, JA_JP, zh_CN, ZH_CN.
IBM XL C/C++ compiler messages
vacpp.msg.LANG.cmp.tools
Note:
LANG is one of: en_US, EN_US, ja_JP, Ja_JP, JA_JP, zh_CN, ZH_CN.
IBM XL C/C++ tools messages
vacpp.man.LANG
Note:
LANG is one of: en_US, EN_US, ja_JP, Ja_JP, JA_JP, zh_CN, ZH_CN.
IBM XL C/C++ compiler manual pages

C++ runtime filesets

The following filesets are included in the IBM XL C/C++ Enterprise Edition V8.0 for AIX compiler installation package, and must be installed with the compiler.

Table 5. C++ runtime filesets
Fileset name Fileset description
xlC.adt.include C Set ++ application development toolkit
xlC.aix50.rte C Set ++ runtime for AIX 5.1, 5.2 and 5.3
xlC.msg.LANG.rte
Note:
LANG is one of: en_US, ja_JP, Ja_JP.
C Set ++ runtime messages
xlC.rte C Set ++ runtime

 

 

 

반응형

'OS > AIX::' 카테고리의 다른 글

AIX xlc 컴파일러 비트 설정  (0) 2014.01.09
AIX의 2가지의 프로그래밍 모델  (0) 2014.01.09
AIX Thread Dump 분석 방법  (0) 2012.08.22
AIX 라이브러리 버전 확인  (0) 2012.07.12
AIX 컴파일 정보  (0) 2011.10.05

+ Recent posts