Files
notes/FDA/fda_01.txt
2026-03-12 22:01:38 +01:00

318 lines
7.4 KiB
Plaintext

alias adm_NIHILUS='rlwrap sqlplus adm/"secret"@bakura:1521/NIHILUS as sysdba'
create pluggable database NIHILUS admin user NIHILUS$OWNER identified by secret;
alter pluggable database NIHILUS open;
alter pluggable database NIHILUS save state;
alter session set container=NIHILUS;
create bigfile tablespace LIVE_TS datafile size 32M autoextend on next 32M;
create bigfile tablespace ARCHIVE_TS datafile size 32M autoextend on next 32M;
create user adm identified by "secret";
grant sysdba to adm;
create user usr identified by "secret";
grant CONNECT,RESOURCE to usr;
grant alter session to usr;
alter user usr default tablespace LIVE_TS;
alter user usr quota unlimited on LIVE_TS;
alter user usr quota unlimited on ARCHIVE_TS;
alias adm_NIHILUS='rlwrap sqlplus adm/"secret"@bakura:1521/NIHILUS as sysdba'
alias usr_NIHILUS='rlwrap sqlplus usr/"secret"@bakura:1521/NIHILUS'
create flashback archive default ARCHIVE_7_DAY
tablespace ARCHIVE_TS
quota 1G
retention 7 DAY;
grant flashback archive on ARCHIVE_7_DAY to usr;
grant flashback archive administer to usr;
grant execute on dbms_flashback_archive to usr;
------------------------------------------------------------------------------
SET LINESIZE 150
COLUMN owner_name FORMAT A20
COLUMN flashback_archive_name FORMAT A22
COLUMN create_time FORMAT A20
COLUMN last_purge_time FORMAT A20
SELECT owner_name,
flashback_archive_name,
flashback_archive#,
retention_in_days,
TO_CHAR(create_time, 'YYYY-MM-DD HH24:MI:SS') AS create_time,
TO_CHAR(last_purge_time, 'YYYY-MM-DD HH24:MI:SS') AS last_purge_time,
status
FROM dba_flashback_archive
ORDER BY owner_name, flashback_archive_name;
------------------------------------------------------------------------------
------------------------------------------------------------------------------
SET LINESIZE 150
COLUMN flashback_archive_name FORMAT A22
COLUMN tablespace_name FORMAT A20
COLUMN quota_in_mb FORMAT A11
SELECT flashback_archive_name,
flashback_archive#,
tablespace_name,
quota_in_mb
FROM dba_flashback_archive_ts
ORDER BY flashback_archive_name;
------------------------------------------------------------------------------
------------------------------------------------------------------------------
SET LINESIZE 150
COLUMN owner_name FORMAT A20
COLUMN table_name FORMAT A20
COLUMN flashback_archive_name FORMAT A22
COLUMN archive_table_name FORMAT A20
SELECT owner_name,
table_name,
flashback_archive_name,
archive_table_name,
status
FROM dba_flashback_archive_tables
ORDER BY owner_name, table_name;
------------------------------------------------------------------------------
-- Example 1
-------------
create table TAB1 (
ID number,
DESCRIPTION varchar2(50),
constraint TAB_1_PK primary key (id)
);
alter table TAB1 flashback archive ARCHIVE_7_DAY;
insert into TAB1 values (1, 'one');
commit;
update TAB1 set description = 'two' where id = 1;
commit;
update TAB1 set description = 'three' where id = 1;
commit;
------------------------------------------------------------------------------
SET LINESIZE 200
COLUMN versions_startscn FORMAT 99999999999999999
COLUMN versions_starttime FORMAT A32
COLUMN versions_endscn FORMAT 99999999999999999
COLUMN versions_endtime FORMAT A32
COLUMN versions_xid FORMAT A16
COLUMN versions_operation FORMAT A1
COLUMN description FORMAT A11
SELECT versions_startscn,
versions_starttime,
versions_endscn,
versions_endtime,
versions_xid,
versions_operation,
description
FROM tab1
VERSIONS BETWEEN TIMESTAMP SYSTIMESTAMP-(1/24) AND SYSTIMESTAMP
WHERE id = 1
ORDER BY versions_startscn;
------------------------------------------------------------------------------
create table TAB1 (d date);
alter table TAB1 flashback archive ARCHIVE_7_DAY;
insert into TAB1 values (sysdate);
commit;
-- infinite_update1.sql
begin
loop
update TAB1 set d=sysdate;
commit;
dbms_session.sleep(1);
end loop;
end;
/
alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
SET LINESIZE 200
COLUMN versions_startscn FORMAT 99999999999999999
COLUMN versions_starttime FORMAT A32
COLUMN versions_endscn FORMAT 99999999999999999
COLUMN versions_endtime FORMAT A32
COLUMN versions_xid FORMAT A16
COLUMN versions_operation FORMAT A1
COLUMN description FORMAT A25
SELECT
versions_startscn,
versions_starttime,
versions_endscn,
versions_endtime,
versions_xid,
versions_operation,
d
FROM
TAB1
VERSIONS BETWEEN TIMESTAMP TIMESTAMP'2023-06-17 17:20:10' and TIMESTAMP'2023-06-17 17:20:40'
ORDER BY versions_startscn;
SELECT * from TAB1
AS OF TIMESTAMP TIMESTAMP'2023-06-17 17:05:10';
SELECT * from TAB1
AS OF TIMESTAMP TIMESTAMP'2023-06-17 17:30:49';
EXEC DBMS_SYSTEM.set_ev(si=>163, se=>24797, ev=>10046, le=>8, nm=>'');
-- Example 2
-------------
alter table TAB2 no flashback archive;
drop table TAB2 purge;
create table TAB2 (
n1 number,
c1 varchar2(10),
d1 DATE
);
alter table TAB2 flashback archive ARCHIVE_7_DAY;
insert into TAB2 values(1,'One',TIMESTAMP'2023-01-01 00:00:00');
commit;
insert into TAB2 values(2,'Two',TIMESTAMP'2023-01-01 00:00:00');
commit;
insert into TAB2 values(3,'Three',TIMESTAMP'2023-01-01 00:00:00');
commit;
alter session set NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS';
SET LINESIZE 200
COLUMN versions_startscn FORMAT 99999999999999999
COLUMN versions_starttime FORMAT A32
COLUMN versions_endscn FORMAT 99999999999999999
COLUMN versions_endtime FORMAT A32
COLUMN versions_xid FORMAT A16
COLUMN versions_operation FORMAT A1
COLUMN description FORMAT A25
SELECT
versions_startscn,
versions_starttime,
versions_endscn,
versions_endtime,
versions_xid,
versions_operation,
T.*
FROM
TAB2 VERSIONS BETWEEN TIMESTAMP (systimestamp-3/24) and systimestamp T
where
N1=1
ORDER BY versions_startscn;
update TAB2 set d1=TIMESTAMP'2023-12-31 23:59:59' where n1=1;
commit;
select * from TAB2 as of timestamp TIMESTAMP'2023-06-18 08:47:20' where N1=1;
select * from TAB2 as of timestamp systimestamp where N1=1;
select * from TAB2 as of scn 4335762 where N1=1;
select * from TAB2 as of scn 4335824 where N1=1;
->
alter table TAB2 add C2 varchar2(3);
update TAB2 set C2='abc' where n1=1;
update TAB2 set C2='***' where n1=1;
commit;
update TAB2 set C2='def' where n1=1;
commit;
alter table TAB2 drop column C2;
alter table TAB2 rename column C1 to C3;
update TAB2 set d1=systimestamp where n1=1;
commit;
update TAB2 set d1=TIMESTAMP'1973-10-05 10:00:00',C3='birthday' where n1=1;
commit;
update TAB2 set d1=systimestamp,C3='right now' where n1=1;
commit;
4336404 18-JUN-23 03.14.59
select * from TAB2 as of timestamp TIMESTAMP'2023-06-18 03:15:00' where N1=1;
select * from TAB2 as of scn 4336403 where N1=1;
select * from TAB2 as of scn 4336404 where N1=1;
select * from TAB2 as of scn 4337054 where N1=1;
select * from TAB2 as of scn 4282896 where N1=1;
select * from TAB2 as of scn 4283027 where N1=1;
-- cleanup
alter table TAB2 no flashback archive;
drop table TAB2 purge;
alter table TAB1 no flashback archive;
drop table TAB1 purge;
drop user USR cascade;
drop flashback archive ARCHIVE_7_DAY;
drop tablespace LIVE_TS including contents and datafiles;
drop tablespace ARCHIVE_TS including contents and datafiles;
-- cleanup
alter pluggable database NIHILUS close instances=ALL;
drop pluggable database NIHILUS including datafiles;