레이블이 oracle인 게시물을 표시합니다. 모든 게시물 표시
레이블이 oracle인 게시물을 표시합니다. 모든 게시물 표시

2013년 2월 4일 월요일

ORA-01652

*** 2008/10/13 16:20 작성한 내용 ***


ORA-01652 : unable to extend temp segment by 128 in table space TEMP
메세지가 출력된다면....

주로 두가지 원인때문인데

temp tablespace를 구성하는 data file의 size가 작은 경우랑
temp tablespace의 max extents에 도달한 경우이다...


첫번째 원인인 경우 일단 temp tablespace의 tempfile크기를 확인한다

SQL>SELECT * FROM DBA_TEMPFILES
2 WHERE TABLESPACE_NAME = 'TEMP';

확인 후 tablespace 공간을 세가지중 한가지 방법으로 추가한다
 
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE'/ORADATA/TEMP02.DBF' SIZE 100M; or
SQL>ALTER DATABASE TEMPFILE'/ORADTA/TEMP01.DBF' AUTOEXTENT ON; or
SQL>ALTER DATABASE TEMPFILE"/ORADATA/TEMP01.DBF" RESIZE 100M;
 
두번째 원인인 경우 v$sort_segment를 확인해서 현재 할당된 크기가 얼마인지 확인한다
그리고 할당할 수 있는 최대 extent의 크기가 얼마인지 확인한다
 
SQL>SELECT max(blocks), max(bytes)
2 FROM DBA_FREE_SPACE
3 WHERE tablespace_name = 'TEMP';

sqlplus에서 sql 튜닝을 위한 간단한 setting

*** 2008/12/18 22:28 작성한 내용 ***


자동 실행 계획 보기
Set AUTOTRACE [OFF, ON, TRACE (ONLY)] [EXPLAIN] [STATISTICS]

SQL> set autotrace on : autotrace 설정
SQL> set autotrace traceonly : SQL문 실행과 숨기기
SQL> set autotrace traceonly explain : 통계 정보 조회하지 않고 실행 계획만 조회

통계정보 읽기
정보구분 :  설명
db block gets : current gets에 대한 논리적 I/O 수
consistent gets : read-consistent gets에 대한 논리적 I/O수
redo size : (DML문에 대해) 생성된 redo의 양
sorts(memory) : 메모리에서 수행된 정렬 횟수
sorts(disk) : 임시 디스크 스토리지를 사용해 수행된 정렬 횟수
physical gets : 디스크에서 읽혀진 블럭 수

SQL> r
1 select group_name user_group
2 from cab_contact_group_info_tb
3 where tid = 90720342
4 and gid = ( select gid
5 from cab_contact_group_tb
6 where tid = 90720342
7 and cid = 407222006
8 and rownum = 1)
9*
Elapsed: 00:00:00.01
Execution Plan
----------------------------------------------------------
Plan hash value: 1180018063
---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
---------------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 92 | 8 (0)| 00:00:01 |
|* 1 | TABLE ACCESS BY INDEX ROWID | CAB_CONTACT_GROUP_INFO_TB | 1 | 92 | 3 (0)| 00:00:01 |
|* 2 | INDEX UNIQUE SCAN | CAB_CONTACT_GROUP_INFO_TB_PK | 1 | | 2 (0)| 00:00:01 |
|* 3 | COUNT STOPKEY | | | | | |
|* 4 | TABLE ACCESS BY INDEX ROWID| CAB_CONTACT_GROUP_TB | 35663 | 1358K| 5 (0)| 00:00:01 |
|* 5 | INDEX RANGE SCAN | IDX_CAB_CONTACT_GROUP_TB_TID | 12605 | | 4 (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
1 - filter("TID"=90720342)
2 - access("GID"= (SELECT /*+ */ "GID" FROM "CAB_CONTACT_GROUP_TB" "CAB_CONTACT_GROUP_TB" WHERE
ROWNUM=1 AND "TID"=90720342 AND "CID"=407222006))
3 - filter(ROWNUM=1)
4 - filter("CID"=407222006)
5 - access("TID"=90720342)
Note
-----
- dynamic sampling used for this statement

Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
156 consistent gets
0 physical reads
0 redo size
521 bytes sent via SQL*Net to client
492 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
1 rows processed

이번 프로젝트 하면서 이넘의 그룹 땜에 몇날며칠을 고생을 했다.................제길.....
인덱스 타는거부터 시작해서..................... 간단한데도 불구하고 쿼리 짜는게 왜케 힘든지..
헌데 이런 좋은 setting 법이 있을 줄이야.....
모르면 손발이 고생한다더니...ㅋㅋㅋㅋ

개발기에서는 잘도 돌아가는것이 엄청난 양이 들어 있는 테이블을 조회하게 했더니 결국 뻗어 버리더라는.........
이런게 있다는걸 진작에 알았더라면 빨리 수정했을텐뎅...흠냐..

공부하자 제발...ㅋㅋㅋㅋㅋ

ORA-28000

*** 2010/08/21 12:11 작성한 내용 ***
 
 
10g에서 일정수 이상 로그인 실패시 계정에 lock이 걸린다
그리곤 'ORA-28000: the account is locked' 같은 에러를 뿜어 내는데
처음설치시에도 락이 걸려있는 계정들이 있다

일단 확인하기

SQL> select username, account_status, to_char(lock_date, 'yymmdd hh24:mi') lock_date
2 from dba_users;

위와 같이 하면 전체 계정에 대한 상태가 나타나는데....

account_status가 OPEN이 아닌 EXPIRED & LOCKED나 LOCKED(TIMED) 면 락이 걸린거....ㅋ
lock_date를 보면 딱 설치한날에 바로 락이 걸려 있는걸 확인할수가 있다... 흠냐..

필요한 계정에 대해 락을 함 풀어보자

SQL> alter user 계정명 account unlock;

이러면 락이 풀린다 ㅎㅎ

참고로 락이 걸리기 위한 횟수를 알아보려면

SQL> select p.profile, p.resource_name, p.limit
2 from dba_users u, dba_profiles p
3 where p.profile = u.profile
4 and username = '계정명';

이러면 되는데

PROFILE RESOURCE_NAME LIMIT
------------------ --------------------------------------- ---------------------
DEFAULT COMPOSITE_LIMIT UNLIMITED
DEFAULT SESSIONS_PER_USER UNLIMITED
DEFAULT CPU_PER_SESSION UNLIMITED
DEFAULT CPU_PER_CALL UNLIMITED
DEFAULT LOGICAL_READS_PER_SESSION UNLIMITED
DEFAULT LOGICAL_READS_PER_CALL UNLIMITED
DEFAULT IDLE_TIME UNLIMITED
DEFAULT CONNECT_TIME UNLIMITED
DEFAULT PRIVATE_SGA UNLIMITED
DEFAULT FAILED_LOGIN_ATTEMPTS 10
DEFAULT PASSWORD_LIFE_TIME UNLIMITED
PROFILE RESOURCE_NAME LIMIT
DEFAULT PASSWORD_REUSE_TIME UNLIMITED
DEFAULT PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION NULL
DEFAULT PASSWORD_LOCK_TIME UNLIMITED
DEFAULT PASSWORD_GRACE_TIME UNLIMITED

여기서 FAILED_LOGIN_ATTEMPTS 값이 제한 횟수인거다
이건 귀찮아서 캡쳐 대신 그냥 복사붙여넣기 신공을......ㅋ

제한을 두기 싫다면 그 제한을 풀어버리면 된다

SQL> alter profile default limit FAILED_LOGIN_ATTEMPTS UNLIMITED;

후훗..... 간단하지 아니한가......ㅋㅋ

export / import

*** 2008/10/21 20:04 작성한 내용 ***


다른 설명 필요 없이 간단한 예제로 확인하기.....
정의가 궁금하다면 구글링~~~~~으로 해결하장...ㅎㅎ

$ sqlplus '/as sysdba'
SQL>startup
Database opened.
SQL>host

여기서 sqlplus가 아닌 운영체제로 돌아간다는게 포인트.....ㅎㅎ
오라클과 상관없이 백업가능하다는 얘기..

$ mkdir /oracle/exp_test/
$ cd /oracle/exp_test
$ exp hr/hr tables=employees,departments rows=y file=/oracle/exp_test/emphr.dmp
Export terminated successfully with warnings.

확인을 하면 이런 파일이 하나 생겼겠지
/oracle/exp_test/emphr.dmp

이건 hr의 2개의 테이블이 파일 형태로 빠진것....

$ exit
exit
SQL>

테스트를 위해 일단 export시킨 두개의 테이블을 drop 시키자

SQL> drop table hr.employees cascade constraint;
Table dropped.
SQL> drop table hr.departments cascade constraint;
Table dropped.

테이블 확인을 하면
ORA-00942: table or view does not exist
요딴 에러가 뜨겠징.....

이걸 import를 이용하여 복원시킨다면 오라클과 아무 상관없이 복원가능
즉, 서비스 중단이라는걸 하지 않아도 된다는 얘기가 된다
import 역시 운영체제 콘솔에서 실행한다

SQL>host
$ imp hr/hr tables=employees,departments rows=y file=/oracle/exp_test/emphr.dmp
. importing HR's objects into HR
. . importing table "EMPLOYEES" 107 rows imported
. . importing table "DEPARTMENTS" 27 rows imported
About to enable constraints...
Import terminated successfully without warnings.
$ exit
exit
SQL>

다시 해당 테이블을 확인하면 이전의 데이터가 그대로 있겠지..
정말 간단하면서도 쉬운 백업과 복원 기술이 된당.....ㅎㅎ
더군다나 DB를 stop시키지 않아도 사용할수 있는 상당히 매력있는 방법.....
이런걸 실무에서 사용할 일이 있을까나........ㅋㅎ

JEUS Shared Server 설정

*** 2009/01/20 05:04 작성한 내용 ***


Jeus는 이미 pool을 사용하고 있어서 아무 문제가 없고.....
어플 데몬은 pool 적용을 아무리해도 되질 않길래 결국 Oracle server #1, #2 중에서 #2번을 shared로 구성하기로 결정났다

일단 서버 #1, #3번의 어플데몬이 DB#2을 바라보고 있기에 #1, #3의 접속 정보 및 DB#2 parameter 값을 수정을 했다

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.1.75)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=testdb)(SERVER=SHARED)))

server=shared 만 추가해주면 되는구만.....ㅋ
defult는 dedicated이라는것도 알아두고...

DB쪽이야.... DBA가 설정을 하겠지만 간단하게 적자면...
initTESTDB#2.ora 파일에 sessions, dispatchers, shared_servers, max_dispatchers, max_shared_servers 의 초기화 파라미터 값들을 추가수정해주면 될듯...

그리고 데몬중지 -> listener 종료 -> instance 종료 -> listener 시작 -> instance 시작 -> 데몬시작 순으로 적용을 하면 끝.......ㅋㅋ

헌데 이렇게 10분이면 끝날 작업이 DB#2를 바라보는 서버 #2번의 jeus 땜에 시간을 정말 많이 끌었다
이미 pool을 사용하고 있는데 DB server 가 shared 로 구성됐다고 자기도 shared로 붙어 버린다는...

흠.... 요거 아무리 구글링을 해도 답이 나오질 않는다

지금 사용하는건 6버전이라......... 더군다나 WEBMain.xml을 사용도 하지 않는데...
WEBMain.xml 파일만 건드는것만 나온다는............... ㅡㅡ;;;
우린 JEUSMain.xml을 건들어야 되는데........
결국 jeus 기술자를 불러서 설정을 했는데 너무나도 간단히....

<data-source>의 <database>안에
<property>
<name>URL</name>
<type>java.lang.String</type>
<value>jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.16.1.75)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=testdb)(SER
VER=DEDICATED)))</value>
</property>

를 추가시켜 주었다...... 그리고 중복되는 parameter 값들은 주석처리...
재시작...

아 머리아퍼!!!!!

10g 수동 설치

*** 2011/01/24 11:20 작성한 내용 *** 
 
 
프로젝트 서버 설정시 시행착오를 너무나 많이 겪어서 조금이라도 시간을 단축하고자 오랜만에 블로그 작성해봄..ㅋㅋ
 
OS : CentOS release 5.5 (Final)
DB : ORACLE 10g 10.2.0
디렉토리 경로는 상용 서버 기준으로 작성
 
첨부터 xWindow 상에서 설치가 된다면 아래 작업은 필요가 없지만
상용 서버 작업을 하면서 설치 중간에 다운되는 현상이 발견되어 수동설치를 하였음
 
**. 사전작업 및 오라클 엔진 설치 (중략….)
오라클 설치시 원격 및 로컬에서 xWindow 상에서 설치를 해야됨 (9i 부터 텍스트설치 불가능)
하지만 처음 설치할 때 데이터베이스와 같이 설치를 하니 오류 발생
해결방안으로 데이터베이스 설치를 선택하지 않고 오라클 엔진만 설치 후 데이터베이스는 추후 수동설치

 
아래부터는 수동설치 절차

 
1. DB가 설치될 경로 및 이름 생성 (sid : solution)
 
> mkdir -p /usr/local/oracle/product/10.2.0/db_1/admin/solution/adump
> mkdir -p /usr/local/oracle/product/10.2.0/db_1/admin/solution/bdump
> mkdir -p /usr/local/oracle/product/10.2.0/db_1/admin/solution/cdump
> mkdir -p /usr/local/oracle/product/10.2.0/db_1/admin/solution/udump
> mkdir -p /usr/local/oracle/product/10.2.0/oradata/solution/
 
adump : audit 관련 trace log
bdump : b/p 관련 frace log 및 alert log
cdump : core dump 경로, 비정상적인 종료등에 대한 log
udump : u/p 관련 trace log
script 오라클 생성 스크립트 위치 (dbca 생성 옵션)
pfile : 기본 pfile 위치
dpdump : 10g NF, datapump directory
 
 
 
2. inital parameter 생성 및 설정
 
parameter 설정 시 pool_size 에 유의 해야됨
아래 pool_size 값의 합이 sga_target 값을 넘어서면 안됨
여기선 초기 설정 값으로 512M 로 지정함
아래 값이 잘못 설정되면 아래의 6번 작업 시에 shared_pool error 발생
 
sysdba 접속 후 nomount 상태서 show parameter 로 설정된 값을 확인한다
 
> vi $ORACLE_HOME/dbs/initsolution.ora
 
solution.__java_pool_size=4194304
solution.__large_pool_size=4194304
solution.__streams_pool_size=0
*.audit_file_dest='/usr/local/oracle/product/10.2.0/db_1/admin/solution/adump'
*.background_dump_dest='/usr/local/oracle/product/10.2.0/db_1/admin/solution/bdump'
*.core_dump_dest='/usr/local/oracle/product/10.2.0/db_1/admin/solution/cdump'
*.user_dump_dest='/usr/local/oracle/product/10.2.0/db_1/admin/solution/udump'
*.compatible='10.2.0.1.0'
*.control_files='/usr/local/oracle/product/10.2.0/oradata/solution/control01.ctl','/usr/local/oracle/product/10.2.0/oradata/solution/control02.ctl','/usr/local/oracle/product/10.2.0/oradata/solution/con
trol03.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='solution'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=solutionXDB)'
*.job_queue_processes=10
*.nls_language='KOREAN'
*.nls_territory='KOREA'
*.open_cursors=300
*.pga_aggregate_target=16777216
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=536870912
*.sga_max_size=524288000
*.shared_pool_size=209715200
*.db_cache_size=209715200
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
 
 
 
3. password file 생성
 
orapwSID 로 생성
entries : sysdba 권한부여자 최대수
password : sys암호
 
> orapwd file=$ORACLE_HOME/dbs/orapwsolution password=oracle entries=5
 
 
 
4. DB 생성 할 SID로 변경
 
> echo $ORACLE_SID 현재 SID 확인
> export ORACLE_SID=solution 변경
 
 
 
5. 오라클 인스턴스 생성
 
> sqlplus / as sysdba
sql> startup nomount
sql> @db_install.sql
 
CREATE DATABASE solution
logfile
group 1 ('/usr/local/oracle/product/10.2.0/oradata/solution/redo01.log') size 10m reuse,
group 2 ('/usr/local/oracle/product/10.2.0/oradata/solution/redo02.log') size 10m reuse,
group 3 ('/usr/local/oracle/product/10.2.0/oradata/solution/redo03.log') size 10m reuse
maxlogfiles 5
maxlogmembers 5
maxloghistory 1
maxdatafiles 100
maxinstances 1
controlfile reuse
datafile '/usr/local/oracle/product/10.2.0/oradata/solution/system01.dbf' size 325m reuse autoextend on next 10m maxsize unlimited
sysaux
datafile '/usr/local/oracle/product/10.2.0/oradata/solution/sysaux01.dbf' size 600m reuse autoextend on next 10m maxsize unlimited
undo tablespace undotbs1
datafile '/usr/local/oracle/product/10.2.0/oradata/solution/undotbs01.dbf' size 200m reuse autoextend on maxsize unlimited;
 
인스턴스 상태 확인 (status : open)
select instance_name, status from v$instance;
 
 
 
6. 카탈로그 DB 생성 및 오라클 프로시저 생성
 
sql> @after_db_create.sql
 
각각 순서대로 실행시키거나 스크립트 생성후 실행
 
sql> conn sys/change_on_install as sysdba
sql> @/usr/local/oracle/product/10.2.0/db_1/rdbms/admin/catalog.sql
sql> @/usr/local/oracle/product/10.2.0/db_1/rdbms/admin/catproc.sql
sql> conn system/manager
sql> @/usr/local/oracle/product/10.2.0/db_1/sqlplus/admin/pupbld.sql
 
데이터베이스 property 확인
 
sql> select property_name, property_value from database_properties;
 
 
 
7. 유저생성 후 해당 SID로 접속

sql> create user solution identified by solution;
sql> grant connect, resource to solution;
sql> select * from all_users;