oracle python 연동 예제.

오라클과, python연동 시키는 cx_Oracle을 http://cx-oracle.sourceforge.net/ 에서 다운로드 받어 설치한다. prec ompile 패키지는 윈도우용과 리눅스용만 있는것 같다.

아래는 테스트 코드(Lotto 테이블에서, 491회 당첨번호 추출하는 예제)

listener name: oracle
listener port: 1521
oracle SID: orcl
oracle user/passwd: fox/fox
table name: lotto

>>> import cx_Oracle
>>> cx0=cx_Oracle.makedsn(“oracle”, 1521, “orcl”)
>>> connection=cx_Oracle.connect(“fox”, “fox”, cx0)
>>> cursor=connection.cursor()

>>> cursor.execute(“select * from lotto where idx=491”)
<__builtin__.OracleCursor on <cx_Oracle.Connection to fox@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=oracle)(PORT=1521)))(CONNECT_DATA=(SID=orcl)))>>

>>> print cursor.fetchall()
[(491, 8, 17, 35, 36, 39, 42, 4)]

freebsd su –

가상머신에 freeBSD설치하고 사용자등록, su – 했는데…

> su –
su: Sorry

이유는 알고보니, su 를 사용할 수 있는 사용자는 wheel 그룹에 등록된 사용자만 가능하다고…

pw user mod [user_id] -G wheel

groups로 확인해보면, 사용자 그룹에 wheel이 추가되었음을 알 수 있다.

또 다른 방법으로는 /etc/pam.d/su 에서 설정을 변경하는 방법이 있다.

 

AIX 서비스 실행관련…

telnet 접속 안될때 확인

lssrc -a 로 실행중인 서비스 확인, telnet은 inetd가 제어하므로, lssrc -a | grep -i inetd

active상태가 아니면 아래 커맨드로 시작.

startsrc -s inetdd

만약, inetd가 실행중이라면, kill -HUP [inetd pid]와 같은 효과인 아래 커맨드 수행.

refresh -s inetd

서비스 정지는

stopsrc -s inetd

 

RedHat ES4 컴파일러 업그레이드 하기?

RedHat ES4 서버에 설치된 컴파일러는 gcc 3.4버전이다.  여기에 어플리케이션 설치후 실행하니, 컴파일러가 gcc4.0 이상이 필요하다는 메시지가 나왔다. 문제는, 현재 설치된 서버의 서브스크립션이 등록되어 있지 않고, 서브스크립션도 구매하지 않았기 때문에, up2date를 사용할 수 없다는 점이다. (물론, up2date를 한다고 gcc 4.0이상으로 업그레이드 되리라는 보장도 없다.)

얼마전 libstdc++ 를 잘못 건드렸다가 kernel panic을 경험한터이므로, 가상머신에 RedHat ES4를 설치, 업그레이드를 미리 수행해 보기로 했다.

일단,

[root@localhost ~]# rpm -qa | grep gcc
gcc-g77-3.4.3-9.EL4
libgcc-3.4.3-9.EL4
gcc-c++-3.4.3-9.EL4
gcc-java-3.4.3-9.EL4
gcc-3.4.3-9.EL4

[root@localhost ~]# rpm -qa | grep glib
glibc-2.3.4-2
glib2-2.4.7-1
glib-1.2.10-15
glibc-headers-2.3.4-2
glibc-common-2.3.4-2
dbus-glib-0.22-11.EL
glib2-devel-2.4.7-1
glibc-kernheaders-2.4-9.1.87
glibc-devel-2.3.4-2

로 컴파일러에 필요한 패키지들을 검색.

RedHat ES5 에서 아래 화일 가져옴.

gcc-4.1.2-42.el5.i386.rpm
glibc-2.5-24.i386.rpm
gcc-c++-4.1.2-42.el5.i386.rpm
glibc-2.5-24.i686.rpm
gcc-gfortran-4.1.2-42.el5.i386.rpm
glibc-common-2.5-24.i386.rpm
gcc-gnat-4.1.2-42.el5.i386.rpm
glibc-devel-2.5-24.i386.rpm
gcc-java-4.1.2-42.el5.i386.rpm
glibc-headers-2.5-24.i386.rpm
gcc-objc-4.1.2-42.el5.i386.rpm
glibc-utils-2.5-24.i386.rpm
gcc-objc++-4.1.2-42.el5.i386.rpm
glib-devel-1.2.10-20.el5.i386.rpm
glib-1.2.10-20.el5.i386.rpm
glib-java-0.2.6-3.fc6.i386.rpm
glib2-2.12.3-2.fc6.i386.rpm
glib-java-devel-0.2.6-3.fc6.i386.rpm
glib2-devel-2.12.3-2.fc6.i386.rpm
libgcc-4.1.2-42.el5.i386.rpm

rpm -ivh –force –nodeps *.rpm 을 수행하여 컴파일러 강제 업그레이드하고, gcc 버전 확인

[root@localhost rpm]# gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure –prefix=/usr –mandir=/usr/share/man –infodir=/usr/share/info –enable-shared –enable-threads=posix –enable-checking=release –with-system-zlib –enable-__cxa_atexit –disable-libunwind-exceptions –enable-libgcj-multifile –enable-languages=c,c++,objc,obj-c++,java,fortran,ada –enable-java-awt=gtk –disable-dssi –enable-plugin –with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre –with-cpu=generic –host=i386-redhat-linux
Thread model: posix
gcc version 4.1.2 20071124 (Red Hat 4.1.2-42)

아래와 같은 샘플코드를 컴파일

a.c

#include <stdio.h>
#include <stdlib.h>

main()
{
printf(“gcc is ok!!!\n”);
}

오류가 발생

[root@localhost ~]# gcc a.c
gcc: error trying to exec ‘cc1’: execvp: No such file or directory

[root@localhost ~]# find / -name cc1 -print
/usr/libexec/gcc/i386-redhat-linux/3.4.3/cc1

[root@localhost ~]# rpm -qf /usr/libexec/gcc/i386-redhat-linux/3.4.3/cc1
cpp-3.4.3-9.EL4

위과정을 보면, cc1의 버전과 업그레이드한 gcc의 버전이 맞지 않아서 발생하는 에러라 추정했고,

[root@localhost rpm]# rpm -ivh –force –nodeps cpp-4.1.2-42.el5.i386.rpm
warning: cpp-4.1.2-42.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:cpp ########################################### [100%]

이번엔 아래처럼 ld관련 오류 마찬가지로 버전 차이라 생각되어,

[root@localhost ~]# gcc a.c
/usr/bin/ld: unrecognized option ‘–hash-style=gnu’
/usr/bin/ld: use the –help option for usage information
collect2: ld returned 1 exit status

[root@localhost ~]# rpm -qf /usr/bin/ld
binutils-2.15.92.0.2-10.EL4

[root@localhost rpm]# rpm -ivh –force –nodeps binutils-2.17.50.0.6-6.el5.i386.rpm
warning: binutils-2.17.50.0.6-6.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:binutils ########################################### [10

이제, 컴파일은 잘되며, 생성된 실행화일 실행해보니,

[root@localhost rpm]# gcc a.c
[root@localhost rpm]# ./a.out
gcc is ok!!!

마지막으로 서버 재부팅해보았다. 걱정하던 커널패닉은 발생하지 않았다.

oracle statspack…

원문: http://www.akadia.com/services/ora_statspack_survival_guide.html

원문을 번역한것은 아니며, 원문을 참고하여, statspack을 설치, 구성하였음.

oracle STATSPACK의 설치와 보고서 생성.

1. statspack이 사용할 테이블 스페이스(perfstat) 생성.

SQL> create tablespace perfstat
2 datafile ‘/ora_data/stats_pack/perfstat.dbf’ size 1000M reuse
3 extent management local uniform size 512k
4 segment space management auto
5 permanent
6 online;

reuse 옵션: 해당 위치에 동일한 파일이 있는 경우 그 화일을 재사용. 옵션 사용하기전에 확인해야 할듯.

2.  설치스크립트가 있는곳($ORACLE_HOME/rdbms/admin)으로 이동하여 설치 시작한다. 비밀번호는 perfstat, 사용할테이블 스페이스는 이전에 생성한 perfstats, temporary 테이블스페이스는 temp 를 사용한다.

SQL> start spcreate.sql

Choose the PERFSTAT user’s password
———————————–
Not specifying a password will result in the installation FAILING

Enter value for perfstat_password: perfstat
perfstat

Choose the Default tablespace for the PERFSTAT user
—————————————————
Below is the list of online tablespaces in this database which can
store user data. Specifying the SYSTEM tablespace for the user’s
default tablespace will result in the installation FAILING, as
using SYSTEM for performance data is not supported.

Choose the PERFSTAT users’s default tablespace. This is the tablespace
in which the STATSPACK tables and indexes will be created.

TABLESPACE_NAME CONTENTS STATSPACK DEFAULT TABLESPACE
—————————— ——— —————————-
EXAMPLE PERMANENT
PERFSTAT PERMANENT
SNOWFOX PERMANENT
SYSAUX PERMANENT *
USERS PERMANENT

Pressing <return> will result in STATSPACK’s recommended default
tablespace (identified by *) being used.

Enter value for default_tablespace: PERFSTAT

Using tablespace PERFSTAT as PERFSTAT default tablespace.

Choose the PERFSTAT user’s Temporary tablespace.

TABLESPACE_NAME CONTENTS DB DEFAULT TEMP TABLESPACE
—————————— ——— ————————–
SNOWFOX_TEMP TEMPORARY
TEMP TEMPORARY *

Pressing <return> will result in the database’s default Temporary
tablespace (identified by *) being used.

Enter value for temporary_tablespace: TEMP

……
SQL> set echo off;
Creating Package STATSPACK…

Package created.

No errors.
Creating Package Body STATSPACK…

Package body created.

No errors.

NOTE:
SPCPKG complete. Please check spcpkg.lis for any errors.

3. statspack 삭제.

설치시 원하지 않는 테이블스페이스나, 비밀번호를 사용했다면, 삭제후 다시 설치하면된다.

삭제는

SQL> @spdrop.sql

다시 설치하려고 start spcreate.sql 하면, 제대로 설치되지 않는다. 이때는 perfstat user를 삭제한다.

SQL> drop user perfstat;

혹시

SQL> drop user perfstat;
drop user perfstat
*
ERROR at line 1:
ORA-01922: CASCADE must be specified to drop ‘PERFSTAT’

이런 에러가 난다면,

SQL> drop user perfstat cascade;

statspack을 완전히 삭제하려면,

SQL> @spdrop.sql

SQL> DROP TABLESPACE perfstat INCLUDING CONTENTS AND DATAFILES;

 

Continue reading

HP rp3440 DAT drive 교체.

HP rp3440 의 DAT drive (DAT 72)의 버튼이 눌리지 않아서 새것으로 교체.

아래 문서를 참고.

http://www.ischo.net/hpux/6449

외장 1U DAT이므로, 서버를 끌 필요는없었고,  kcmodule 로 커널의 tape 상태 확인. ioscan하면 디바이스 화일은 생성되어 있으나, 실제 작동하지 않음. 그래서, insf -eC tape한후 작동시켜 보니 잘 됨.

ubuntu kvm 서버에 osx guest(해킨토시?) 설치. -결국 실패

1. 설치는 아래와 같이.

 virt-install –connect qemu:///system -n osx -r 1024 -f /home2/VM2/osx.vimg -s 15 -c /home/snowfox/OS/Snow_Leopard_10.6.1-10.6.2_SSE2_SSE3_Intel_AMD_by_Hazard.iso –vnc –noautoconsole –os-type none

여기서, 설치에 사용한 iso 이미지는 crack되어 있는 이미지이다.

2. osx 설치시 처음 부팅할때, apple관련 화일이 없다고 나온다. 이때는 ctrl+ALT+Del로 재부팅. 이후, 그냥 엔터 치지 말고 F8을눌러 부팅하자.

3. 그냥 아무생각 없이 설치를 하다보면, 나중에 OSX설치할 하드디스크가 보이지 않는다. 나는 이과정에서 엄청 헤맸다. 결론은, 디스크가 포맷되어 있지 않기 때문이다. 여기서 아래 그림에 나오는(처음것은 영어버전으로 설치. 두번재 것은 한글을 선택했을때, 즉 몇번 헤맸기 때문에 나중에 보니 스샷도 하나는 영문, 하나는 한글… ;ㅡㅡ) 유틸리티를 실행하여, 디스크를 포맷해 주자.

 

 

이것은 결국 실패했다. 설치 마치고 재부팅이 되는데, 이때, 무한 재부팅이 반복되며, OS가 올라오지 않았다. 혹시, 성공하신 분 있으면 알려주시기 바란다.

oracle SGA 크기 변경

SQL> show parameter sga;

NAME TYPE VALUE
———————————— ———– ——————————
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 272M
sga_target big integer 272M

SQL> alter system set sga_max_size = 300M scope=spfile;

System altered.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

SQL> show parameter sga;

NAME TYPE VALUE
———————————— ———– ——————————
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 300M
sga_target big integer 272M

SQL> alter system set sga_target=300M scope=both;

System altered.

SQL> show parameter sga;

NAME TYPE VALUE
———————————— ———– ——————————
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 300M
sga_target big integer 300M

 

오라클 data file 이동하기.

http://leejehong.tistory.com/entry/datafile-rename-%EA%B2%BD%EB%A1%9C%EB%B3%80%EA%B2%BD-%ED%95%98%EA%B8%B0

temp01.dbf화일 변경시에 에러났지만, 나중에 확인해보니, 문제되지 않았음.

컨트롤화일 이동은

http://ethernet0.tistory.com/21

컨트롤 화일 이동시 실수를 했다. 컨트롤화일 수만큼

SQL> alter system set control_files=’/oradata/orcl/control01.ctl’ scope=spfile;

System altered.

SQL> alter system set control_files=’/oradata/orcl/control02.ctl’ scope=spfile;
System altered.

SQL> alter system set control_files=’/ora_data/orcl/control03.ctl’ scope=spfile;

System altered.

이렇게 하는 실수를…!!!

shutdown 했다가 startup하니.

SQL> select value from v$spparameter where name=’control_files’;

VALUE
——————————————————————————–
/ora_data/orcl/control03.ctl

그래서, 다시

SQL> alter system set control_files=’/oradata/orcl/control01.ctl’,’/oradata/orcl/control02.ctl’, ‘/oradata/orcl/control03.ctl’ scope=spfile;

요렇게 했건만,

ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: ‘/oradata/orcl/system01.dbf’
ORA-01207: file is more recent than control file – old control file

요런 에러가… ;ㅡㅡ

이것저것 해봤는데, 해결 안될듯… 테스트용 서버라 다행… 휴…

암튼, 이것저것 해 본 덕분에, 아래의 에러가!!!

SQL> conn /as sysdba
Connected to an idle instance.
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 285212672 bytes
Fixed Size 2020192 bytes
Variable Size 134220960 bytes
Database Buffers 142606336 bytes
Redo Buffers 6365184 bytes
Database mounted.
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
SQL> shutdown abort;
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

위 에러는 http://www.superuser.co.kr/superuserboard/view.html?id=333&code=oracle&start=500&position=  를 참고하여 해결.

 

아무튼, 컨트롤화일도 이동 성공… 한번의 실수 때문에, 여러가지 에러가 유발되었음.

linux watch

c shell에는 repeat라는, 특정 커맨드를 반복해서 실행 할 수 있는 명령어가 있다(아마, 내장 커맨드였던가?). 꽤 유용하게 썼던 기억이 있다.

리눅스에도 비슷한 커맨드가 있는데, 바로 watch다.

사용법은 간단하다.

예를 들어서, 대용량 화일을 복사한다고 하자. 그러면 얼마나 복사되었는지 확인하려고, ls 나 df 같은 커맨드를 주기적(?)으로 실행하게 될 것이다. 그건 너무 귀찮지 않은가? 그럴 때 바로 watch를 사용한다.

#watch -d -n 5 ls -alh

Every 5.0s: ls -alh Tue Mar 20 01:18:04 2012

total 65G
drwxr-xr-x 2 root root 4.0K 2012-03-15 18:31 .
drwxr-xr-x 5 root root 4.0K 2012-03-20 00:29 ..
-rwxr-xr-x 1 root root 24G 2012-03-20 00:47 cent57.vimg
-rwxr-xr-x 1 root root 12G 2012-03-19 23:20 solaris10.vimg
-rwxr-xr-x 1 root root 12G 2012-03-10 19:22 ubuntu.vimg
-rwxr-xr-x 1 root root 24G 2012-03-20 00:57 win7.vimg
-rwxr-xr-x 1 root root 22G 2012-03-20 00:29 xp.vimg

-d 옵션은 이전과 다른 부분이 있다면 하이라이트로 표시해주는 옵션이며, -n 5 는 5초 간격으로 명령어(ls -alh)를 실행하라는 뜻이다.

단점이 있다면, 사용자 인터럽트를 받을때 까지 계속 실행된다는 것이다. 즉, 중지는 사용자가 직접 해야한다는 뜻.