Archive for the Category » DATABASE «

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)]

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;

 

more »

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=  를 참고하여 해결.

 

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

oracle filesystem full

발생한 문제

hpux, oracle 9i 상에서,

/oracle filesystem full

1. trace 화일(*.trc) 삭제

2. cdump 화일 (core) 삭제

이후, instance는 정상 실행되나, 어플리케이션에서, temporary tablespace를 사용할 수 없다는 메시지 발생

정확한 에러 메시지는 확인하지 못하였으나,

SQL> select tablespace_name, sum(bytes)/1024/1024 mb
f rom dba_temp_files
group by tablespace_name;

TABLESPACE_NAME                                                      MB
———————————————————— ———-
TEMP

SQL> select ss.tablespace_name,sum((ss.used_blocks*ts.blocksize))/1024/1024 mb
from gv$sort_segment ss, sys.ts$ ts
where ss.tablespace_name = ts.name
group by ss.tablespace_name;

TABLESPACE_NAME                                                        MB
————————————————————– ———-
TEMP                                                                    0

크기가 표시되지 않고 있음.

SQL> select name from  v$tempfile;

NAME
——————————————————————————–
/oracle/oradata/temp01.dbf

SQL> select file_name from dba_temp_files;

FILE_NAME
——————————————————————————–
/oracle/oradata/temp01.dbf

화일 존재.

instance를 재실행해도 마찬가지.

결국에, temporary tablespace를 offline 했다가 online했더니, 정상 작동.

temporary tablespace는 alter talbespace temp offline; 처럼 했을때 offline되지 않으므로,

SQL> alter database tempfile ‘/oracle/oradata/temp01.dbf’ offline;

SQL> alter database tempfile ‘/oracle/oradata/temp01.dbf’ online;

SQL> select tablespace_name, sum(bytes)/1024/1024 mb

from dba_temp_files

group by tablespace_name;

TABLESPACE_NAME                                                      MB

———————————————————— ———-

TEMP                                                               8590

 

 

hpux 오라클 .profile 화일

umask 022
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10gr2
export ORACLE_SID=orcl
export TMPDIR=$ORACLE_BASE/tmp
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORA_NLS10=$ORACLE_HOME/nls/data
export NLS_LANG=American_America.KO16KSC5601
export NLS_DATE_FORMAT=’YYYY-MM-DD HH24:MI:SS’
export PATH=$ORACLE_HOME/bin:/usr/bin:/sbin:/usr/ccs/bin:/usr/bin/X11:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/lib:/usr/lib:$ORACLE_HOME/rdbms/lib
export SHLIB_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/lib32:/usr/lib
export ORACLE_HOSTNAME=`hostname`
export PS1=`hostname`:’${PWD}/$ ‘
alias ls=’ls -F’

Category: DATABASE, HPUX  Tags:  Leave a Comment

hp-ux 클러스터와 오라클

오늘 어찌어찌하여 도움을 받아서 처리하긴 했는데,
검색해보니, 아래와같은 글이 나온다.
hp-ux 클러스터와 오라클

http://dbsecurity.egloos.com/6407920

ora-01081

shutdown 했는데, 정상적인 셧다운이 안되서 강제로 오라클 프로세스들 kill
시스템 재부팅! 요거 클러스터에 오라클 HA구성이란걸 몰라서 한시간 헤맸다.
암튼, 도움을 받아 겨우겨우 부팅해서 오라클 실행(startup)시키니
ora-01081 에러
shutdown abort; 한후 다시 startup
일단 된다… ㅠㅠ

oracle 패치후 에러..

오라클 잘 설치하고 패치까지 했는데,
ora-01092 에러 발생.
찾아보니, 오라클 엔진만 패치되고 데이타베이스가 패치되지 않아서 그렇다고 한다.
해결책은?
$sqlplus /nolog
SQL> conn /as sysdba
SQL> startup upgrade;
SQL>@$ORACLE_HOME/rdbms/admin/catupgrd.sql
…..
한시간 이상 걸림.. …
아무튼 끝나고나면 shutdown immediate;
이후 startup 했는데 ora-16038발생
처리후,
SQL>@$ORACLE_HOME/rdbms/admin/utlrp.sql
SQL> exit
$ORACLE_HOME/install/changePerm.sh 실행

Category: DATABASE  Tags: ,  Leave a Comment

오라클 데이타 복구… 무식한방법…

관리중인 오라클서버에서 게시판 데이타를 삭제했다고 복구해 달라는 부탁을 받았다.

근데, 다 하고 보니 너무 무식한 방법을 사용한것 같다.

아무튼, 아래와 같은 방법으로 작업했다.

백업되어 있는 archive log화일과, dbf화일 ctl화일들을 모두  복사했다. 그리고, 오라클을 다른 컴퓨터에 설치한후에, 원래 화일들 이름을 바꾸고, 백업한 화일을 같은위치에 복사해 넣었다.
SQL> startup
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: ‘/xxx’

SQL> recover database;
Media recovery complete.
SQL> alter database open;

Database altered.

그리고 삭제된 데이타를 찾아보니 잘 있다 … 하하..

그러나 너무나 무식한 방법이었다…
아주 간단한 방법이 있었는데 그것은…..

SELECT * FROM [TABLE_NAME] AS OF TIMESTAMP (SYSTIMESTAMP – INTERVAL ’100′ MINUTE);

삭제하고 commit 했어도 삭제된 데이타를 보여준단 말이다.
오라클의 flash back기능이란다…
있어도 무식해서 못써먹었으니… 이런 세상에나…

다음번에는 간단하게 써 먹어봐야 겠다.

Bad Behavior has blocked 31 access attempts in the last 7 days.