SELECT * FROM ( SELECT parsing_schema_name, sql_id, plan_hash_value, executions, buffer_gets, -- logical reads disk_reads, -- physical reads rows_processed, cpu_time, -- total CPU time in microseconds elapsed_time, -- total elapsed time in microseconds ROUND(cpu_time / DECODE(executions, 0, 1, executions) / 1000000, 2) AS avg_cpu_sec, ROUND(elapsed_time / DECODE(executions, 0, 1, executions) / 1000000, 2) AS avg_elapsed_sec, SUBSTR(sql_text, 1, 100) AS sql_text_snippet FROM v$sqlarea WHERE parsing_schema_name NOT IN ('SYS', 'SYSTEM') AND executions > 0 ORDER BY cpu_time DESC ) WHERE ROWNUM <= 20;
-- sql full text 확인 SET LONG 100000 SET PAGESIZE 500 SET LINESIZE 150
--SELECT DBMS_LOB.SUBSTR(SQL_FULLTEXT, 100000, 1) AS full_sql_text SELECT DBMS_LOB.SUBSTR(SQL_FULLTEXT, DBMS_LOB.GETLENGTH(SQL_FULLTEXT), 1) -- SELECT SQL_FULLTEXT FROM v$sql WHERE sql_id = 'gngtvs38t0060';
-- 바인드 값 SELECT sql_id, name, position, datatype_string, value_string, was_captured, last_captured FROM v$sql_bind_capture WHERE sql_id = '91gau055wpf2p' ORDER BY position;
-- ACS 확인 SELECT sql_id, sql_fulltext, IS_BIND_SENSITIVE, IS_BIND_AWARE, LAST_LOAD_TIME, SQL_PROFILE, SQL_PLAN_BASELINE, LAST_ACTIVE_TIME FROM v$sql WHERE sql_id =''
CREATE USER USR_NORECO1 IDENTIFIED BY "user123" default tablespace TS_NORECO1 QUOTA UNLIMITED ON TS_NORECO1; CREATE USER USR_NORECO2 IDENTIFIED BY "user123" default tablespace TS_NORECO2 QUOTA UNLIMITED ON TS_NORECO2; CREATE USER USR_RECO IDENTIFIED BY "user123" default tablespace TS_RECO QUOTA UNLIMITED ON TS_RECO;
grant connect to USR_NORECO1, USR_NORECO2, USR_RECO; grant resource to USR_NORECO1, USR_NORECO2, USR_RECO;
3) 테이블 생성
CREATE TABLE USR_NORECO1.TAB1(A INT, B TIMESTAMP, C VARCHAR2(10)); CREATE TABLE USR_NORECO2.TAB1(A INT, B TIMESTAMP, C VARCHAR2(10)); CREATE TABLE USR_RECO.TAB1(A INT, B TIMESTAMP, C VARCHAR2(10));
col table_name for a20 col owner for a20 set linesize 200
select owner, table_name, tablespace_name from dba_tables where owner like 'USR%';
INSERT INTO USR_NORECO1.TAB1 values(1, SYSDATE, 'A'); INSERT INTO USR_NORECO1.TAB1 values(2, SYSDATE, 'AA'); INSERT INTO USR_NORECO2.TAB1 values(1, SYSDATE, 'B'); INSERT INTO USR_NORECO2.TAB1 values(2, SYSDATE, 'BA'); INSERT INTO USR_RECO.TAB1 values(1, SYSDATE, 'C'); INSERT INTO USR_RECO.TAB1 values(2, SYSDATE, 'CA');
SQL> select systimestamp from dual;
4) 1차 백업
rman target /
RUN { ALLOCATE CHANNEL c1 DEVICE TYPE DISK; BACKUP DATABASE FORMAT '/data/backup/db_%U'; BACKUP ARCHIVELOG ALL FORMAT '/data/backup/arch_%U'; BACKUP CURRENT CONTROLFILE FORMAT '/data/backup/ctl_%U'; RELEASE CHANNEL c1; }
5) 추가 트랜잭션 발생
INSERT INTO USR_NORECO1.TAB1 values(3, systimestamp, 'AB'); INSERT INTO USR_NORECO2.TAB1 values(3, systimestamp, 'BB'); INSERT INTO USR_RECO.TAB1 values(3, systimestamp, 'CB');
INSERT INTO USR_NORECO1.TAB1 values(4, SYSDATE, 'AC'); INSERT INTO USR_NORECO1.TAB1 values(5, SYSDATE, 'AAA');
INSERT INTO USR_NORECO2.TAB1 values(4, SYSDATE, 'BC'); INSERT INTO USR_NORECO2.TAB1 values(5, SYSDATE, 'BBB');
INSERT INTO USR_RECO.TAB1 values(4, SYSDATE, 'CC'); INSERT INTO USR_RECO.TAB1 values(5, SYSDATE, 'CBB');
col b for a30 select * from USR_RECO.TAB1; select * from USR_NORECO1.TAB1;
SQL> SELECT systimestamp FROM DUAL;
* 목표 복구시점은 drop 전 이다.
6) 아카이브 로그 생성
ALTER SYSTEM SWITCH LOGFILE; DROP TABLE USR_RECO.TAB1; ALTER SYSTEM SWITCH LOGFILE;
col name for a70 set linesize 300
SELECT thread#, sequence#, first_time, next_time, name, applied, deleted FROM v$archived_log ORDER BY thread#, sequence#;
3. RMAN 아카이브 백업
RMAN> BACKUP ARCHIVELOG ALL FORMAT '/data/backup/arch_%U';
백업파일 확인
ls -l /data/backup/
4. recodb VM start
/data/backup 에 백업이 완료 되었고, 이 디스크를 recodb 에 연결이 필요하다.
rm -rf /app/oracle/admin/oclasm/adump mkdir -p /app/oracle/admin/oclasm/adump ls -l /app/oracle/admin/oclasm/adump
rm -rf /app/oracle/oradata/oclasm/ mkdir -p /app/oracle/oradata/oclasm/ ls -l /app/oracle/oradata/oclasm/
rm -rf /app/oracle/arch/oclasm/ mkdir -p /app/oracle/arch/oclasm/ ls -l /app/oracle/arch/oclasm/
3) nomount
s1) echo $ORACLE_SID export ORACLE_SID=oclasm
sqlplus / as sysdba startup nomount pfile='/home/oracle/initoclasm.ora';
s2) echo $ORACLE_SID export ORACLE_SID=oclasm rman target / RESTORE CONTROLFILE FROM '/data/backup/ctl_0j4tjtbp_1_1'; ALTER DATABASE MOUNT;
report schema;
RUN { SET NEWNAME FOR DATAFILE 1 TO '/app/oracle/oradata/oclasm/system01.dbf'; SET NEWNAME FOR DATAFILE 3 TO '/app/oracle/oradata/oclasm/sysaux01.dbf'; SET NEWNAME FOR DATAFILE 4 TO '/app/oracle/oradata/oclasm/undotbs01.dbf'; SET NEWNAME FOR DATAFILE 8 TO '/app/oracle/oradata/oclasm/ts_reco01.dbf';
타이완은 대중교통이 잘되어있다. 비행기 스케쥴이 낮이면 메트로를 타고 시내로 들어오면되지만, 나처럼 자정 비행기를 탈 경우 지하철은 이미 끝나있다. 돈으로 해결하면 머리 아플 필요가 없다. 택시를 타면 된다. 하지만 다소 비싼 요금( 5만원 상당) 에 갸우뚱 해진다면 버스를 타는 방법이 있다. 대부분의 여행자들은 시먼딩에 숙소를 많이 잡게 될텐데 (나 또한 그랬듯이) 국광버스는 시먼딩을 가지 않고 타이베이 메인역으로 간다.
1. 타는 위치
타오위안 공항에서 arrival hall 지하 1층에 티켓 카운터가 있다.
공항에서 짐찾고 에스컬레이터를 타고 계속 내려와서 편의점을 지나면 있다. 발권기에서 이지카드로 구매 가능하나 나는 창구에서 현금으로 구매했음. 심카드는 창구가 닫혔는데 버스는 24시간이라 그런지 새벽에도 여는 듯함. 티켓을 사고 밖에 나가면 승강장이 있다. 5번 승강장으로 가면 됨.
2. 스케쥴
24시간 운영 이긴 하지만 심야시간은 배차간격이 길다. 주간배차는 10~15분 간격, 새벽 2시10 분부터 4시 까지는 1시간에 1번 배차된다.
3. 노선
버스는 타오위안 공항에서 타이베이 메인역 북쪽 방면에서 내려온다. 공항부터 시내까지 정차 없이 쭉 가다가 시내에서 몇번 정차하고 메인역을 종점으로 모든 승객이 내린다.
시먼딩까지 안가는건 아쉽지만 다행이 거리가 그닥 멀지는 않다. 다만 나는 택시를 타려다가 엄청난 냄새때문에 포기했다...