1. InstantClient 다운로드


    다운로드 경로 : http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

    Database 버전과 OS 환경에 맞는 InstantClient를 다운로드받는다.
    이 때 개발을 위해 2개를 받아야 함.

    ① Instant Client Package - Basic
    ② Instant Client Package - SQL*Plus


2. InstantClient 복사


    적당한 위치에 InstantClient 폴더를 복사해서 위치
    예) C:\instantclient_11_2



3. 환경변수 입력


    시스템-고급-환경변수-시스템변수에 아래와 같이 추가

    ① PATH 추가 (C:\instantclient_11_2)
    ② ORACLE_HOME 변수 생성 (C:\instantclient_11_2)
    ③ TNS_ADMIN 변수 생성 (C:\instantclient_11_2)
    ④ NLS_LANG 변수 생성 (KOREAN_KOREA.KO16MSWIN949)


4. tnsnames.ora 파일 복사 (옵션)


    필요할 경우 tnsnames.ora 파일을 위의 InstantClient 폴더에 복사
    이제 SqlPlus나 다른 툴에서 tnsname을 이용하여 DB에 접속할 수 있음



Posted by 하이안
,

ORA-28040: No matching authentication protocol


■ 원인 : Oracle Server와 Client 버전 차이 (Oracle 12c 부터 발생)


■ 조치 : SQLNET.ORA 파일 수정


서버의 SQLNET.ORA 파일에 아래 구문 추가

SQLNET.ALLOWED_LOGON_VERSION = 9





Posted by 하이안
,

Oralce Archive Log Mode 셋팅하기 (Oracle 12.0.1)

1. archive log mode 확인
SQL> archive log list;

2. archive log 저장위치 지정
SQL> select dest_name, status, destination from v$archive_dest;
SQL> alter system set log_archive_dest_1 = 'LOCATION=D:\Oracle\MESA\arch';

3. archive log file 포맷 지정
SQL> select value from v$parameter where name='log_archive_format';
SQL> alter system set log_archive_format = '%r_%t_%s.arc' scope=spfile;

4. mode change
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog; (또는 noarchivelog)
SQL> alter database open;



혹시 모르니 archive mode로 변경하기 전에 backup, 변경한 직후에 backup 한 번씩 해야 함


Posted by 하이안
,

1. 위치 확인

select name from v$datafile;

select name from v$logfile;


2. shutdown immediate


3. 변경하고자 하는 위치로 data file, redo log 이동 (OS에서 파일 이동 - 또는 만일을 위해 복사만)


4. startup mount


5. data file 위치 변경

alter database rename file 'D:\Oracle\SID\USERS01.DBF' to 'D:\Oracle\SID\data\USERS01.DBF';


6. redo log 위치 변경 (위와 같음)

alter database rename file 'D:\Oracle\SID\REDO01.DBF' to 'D:\Oracle\SID\redo\REDO01.DBF';


7. alter database open




Posted by 하이안
,

컬럼명을 rename 또는 drop 하고자 할 때 아래와 같이 오류가 발생하는 경우가 있음


"ORA-54032: 이름을 바꿀 열이 가상 열 표현식에서 사용되었습니다."


1. 원인 : 해당 컬럼이 virtual column으로 만들어져 있음. 사용자가 명시적으로 안만들었더라도 12c 버전부터 새로 생긴 기능인 extended statistics 기능 중에 하나가 다수의 column에 대한 SQL optimizer statistics를 (자동으로) 생성 수집하는 것으로 이 기능 때문에 virtual column이 자동으로 생성됨.


2. 확인방법

select table_name, column_name, data_type, hidden_column,data_default

from user_tab_cols

where table_name ='TABLE_NAME' and virtual_column = 'YES';


3. 처리방법

① extended statistics drop

BEGIN
dbms_stats.drop_extended_stats( ownname => 'OWNER', tabname => 'TABLE_NAME', extension => '(COL1,COL2)' ) ;
END;
/


② 2번의 확인 쿼리로 drop된 걸 확인한 후에 rename, drop이 가능함


③ extended statistics는 아래 쿼리로 다시 추가해도 되고, 아니면 db에서 알아서 생성하므로 그냥 놔둬도 됨

DECLARE
l_cg_name VARCHAR2(30);
BEGIN
l_cg_name := DBMS_STATS.create_extended_stats( ownname => 'OWNER', tabname => 'TABLE_NAME', extension => '(COL1,COL2)' );
END;

/



Posted by 하이안
,

Oracle 11g부터는 DB에서 외부 네트워크로 데이터 송신 시 ACL이 등록되어 있어야 함



begin


DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(

acl => 'network_services.xml',

description => 'NETWORK ACL',

principal => 'PUBLIC',

is_grant => true,

privilege => 'connect');


DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(

acl => 'network_services.xml',

principal => 'PUBLIC',

is_grant => true,

privilege => 'resolve');


DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(

acl => 'network_services.xml',

host => '*');


commit;


end;



Posted by 하이안
,

1. 64bit Provider 확인

    - 그냥 test.udl 파일 만들어서 더블클릭해서 확인해도 되고

    - "C:\Windows\syswow64\rundll32.exe" "C:\Program Files\Common Files\System\Ole DB\oledb32.dll",OpenDSLFile D:\test32.udl


2. 32bit Provider 확인

    - udl 파일로는 확인이 안되고 아래 명령 실행해야 함

    - "C:\Windows\syswow64\rundll32.exe" "C:\Program Files (x86)\Common Files\System\Ole DB\oledb32.dll",OpenDSLFile D:\test32.udl



※ 참고 : Microsoft OLE DB Provider for Oracle 은 32bit용만 있고 64bit용이 없음. Oracle Provider for OLE DB를 사용해야 함.


Posted by 하이안
,
1. Export한 파일로부터 스크립트 생성
imp userid/password@serviceName file="fileName.dmp" fromuser="originalUser" touser="newUser" indexfile="script.txt"
실행하면 script.txt 파일이 만들어지고 테이블, 인덱스를 생성하는 스크립트가 내용으로 만들어짐

2. 스크립트 수정
이제 script.txt 파일 오픈하여 아래와 같이 수정
- 쌍따옴표(") 제거 (헷갈림)
- REM 제거
- CREATE UNIQUE INDEX... 구문 삭제 (PK 제약조건 생성구문이랑 충돌남)
- 구문 중 Tablespace 부분을 새로 저장할 Tablespace로 변경

3. 스크립트 실행
Import할 대상으로 로그인해서 위 스크립트 실행 (미리 테이블, 인덱스를 다 만들어준다.) 
 
4. Import 실행
imp userid/password@serviceName file="fileName.dmp" fromuser="originalUser" touser="newUser" ignore="Y"
실행하면 테이블, 인덱스는 미리 만들어져 있으므로 충돌 발생하고 데이터 (Rows)만 Import 함




Posted by 하이안
,
SELECT TO_CHAR(SYSDATE, 'Day, dd Mon yyyy hh24:mi:ss') FROM dual
금요일, 25 2월  2011 13:16:19


SELECT TO_CHAR(SYSDATE, 'Day, dd Mon yyyy hh24:mi:ss', 'nls_date_language=AMERICAN') FROM dual
Friday   , 25 Feb 2011 13:16:36





Posted by 하이안
,
1. LOB 확인
select * from user_lobs;
select * from user_segments;

2. 테이블 이동
alter table "table_name" move tablespace "tablespace_name";

3. LOB 컬럼 이동
alter table "table_name" move lob("column_name") store as (tablespace "tablespace_name");




※ PK, INDEX 들은 rebulid 또는 제거 후 재생성시킴.





Posted by 하이안
,