티스토리 툴바


windows2008 에 Oracle10g 설치시 문제점..

윈도우 2008 R2 에 오라클 10g를 설치하려고 하는데 운영체제 버전이 어쩌구 저쩌구 나온다.
설치 프로그램 요구 사항 확인 중....
운영 체제 버전 확인 중: 필수 버전 5.0, 5.1,5.2 or 6.0 . 실제 6.1 실패함 <<<<<

윈도우 빌드 버전이라는데...


인터넷을 찾아보면 여러가지 방법이 존재한다.

1. oraparam.ini 파일 수정 (이것만 수정해서는 초기체크는 넘어가나 설치시 충돌로 실패함)
2. setup 파일 실행시 -ignoreSysPrereqs 옵션설정 (이것도 초기체크는 넘어가지만 설치시 또 실패)
3. setup 파일에 호환성 주기 및 관리자 권한 설치 (초기체크는 넘어가나 설치화면이후에 화면 사라짐)

이것 저것 다해봤지만 아무것도 안된다. -_-;;

방법은 oraparam.ini 파일과  refhost.XML 파일을 같이 수정해주면 된다.

1. oraparam.ini 파일 (경로: install 폴더)
아래 부분에 추가해준다.

[Certified Versions]
#You can customise error message shown for failure, provide value for CERTIFIED_VERSION_FAILURE_MESSAGE
Windows=5.0,5.1,5.2,6.0,6.1

2.  refhost.XML  (경로: \stage\prereq\db)
아래부분에 추가해 준다.

 <CERTIFIED_SYSTEMS>
    <OPERATING_SYSTEM>
      <VERSION VALUE="5.0"/>
      <SERVICE_PACK VALUE="1"/>
    </OPERATING_SYSTEM>
    <OPERATING_SYSTEM>
      <VERSION VALUE="5.1"/>
      <SERVICE_PACK VALUE="1"/>
    </OPERATING_SYSTEM>
    <OPERATING_SYSTEM>
      <VERSION VALUE="5.2"/>
    </OPERATING_SYSTEM>
    <!--Microsoft Windows Vista-->
    <OPERATING_SYSTEM>
      <VERSION VALUE="6.0"/>
    </OPERATING_SYSTEM>
 <OPERATING_SYSTEM>
      <VERSION VALUE="6.1"/>
    </OPERATING_SYSTEM>

</CERTIFIED_SYSTEMS>

저작자 표시 비영리
Posted by 나이스버리
오라클 암호화 복호화에서 셀렉트가 안될떄..

예))
SELECT * FROM USER_TABLE WHERE CRYPTIT.decrypt(PASS, 'MOMO') ='PASS'


=> 아래와 같은 에러메세지가 발생된다면..

ORA-28232: obfuscation 툴킷에 부적합한 입력 길이입니다.
ORA-06512: "SYS.DBMS_OBFUSCATION_TOOLKIT_FFI", 줄 40에서
ORA-06512: "SYS.DBMS_OBFUSCATION_TOOLKIT", 줄 153에서
ORA-06512:
"WLOWN.CRYPTIT", 줄 20에서

오라클 버전에 따른 문제 일수도 있다. 이럴떈
UPDATE USER_TABLE  SET=CRYPTIT.
encrypt(PASS,'MOMO') 로 업데이트..

만약 그래도 안되면 다른 'MOMO'가 아닌 다른 키값으로 등록된 데이터 또는 cryptit.encrypt() 를 사용하지 않고
들어간 데이터가 있을 경우가 많다.

쭉 살펴보고 요상한 문자로 안들어간 데이터를 살펴봐야 한다.

예를 들어 문자열이 =>>>   U7??뺃Ih?w #  이런식으로 들어가 있어야 하는데
'PASS1234' 이렇게 제대로 보인다면

select * from USER_TABLE  where PASS ='PASS1234'   쿼리를 날려서 문제없이 쿼리가 돌아간다면
요넘이 암호화 없이 들어간 놈이다.

UPDATE USER_TABLE  SET=CRYPTIT.encrypt(PASS,'MOMO') where PASS='PASS1234'  로 암호화 한다.

다른 키값으로 암호화 된 놈은 찾을 수 없다. 혹시 찾는 법을 안다면 댓글로 알려주세욤.
저작자 표시 비영리
Posted by 나이스버리

주로 오라클이나 MS-SQL 어쩌다 싸이베이스 처럼 DB 서버에 붙어 쿼리를 날리다
필요하게 되어 MDB 파일을 열어 값을 가져올일이 생겼는데 ..ㅋㅋ 필요할 듯 하여 정리해 본다.~


switch(조건1, 값1, 조건2, 값2,........ ,조건 n, 값n)
예)
SELECT NAME,
             SWITCH(DEPT='1000','영업부,DEPT='2000','자재부)
FROM AAA

==================================================================================================

IFF(조건,맞을때 값, 틀릴때 값)   : IF 가 아니라 IIF 다.^^
예)
SELECT NAME,
             IFF(DEPT='1000','영업부','기타부서')
FROM AAA

=================================================================================================
WHERE 절에는 != 가 안먹는다 <> 사용 한다.

저작자 표시 비영리
Posted by 나이스버리
오라클
ArcSDE 의 SDE 계정을 포함한 덤프파일을 복구하는데 몇번의 삽집과 무한한 인터넷 서핑을 거쳐
실행해 본 결과 다음과 같은 과정이 제일 중요한듯 하다.ㅋ
-참고로 9i 버전

* 백업(덤프뜨기) - Export

system 계정 및 sys 계정 DBA 권한을 가지고 있는 이 두계정을 이용하자.

system 계정으로 덤프를 뜬다고 가정하고

>> exp system/비번 file=d:\dump\dump.dmp 
또는
>> exp system/비번 file=d:\dump\dump.dmp owner=유저1, 유저2, SDE 유저

실행하면 d:\demp\dump.dmp 파일이 생성된다. 토드나 다른 tool 을 이용하면 더 편할 수도 있다.ㅋ

* 복구 -Import

그냥 SDE유저의 공간정보가 없다면 복구를 하기 위해선 system 계정을 이용하여 복구 하여도 된다.
우선 전체 덤프 파일이라면 테이블 스페이스와 유저를 복구 과정에서 만들어 주기 때문에 상관이 없지만
그렇지 않은 경우라면 테이블 스페이스도 덤프뜬 테이블 스페이스와 동일한 이름으로 만들어 놓는다.

>> imp system/비번 file=d:\dump\dump.dmp  full=y ignore=y commit=y
또는
>> imp system/비번 file=d:\dump\dump.dmp fromuser=유저1,유저2,SDE 유저

데이터가 commit=y 같은 옵션을 사용하는것이 권장이란다.
자세한 옵션들은 인터넷을 찾아보면 많이 나온다. ^^

-ArcSDE 의 SDE유저를 포함한경우
여기서 문제는 ArcSDE 가 관리하는 SDE 유저와 공간데이터가 존재할경우이다.
ArcSDE가 설치되어 있고 포스트인스톨레이션 까지 마친 경우라면 내컴퓨터->관리->서비스로가서 ArcSDE 서비스를 중단하고 오라클의 SDE 유저를 싹지운다.더 좋은 방법은 ArcSDE를 삭제하고 다시 설치하는 과정을 거치는것도 방법이다.

ArcSDE의 포스트인스톨레이션을 실행한다.
custom 모드로 들어가 SDE 유저와 테이블스페이스 생성부분만 냅두고 나머지는 체크를 해제한다.


이제 동일한 방법으로 복구한다.
>> imp system/비번 file=d:\dump\dump.dmp  full=y ignore=y commit=y
또는
>> imp system/비번 file=d:\dump\dump.dmp fromuser=유저1,유저2,SDE유저 touser=유저1,유저2,SDE유저
복구 과정이 다 마쳐지면

ArcSDE의 포스트인스톨레이션을 실행하여 custom 모드에서
SDE 유저생성과 테이블스페이스를 만드는 부분을 제외하고 나머지를 설치한다.

ArcCatalog를 이용하여 공간데이터가 올라왔는지 살펴본다.

-막약 그래도 안된다면 -_-;;
내컴퓨터->관리->서비스로가서 ArcSDE 서비스를 중단하고 SDE 유저를 지운다면
아래 스크립트를 이용하여 SDE 유저를 임의로 생성하고

>> imp system/비번 file=d:\dump\dump.dmp fromuser=SDE touser=SDE 실행

CREATE USER SDE
  IDENTIFIED BY VALUES '암호' DEFAULT TABLESPACE SDE TEMPORARY TABLESPACE TEMP
  PROFILE DEFAULT ACCOUNT UNLOCK;

  GRANT CONNECT TO SDE;
  GRANT RESOURCE TO SDE;
  ALTER USER SDE DEFAULT ROLE ALL;

  GRANT CREATE LIBRARY TO SDE;
  GRANT CREATE PROCEDURE TO SDE;
  GRANT CREATE SEQUENCE TO SDE;
  GRANT CREATE SESSION TO SDE;
  GRANT CREATE TABLE TO SDE;
  GRANT CREATE TRIGGER TO SDE;
  GRANT UNLIMITED TABLESPACE TO SDE;


-리눅스에서 백업된 파일을 윈도우계열 서버에서 복구할경우 참고

나같은 경우는 리눅스환경에서 만들어진 dmp 파일을 NT 계열로 복구하였는데 테이블 스페이스를 만들던 도중
리눅스의 디렉토리 경로와 윈도의 계열의 폴더 경로의 차이로 만들어지지 않았다.

이럴때는 LOG 파일을 열면
Create tablespace 어쩌고 저쩌고 .. 에러어쩌고 나온다. 경로부분을 보자면 /usr1/TESTDB/AAAA.DBF 요렇게 되어 있는 부분을 C:\oracle\oradata\TESTDB/AAAA..DBF 라고 고치고 실제 경로에 \TESTDB 라는 빈폴더를 만들고
스크립트를 실행하여 테이블스페이스를 임의로 만들면 된다.






저작자 표시 비영리
Posted by 나이스버리

트리거를 만드는중 컴파일에서 계속된 에러.. 분명히 테이블은 존재 한다.
에러메세지: ORA-00942: 테이블 또는 뷰가 존재하지 않습니다.

유저명.테이블이름 이렇게 명시까지 해줬는데 안된다 -_-;;;

문제는 권한 문제.ㅋㅋ

사용자에게 권한을 부여 해주면 해결.

GRANT DELETE, INSERT, SELECT, UPDATE ON 테이블 이름 TO 유저(사용자);
저작자 표시 비영리
Posted by 나이스버리

row에 있는 값을 컬럼 처럼 쓰고자 할때가 있다.
이럴때 cross tab 쿼리를 쓰는데..
row의 수가 동적일때는 못쓰고 값을 알고 있다는 전제가 깔려 있어 유용할지 모르지만 일단 이런 방법도
있구나 알아 두는것도 나쁘지 않다고 생각한다.

예) 쿼리의 결과가 이렇게 나왔다고 치자

 지역  시설물  갯수
 서울시  병원  1
 서울시  공원  2
 부산시  병원  3
 부산시  공원  4

이것을 아래와 같이 바꾸고자 한다면
 지역(갯수)  병원  공원
 서울시  1  2
 부산시  3  4

SELECT 지역,
MAX(DECODE(시설물,'병원',갯수,0)) 병원
MAX(DECODE(시설물,'공원',갯수,0)) 공원

FROM 테이블
GROUP BY 지역  --꼭 그룹으로 묶는다.


저작자 표시 비영리
Posted by 나이스버리

current date : 현재일자를 나타내는 상수함수 입니다 
current time : 현재시간을 나타내는 상수함수 입니다 
current timestamp : 현재일자와 현재시간을 조합하여 나타내는 상수함수 
current user : 현재 connection 되어 있는 사용자의 ID, 즉 자기의 ID 
sqlcode : 현재의 sqlcode값 
sqlstate : 현재의 sqlstate값  예를 들어 26501값은 ‘SQL statement error’를 표시합니다 
 
  
hextoint(hexadecimal_string) : hexadecimal 값을 integer로 변환합니다 
inttohex(integer) : integer 값을 hexadecimal 로 변환합니다 
cast (expr as data_type) : expr의 데이터 타입을 data_type으로 변환합니다 select cast(‘ABCDE’ as char(2)) : ‘AB’

number(*) : result set의 각 레코드에 대해 일련 번호를 부여하는 함수입니다

RowID(table_name) : 각 테이블에 데이터가 입력될 때 입력되는 순서에 의해  각각의 ID가 일련번호로 저장됩니다. 그 번호를 참조하는 함수입니다. 실제로 데이터가 입력된 테이블에서만 사용가능하여 derived table(in-line view)에서는 사용할 수 없습니다.

coalesce(expr1, expr2) : 여기서 expr1은 null 값을 포함할 수 있는 값 이거나 표현식입니다. expr2는 null 값을 전환시 대치할 값입니다.
저작자 표시 비영리
Posted by 나이스버리

======================== 날짜================================================
date(expr) : expr의 데이터를 년월일만 표시합니다 
dateformat(date_expr, string_expr) : date_expr를 string_expr 형으로 변환 
day(date_expr) : date_expr의 날짜를 수로 표현 (1~31) 합니다 
dayname(date_expr) : date_expr의 요일을 영문으로 나타냅니다 
days(date_expr1, date_expr2) : date_expr1에서 date_expr2 까지의 날짜 수 
dow(date_expr) : date_expr의 요일을 수로 표현합니다 (1=Sunday, 2=Monday, ……7=Saturday) 
month(date_expr) : date_expr의 월을 수로 표현(1~12)합니다 
monthname(date_expr) : date_expr의 월을 영문으로 나타냅니다 
months(date_expr1, date_expr2) : date_expr1에서 date_expr2 까지의 총 개월 수를 나타냅니다 
quarter(date_expr) : date_expr의 분기를 수로 표현(1~4)합니다 
weeks(date_expr1, date_expr2) : date_expr1에서 date_expr2까지의 총 주 
year(date_expr) : date_expr의 년도를 수로 표현합니다 
years(date_expr1, date_expr2) : date_expr1에서 date_expr2 까지의 총 년 
ymd(year_num, month_num, day_num) : year_num의 년도에 month_num의 개월을 더하고 day_num을 더한 일자를 나타냅니다 
now(*) : 현재 일자와 시간, 분, 초,Millisecond를 나타냅니다 
today(*) : 시간, 분, 초,Millisecond를 제외한 현재 일자만 표시합니다 
 
  
date 연산 
     select years(date(‘2001-05-24’), 1) : 2002-05-24 
     select months(date(‘2001-05-24’), 1) : 2001-06-24 
     select days(date(‘2001-05-24’), 1) : 2001-05-25 
date 비교 
     select years(date(‘2001-05-24’), ‘2004-05-26’) : 3 
     select months(date(‘2001-05-24’), ‘2004-06-26’) : 1 
     select days(date(‘2001-05-24’), ‘2001-05-26’) : 2 
date 추출 
     select year( ‘2001-05-24’) : 2001 
     select month( ‘2001-05-24’) : 05 
     select monthname( ‘2001-05-24’) : May 
     select day( ‘2001-05-24’) : 24 
     select dayname( ‘2001-05-24’) : Thursday 
기타 
     select now() 혹은 select today() : 현재일을 구함 
     select dateformat( date(‘2001-05-24’), ‘yyyy/mm/dd’) : 2001/05/24 
     select date( ‘2001-05-24’) : string ‘2001-05-24’를 날짜 2001-05-24로 변경 
 
======================== 시간 ================================================

hour(datetime_expr) : datetime_expr의 시간을 나타냅니다(0~23) 

hours(datetime_expr1, datetime_expr2) : datetime_expr1에서 datetime_expr2까지의 총 시간 

minute(datetime_expr) : datetime_expr의 분을 나타냅니다(0~59) 

minutes(datetime_expr1, datetime_expr2) : datetime_expr1에서 datetime_expr2까지의 총 분 

second(datetime_expr) : datetime_expr의 초를 나타냅니다(0~59) 

seconds(datetime_expr1, datetime_expr2) : datetime_expr1에서 datetime_expr2까지의 총 초
저작자 표시 비영리
Posted by 나이스버리

abs(numeric_expr) : 절대값을 산출합니다

ceiling(numeric_expr) : 소수점이 있을 때 가장 큰 integer 값을 산출합니다 

floor(numeric_expr) : 소수점이 있을 때 가장 작은 integer 값을 산출합니다

mod(dividend, divisor) : dividend를 divisor로 나눈 나머지를 산출합니다 

power(numeric_expr1, numeric_expr2) : numeric_expr1에 numeric_expr2  제곱을 한 결과를 산출합니다

rand(integer_expr) : 소수점 이하 15자리 난수를 발생시킵니다

round(numeric_expr, integer_expr) : numeric_expr을 integer_expr 자리로 반올림 합니다 

truncate(numeric_expr, integer_expr) : numeric_expr에서 소수점 integer_expr 자리 미만을 자름
저작자 표시 비영리
Posted by 나이스버리

ascii(string_expr) : string_expr 첫 번째문자의 ascii 값을 산출합니다  select 

char(integer_expr) : integer_expr을 character로 변환합니다 

insertstr(integer_expr, string_expr1, string_expr2) : string2_expr2를 string_expr1의 integer_expr번 째에 끼워 넣습니다 

lcase(string_expr) : string_expr를 소문자로 변환합니다(lower와 동일) 

left(string_expr, integer_expr) : string_expr의 왼쪽부터 integer_expr 자리만큼 선택합니다 

length(string_expr) : string_expr의 character의 길이를 나타냅니다 

locate(string_expr1, string_expr2) : string_expr2가 string_expr1의 몇 번째 위치하는가를 표시합니다

 ltrim(string_expr) : string_expr의 왼쪽 blank를 제거합니다 

right(string_expr, integer_expr) : string_expr의 오른쪽부터 integer_expr 자리 만큼 선택합니다 

rtrim(string_expr) : string_expr의 오른쪽 blank를 제거합니다 

similar(string_expr1, string_expr2) : string_expr1과 string_expr2의 유사성이  몇 % 인가를 표현합니다 

string(string1, [string2,……..string99]) : 나열된 string을 연결합니다  ( || 가능) 

stuff(string_expr1, start, length, string_expr2) : string_expr1의 start 부터 length 만큼 버리고 그자리에 string_expr2를 채웁니다 

substr(string_expr, start, length) : string_expr에서 start 번째 부터 length 만큼 잘라서 가져옵니다 

trim(string_expr) : string_expr의 처음과 끝의 Blank를 제외시킵니다 

ucase(string_expr) : string_expr를 대문자로 변환합니다(upper와 동일)
 
저작자 표시 비영리
Posted by 나이스버리
보통 오라클을 사용할때 토드를 많이 썼었는데 그보다 더 가볍지만 강력하고 무료인 sqldeveloper를 사용할때가 많다.
sqldeveloper를 사용하기 위해 다운을 받고 실행하였을때


Unable to create an instance of the Java Virtual Machine Located at path  : D:\어쩌구 저쩌구\jvm.dll
이런 메시지 박스가 뜨면 짜증 스럽지 않을 수가 없다 ㅡㅡ
 jvm 이 잘못된지 알고 SDK 에서 복사해 붙여도 안되고~ 이럴땐 이렇게 해보자~

sqldeveloper\bin\sqldeveloper.conf   파일을 열고

AddVMOption -Xmx256M   를 붙여 준다.

그럼 끝~~~



 

Posted by 나이스버리
dmp 파일로 덤프를 뜨기위해선 TOAD 나 기타 여러가지 툴로 손쉽게 할 수도 있지만 그렇지 못할 경우
알아두면 유용하다.

1. 덤프 뜨기(Export)
-기본
명령어프롬프트 > exp 아이디/비번@서비스명(SID)

-옵션(파일명 지정 또는 테이블 지정)
명령어프롬프트 > exp 아이디/비번@서비스명(SID)  tables=테이블명1,테이블명2...  file=파일명.dmp

2. 덤프파일 임포트 하기
-기본
명령어프롬프트 > imp 아이디/비번 file=파일명.dmp

-옵션 테이블지정
명령어프롬프트 > imp 아이디/비번 file=파일명.dmp tables=테이블명1,테이블명2...
Posted by 나이스버리
 

오라클 재시작 리스너 (명령 모드)


#su - oracle


/************* 오라클 SQLPlUS 접속하기 방법 1 ***************/

[oracle:/경로명/oracle]% sqlplus "/as sysdba"

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Dec 7 14:05:51 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:

Oracle9i Enterprise Edition Release 9.2.0.1.0 - 64bit Production

With the Partitioning, OLAP and Oracle Data Mining options

JServer Release 9.2.0.1.0 - Production


SQL>startup                 <--- 오라클DB 시작명령

SQL>shutdown abort     <--- 오라클DB 종료명령

SQL>exit                      <--- 오라클 SQLPLUS 빠져나오기


/************* 오라클 SQLPlUS 접속하기 방법 2 ***************/

[oracle:/경로명/oracle]% sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on Wed Dec 7 14:17:35 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

SQL>conn /as sysdba

SQL>startup                 <--- 오라클DB 시작명령

SQL>shutdown abort     <--- 오라클DB 종료명령

SQL>exit                      <--- 오라클 SQLPLUS 빠져나오기

/**********************************************************/


/************ 오라클 리스너 접속하기 ***********************/

[oracle:/경로명/oracle]% lsnrctl

LSNRCTL for Solaris: Version 9.2.0.1.0 - Production on 07-DEC-2005 14:10:01

Copyright (c) 1991, 2002, Oracle Corporation.  All rights reserved.

Welcome to LSNRCTL, type "help" for information.


LSNRCTL>start             <--- 리스너 시작하기

LSNRCTL>stop             <--- 리스너 종료하기

LSNRCTL>exit              <--- 리스너 빠져나오기

/*********************************************************/


Posted by 나이스버리
TAG 오라클
ORA-00054: 자원이 사용중이고, NOWAIT가 지정되어 있습니다
에러가 뜰때~ 테이블 LOCK 이 걸려 수정,삭제등 명령이 안먹을때 조치 방법이다.

SQL>

select a.sid, a.serial# ,a.status
from v$session a, v$lock b, dba_objects c
where a.sid=b.sid and
b.id1=c.object_id and
b.type='TM' and
c.object_name=테이블명 ;

이러면

sid      serial            status
============================
123      4567               ACTiVE


요런식으로 보인다 . 이때 세션을 죽인다.
SQL> alter system kill session '123 , 4567'  

이 명령이 안먹으면

SQL> alter system kill session '123 , 4567'   immediate 로 해본다.

그래도 안먹으면 재빨리 디비를 내렸다 올린다.ㅋㅋ (디비재시작은 이 블러그에 있으니 참고 바람)

Posted by 나이스버리
기본키(primary) 가 없는 상태에서 중복되는 데이터가 있을경우 

나중에 들어온 중복 데이터 삭제하기. 

DELETE FROM 테이블 A
          WHERE ROWID > (SELECT MIN(ROWID)
                                       FROM 테이블 B
                                      WHERE A.컬럼 = B.컬럼

먼저 들어온 중복 데이터 삭제하기

DELETE FROM 테이블 A
          WHERE ROWID < (SELECT MAX(ROWID)
                                       FROM 테이블 B
                                      WHERE A.컬럼 = B.컬럼
Posted by 나이스버리