[SQL] 어떻게 오라클에 Timestamp_to_scn 및 Scn_to_timestamp를 사용 하는가?
SQL어떻게 오라클에 Timestamp_to_scn 및 Scn_to_timestamp를 사용 하는가?
나는 쿼리의 결과로이 있습니다 :
select cast(to_date(a.start_time,'mm/dd/yyyy hh:mi:ss pm') as timestamp) date_of_call,
ora_rowscn from calling_table a where rownum <= 10;
DATE_OF_CALLING ORA_ROWSCN
26-JUL-13 12.29.28.000000000 PM 8347567733892
26-JUL-13 12.29.35.000000000 PM 8347567733892
26-JUL-13 12.29.35.000000000 PM 8347567733892
26-JUL-13 12.29.38.000000000 PM 8347567733892
26-JUL-13 12.29.44.000000000 PM 8347567733892
26-JUL-13 12.29.47.000000000 PM 8347567733892
26-JUL-13 12.29.48.000000000 PM 8347567733892
26-JUL-13 12.29.48.000000000 PM 8347567733892
26-JUL-13 12.29.48.000000000 PM 8347567733892
26-JUL-13 12.29.56.000000000 PM 8347567733892
하지만 함수 timestamp_to_scn를 사용하여 SCN에이 타임 스탬프를 변환 할 때, 나는 다음과 같은 오류가 점점 오전 :
ORA-08180 : 더 스냅 샷은 지정된 시간에 근거를 찾을 수 없습니다 ORA-06512 : "SYS.TIMESTAMP_TO_SCN"에서, 라인 1 08180. 00000 - "더 스냅 샷은 지정된 시간에 근거를 찾을 수 없습니다" * 원인 : 매핑 테이블에서 SCN에 시간과 일치 할 수 없습니다. * 작업 : 더 큰 시간을 사용해보십시오.
내가 타임 스탬프에 해당 열을 변환 ora_rowscn에 scn_to_timestamp을 사용하고 때, 나는 다음과 같은 오류가 점점 오전 :
ORA-08181은 : 지정된 번호가 유효한 시스템 변경 번호가 아닙니다 ORA-06512 : "SYS.SCN_TO_TIMESTAMP"에서, 라인 1 08181. 00000 - "지정된 번호가 유효한 시스템 변경 번호가 아닙니다" * 원인 : 제공된 SCN 유효한 SCN의 경계를 넘어이었다. * 작업 : 올바른 SCN을 사용합니다.
내가 잘못을하고 오전 무엇입니까?
해결법
-
==============================
1.당신은 너무 멀리 돌아 보면 위해 노력하고 있습니다. 당신은에 당신의 시스템에 의해 유지 리두 / 플래시백 창에있는 SCN을 변환 할 수 있습니다. 변경 후 밖으로 나이가되면 매핑이 손실됩니다.
당신은 너무 멀리 돌아 보면 위해 노력하고 있습니다. 당신은에 당신의 시스템에 의해 유지 리두 / 플래시백 창에있는 SCN을 변환 할 수 있습니다. 변경 후 밖으로 나이가되면 매핑이 손실됩니다.
이것은 문서에 설명되어 있습니다 :
마음에 곰이 오라클의 내부 메커니즘의 일부입니다, 그래서 우리에게 제한적으로 사용된다; 그들은 물론 플래시백 쿼리에 유용하지만 - 다시 같은 창에서.
-
==============================
2.SCN_TO_TIMESTAMP 어떤 사건이 일어 났을 때 SCN과 시간 사이의 매핑을 수행하는 일부 내부 알고리즘을 사용하며, 그것은 좋은 근사치로 작업을 수행합니다. 그러나 한계가있다. 실행 취소 데이터가 기간을 포함하지 않는 경우는 과거에 너무 멀리 갈 수 없다.
SCN_TO_TIMESTAMP 어떤 사건이 일어 났을 때 SCN과 시간 사이의 매핑을 수행하는 일부 내부 알고리즘을 사용하며, 그것은 좋은 근사치로 작업을 수행합니다. 그러나 한계가있다. 실행 취소 데이터가 기간을 포함하지 않는 경우는 과거에 너무 멀리 갈 수 없다.
이 경우 당신이 취소 데이터의 한계를 명중 할 때 우리 자신의 매핑을 만들 수있는 교묘 한 방법이있다. 그것은 SCN_TO_TIMESTAMP 좋은으로하지 않습니다하지만 데이터에 따라 근사 제공 할 것입니다.
당신이해야 할 모든 일정 인서트에가는 표를 찾는 것입니다. 나는 감사 테이블 SYS.AUD의 $를 사용합니다. 당신은 자신을 사용할 수 있지만 테이블은 행이 삽입 된 경우 시간이 표시 제출해야합니다. 당신이 SCN을 가지고 DATE 경우 그리고 당신은 다른 테이블과 SCN과 날짜를 매핑 할 수 있습니다.
당신이 마음에 SYS.AUD $의 킵를 사용할 경우 그 :
쿼리는 SYS.AUD $를 사용합니다. 당신이 삽입 또는 업데이트의 날짜를 찾을 필요가 어디에 테이블과 [YOU_TABLE]을 교체
-- get scn to date interval [begin..end] mapping from audit table with scn_time as ( select sc sc_start, lead(sc) over(order by sc) sc_end, start_time, lead(end_time) over(order by sc) end_time_sc from ( select n.ora_rowscn sc, min( cast(from_tz(ntimestamp#,'00:00') at local as date) ) start_time, max( cast(from_tz(ntimestamp#,'00:00') at local as date) ) end_time from sys.aud$ n -- if audit log is big you need to select only a part of the table -- to make query faster --where ntimestamp# > sysdate - 365 group by n.ora_rowscn ) order by sc ) -- map scn from you table to scn_mapping select * from ( select t.ora_rowscn sc, t.* from [YOU_TABLE] t ) table_inspect inner join scn_time s on (table_inspect.sc between s.sc_start and s.sc_end) -- to filter out bit intervals where (end_time_sc-start_time) < 1
나는 그것이 더 년 전에 비해 삽입 된 경우 행이 삽입 될 때 정보를 복원하는 방법을 사용했다.
-
==============================
3.시간이 가장 긴 쿼리 다시 기간을 다룰 것입니다 값으로 설정 AUTO로 UNDO_MANAGEMENT 및 UNDO_RETENTION. 또한 덮어지지 않도록 UNDO에 RETENTION GARANTEE의 세트.
시간이 가장 긴 쿼리 다시 기간을 다룰 것입니다 값으로 설정 AUTO로 UNDO_MANAGEMENT 및 UNDO_RETENTION. 또한 덮어지지 않도록 UNDO에 RETENTION GARANTEE의 세트.
오라클은 10g에 들어 당신이하지 플래시백 이상 오일에 비해 수 있습니다. 이것은 하드 코딩 한계입니다. 오라클 11g에 대한 제한이 없습니다.
from https://stackoverflow.com/questions/22681705/how-to-use-timestamp-to-scn-and-scn-to-timestamp-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 삽입의 성능을 최대 SQL 속도? (0) | 2020.05.14 |
---|---|
[SQL] 드라이버 (SSL) 암호화 보안 소켓 레이어를 사용하여 SQL 서버에 대한 보안 연결을 설정할 수 없음 (0) | 2020.05.14 |
[SQL] 어떻게 SQL Server의 ID 열이 업데이트? (0) | 2020.05.14 |
[SQL] T-SQL : 어떻게 동적 SQL에서 매개 변수를 사용하는 방법? (0) | 2020.05.14 |
[SQL] 우리는 SQL을 사용하여 MS 액세스 데이터베이스의 모든 테이블을 나열 할 수 있습니다? (0) | 2020.05.14 |