2009년 5월 19일 화요일

oracle em 호스트 인증 사용자등록

제어판 - 관리도구 - 로컬보안정책 - 로컬정책 - 사용자 권한 할당 - 일괄작업으로 로그온에 administrator 등록되어있어야 함

DISABLE VALIDATE CONSTRAINT STATE

제품 : SQL*PLUS

작성날짜 : 2001-04-17

DISABLE VALIDATE CONSTRAINT STATE
=================================

오라클8i 이전 버전에서는 integrity constraints 가 아래의 세가지
상태를 가질 수 있었다.

1. ENABLE VALIDATE

테이블의 기존의 데이터는 물론 새로운 데이터들도 constraint 의
규칙에 따르게 되어 모든 테이블 데이터가 계속 valid 함을 보장한다.

2. ENABLE NOVALIDATE

테이블의 기존 데이터가 constraint 의 규칙에 따른다는 것을 보장하지
않으며 새로운 DML 작업에 의한 데이터에 대해서만 데이터의 valid 함을
보장한다.

3. DISABLE

오라클은 테이블의 integrity constraint 를 완전히 무시하며 데이터의
valid 함을 전혀 보장하지 않는다.

그러나, 오라클8i 부터는 DISABLE 도 아래처럼 구분이 가능하다.

4. DISABLE NOVALIDATE

이전 버전의 DISABLE 과 똑같다. 즉, 오라클은 constraint 를 고려하지 않는다.

5. DISABLE VALIDATE

테이블의 constraint 를 disable 시키고 해당 constraint 에 걸려있는
index 를 drop 하지만 constraint 를 valid 한 상태로 유지한다.
다시말해 해당 테이블에 대한 모든 DML 작업은 허용하지 않지만
기존 데이터에 대한 validity 는 보장한다는 것이다.

DISABLE VALIADATE constraint 는 unique 나 primary key 에 대한 index
사용을 하지 않으므로 disk space 를 절약하면서도 기존 테이블 데이터에
대한 validity 를 보장하는 것이다.

DISABLE VALIDATE constraint 에 대한 위반되는 DML 에 대해서는 아래의
에러 메시지가 출력된다:

ORA-25128: No insert/update/delete on table with
constraint (x.x) disabled and validated

DISABLE VALIDATE constraint 는 CREATE TABLE 또는 ALTER TABLE
명령을 통해 사용할 수 있다.

1) CREATE TABLE t1 (
a NUMBER CONSTRAINT c1 PRIMARY KEY
,b NUMBER );


Output: Table created.

2) SELECT constraint_name,validated,status FROM user_constraints
WHERE table_name = 'T1' ;

Output: CONSTRAINT_NAME VALIDATED STATUS



--------------------------------------------------------------------------------
-------------
--------------------------------------------------------------------------------
C1 VALIDATED ENABLED

3) SELECT index_name , status FROM user_indexes
WHERE table_name = 'T1' ;

Output: INDEX_NAME STATUS

--------------------------------------------------------------------------------
--------
C1 VALID

4) ALTER TABLE t1 MODIFY CONSTRAINT c1 DISABLE VALIDATE ;

Output: Table altered.

5) SELECT constraint_name,validated,status FROM user_constraints
WHERE table_name = 'T1' ;

Output: CONSTRAINT_NAME VALIDATED STATUS



--------------------------------------------------------------------------------
-------------
--------------------------------------------------------------------------------
C1 VALIDATED DISABLED

6) SELECT index_name , status FROM user_indexes
WHERE table_name = 'T1' ;

Output: no rows selected

2009년 5월 7일 목요일

10g flashback database

Flashback database를 위해 RVWR이라는 새로운 background process가 생겼는데 RVWR은
flashback database log들을 생성하는 역할을 합니다. 복구 시에는 flashback database
log와 redolog를 적용합니다.

Flashbackdatabase를 하기 위해서는 database가 archivelogmode로 운영되어야 하며
db_recovery_file_dest,db_recovery_file_dest_size파라미터가 init.orafile에
정의되어 있어야 합니다.db_flashback_retention_target(분 단위)파라미터를 통하여
복구 가능한 시간을 설정할 수 있습니다.

SQL>selectname,valuefromv$parameter
wherenamelike'db_recovery%'orname='db_flashback_retention_target';
NAME VALUE
------------------------------------------------------------------
db_flashback_retention_target 180
db_recovery_file_dest /data2/ora10g/home/flash_recovery_area
db_recovery_file_dest_size 2147483648
SQL>archiveloglist
Databaselogmode ArchiveMode
Automaticarchival Enabled
Archivedestination USE_DB_RECOVERY_FILE_DEST
Oldestonlinelogsequence 226
Nextlogsequencetoarchive 228
Currentlogsequence 228

SQL> starup mount exclusive
SQL> alter database flashback on;
SQL> select flashback_on from v$database;
SQL> shutdown immediate;
SQL> startup mount exclusive
SQL> flashback database to timestamp < to_date(...);
SQL> alter database open resetlogs;


-Controlfile이 restore되거나 recreate되었을 때
-Tablespace가 drop되었을 때
-Datafile이 shrunk되었을 때,(즉 datafile이 drop되거나 resize되었을 때)
-RESETLOGS명령을 통해 recovery가 수행되었을 때 사용할 수가 없습니다.

2009년 5월 6일 수요일

partition export

exp scott/tiger tables=table_name:partition_name file=file_name.dmp query='"where rownum < 10000000"'

2009년 5월 4일 월요일

Windows NT 4.0 Oracle 8.0.5 Scripts

orashut.cmd

svrmgr30 "connect internal/manager" < orashut.sql

orashut.SQL

shutdown immediate
exit

OraStart.cmd

svrmgr30 "connect internal/manager" < orastart.sql

OraStart.SQL

startup pfile='d:\oradata\oraorcl\initorcl.ora'
exit

2009년 4월 30일 목요일

10g Flashback Version Query

SQL> create table rates (
2 currency varchar2(4),
3 rate number(15,10)
4 );

테이블이 생성되었습니다.

SQL> insert into rates values ('EURO',1.1012);

1 개의 행이 만들어졌습니다.

SQL> commit;

커밋이 완료되었습니다.

SQL> update rates set rate = 1.1014;

1 행이 갱신되었습니다.

SQL> commit;

커밋이 완료되었습니다.

SQL> update rates set rate = 1.1013;

1 행이 갱신되었습니다.

SQL> commit;

커밋이 완료되었습니다.

SQL> delete rates;

1 행이 삭제되었습니다.

SQL> commit;

커밋이 완료되었습니다.

SQL> insert into rates values ('EURO',1.1016);

1 개의 행이 만들어졌습니다.

SQL> commit;

커밋이 완료되었습니다.

SQL> update rates set rate = 1.1011;

1 행이 갱신되었습니다.

SQL> commit;

커밋이 완료되었습니다.

SQL> select * from rates;

CURR RATE
---- ----------
EURO 1.1011

SQL> col VERSIONS_STARTTIMe for a18
SQL> col VERSIONS_ENDTIME for a18

SQL> select versions_starttime, versions_endtime, versions_xid, versions_operation, rate
2 from rates versions between timestamp minvalue and maxvalue
3* order by VERSIONS_STARTTIME ;

VERSIONS_STARTTIME VERSIONS_ENDTIME VERSIONS_XID V RATE
------------------ ------------------ ---------------- - ----------
09/04/30 21:55:42 09/04/30 21:56:06 0009000F000B0C4C I 1.1012
09/04/30 21:56:06 09/04/30 21:56:12 00090024000B0B89 U 1.1014
09/04/30 21:56:12 09/04/30 21:56:30 0008000A000C0FCD U 1.1013
09/04/30 21:56:30 00080020000C11ED D 1.1013
09/04/30 21:56:42 09/04/30 21:56:58 00080018000C0D63 I 1.1016
09/04/30 21:56:58 000400090009A1B8 U 1.1011

6 개의 행이 선택되었습니다.

SQL> conn / as sysdba
연결되었습니다.
SQL> grant select any transaction to scott;

권한이 부여되었습니다.

SQL> conn scott/*****

SQL> select undo_sql
2 from flashback_transaction_query
3 where xid='0009000F000B0C4C';

-----------------------------------------------------------------------
insertinto "ANANDA"."RATES"("CURRENCY","RATE")values ('EURO','1.1013');

SQL> select rate, versions_starttime, versions_endtime
2 from rates versions between timestamp to_date(...) and to_date(...)
3* order by VERSIONS_STARTTIME ;

RATE VERSIONS_STARTTIME VERSIONS_ENDTIME
---------- ---------------------- ----------------------
1.1011

10g flashback table

show recyclebin
flashback table table_name to before drop;
purge recyclebin
drop table table_name purge;