카테고리 없음2019. 8. 25. 05:58

누구에게나 사랑받는 매력적인 사람이 되려면 꼭 필요한 초긍정 마인드

빨간머리앤을 읽어야 하는 이유

1. 활자 속 뜻깊은 의미
2. 홀로서기의 표본
3. 정통 소설의 즐거움

정신적으로 독립하고 싶은 아이들에게 읽으라고 권해주면 좋은 책

1. 고아원에서 자란 앤
2. 선택받기 위해 부던히 노력한 앤

비참함으로부터 빠져나오는 하나의 방법

평생하지 못한 말을 앤이 대신 해주는 느낌

빨강머리앤의 명언

꿈을 가진다는 건 정말 기쁜 일이야
한 가지 꿈을 이루고 나면 더 높은 꿈을 꿀 수 있으니까
그래서 인생이 즐거운거 아닌가?

어떤 아침이든 간에 아침이 있는 건 멋진 거 아닐까요?
하루동안 무슨 일이 일어날지 아직 모르는 거잖아요.
너무도 많은 상상들이 존재하고 있잖아요!

침대는 단순히 잠만 자는 곳이 아니랍니다.
침대에서 우리는 꿈꿀 수 있잖아요.

린드 아주머니는 아무것도 기대하지 않은 사람은 
실망조차 할 필요가 없으니 다행이고 행복하다고 하셨어요.
하지만 저는 그렇게 생각하지 않아요.
실망할 것을 두려워하면서 아무것도 기대하지 않고 있다는 건
정말 우울한 일이라고 생각해요.
기대를 가지고 있다는 것 자체가 이미 커다란 즐거움이거든요.

앤은 세상에서 가장 긍정적인 사람

자신에게 해줄 말을 아는 사람

자신뿐 아니라 주변까지 포용하는 사람

누구나 홀로서기 해야한다.

내가 얼마나 소중한 사람인지
내가 얼마나 사랑받을만한 가치가 있는 사람인지
내가 좀 부족한게 있을지라도
나에게 어떤 말을 해주면서 나의 속을 키워나가야 할지
결국 이것들은 부모가 해결해줄 수 없어요.

홀로서기의 정수 빨간머리 앤

나만의 홀로서기 십계명 만들기

출처 : https://www.youtube.com/watch?v=XIcxONestRA

Posted by 자수성가한 부자
카테고리 없음2019. 8. 22. 05:48

인간관계 꼭 해야 되는 분명한 이유

인간관계가 어렵다는 것은 대단한게 있기때문에 어렵다.

살아가는데 있어서 이득볼 것들이 그 안에 다 있습니다.

자기를 이롭게 하는 동시에 상대를 이롭게 한다.

가장 어려워하는 부분은?

인간관계 자체를 굉장히 부담스럽게 생각하는 거예요.

인간관계의 이점을 알아야 한다.

내가 원하는 모든 것들이 관계속에서 있을 경우가 있다.

전화통화를 해서 얻는 정보와 카톡 대화를 해서 얻는 정보는 너무나 질이 다르고 깊이가 다르거든요.

전화통화를 두려워하는건 만남을 더 어려워 한다.

네 그럼 문자로 하겠습니다.

제가 전화드리겠습니다.

밥 한번 먹으면서 이야기하죠.

느낌이 어떠세요

만났을 때 훨씬 더 강도 높고 깊이 있는 것들이 교류가 일어나죠.

완전히 다른 카톡, 전화, 만남

만남을 두려워하면 성장할 수 없다.

사람이 만날 때 마다 성장하거든요.

직접 보고 강의듣는게 소원이예요.

사람을 만나고 배우고, 깨달은 것이 얼마나 많은지 잊어버리고 있었다.

그 사람의 인생을 살아본 것 같은 깨달음이 한 번에 오는 것입니다.

책을 읽어서 알 수 없는 것입니다.

나의 깨달음과 배움에 정지가 있었구나.

1. 책으로 부터 배울 수 있다.
2. 혼자 하는 여행을 통해서 배울 수 있다.
3. 일을 통해서 배울 수 있습니다.
4. 인간을 통해서 배울 수 있다.

가장 현실적인 조언을 해줄 수 있다.

나와 다른 곳에서 산 30년의 노하우를 나한테 기꺼이 전수해 주거나
나에게 도움을 줄 수 있는 사람이 세상에 널려 있다는 거예요.
혼자서는 얻기 힘든 다른 장소의 인사이트
현실적인 조언과 배움은 그 사람이 가지고 있습니다.

그 사람을 만날려는 노력을 했었어야 했다.

서로 교류가 일어나면서 사람으로부터 얻게 되거든요.

단절된 상황으로부터 

배움의 최고 재료. 사람입니다.

동호회

내가 원하는 정보를 가까운데서 얻을 수 있는 곳이 동호회입니다.

혼자와 같이 있는 시간이 밸런스를 유지하는 것입니다.

나가세요.

나와 다른 장소에서 크고 있는 사람들을 만나셔야 합니다.

완전히 다른 얘기를 들으면서 큰 자극이 됩니다.

다른 자극을 받으면서 커나가는 방법 하나.

사람으로부터 배움을 할 수 있다.

내가 확장되는 것

여러분 인간관계는 맺어도 좋고 안맺어도 좋은 것이 아니고,

누군가와 만날 때마다 확정되어 가는 중입니다.

교류가 일어날 때마다 다른 사람과 더불어 성장할 기회를 얻을 거예요.




출처 : https://www.youtube.com/watch?v=hbxnf9_nfFo

Posted by 자수성가한 부자
카테고리 없음2019. 8. 20. 05:26

2019-08-20 (화)

착한 사람일수록 선량함의 위험함을 깨닫고,
진짜 선량함을 베풀 수 있는 지혜가 필요합니다.
착한 사람이 베푸는 것이 당연한 것인줄 알고
이것저것 요구하는 사람들이 있기 때문입니다.
심지어 그런 사람들은 헌신하고 베푸는 이유를 
착해서가 아니라 '호구'이기 때문이라고 생각합니다.
강해야 할 때는 강하게 부드러워야 할 때는 부드럽게 변할 줄 아는 사람만이
인간관계에서 자신을 지킬 수 있습니다.
타인에게 휘둘리지 않고 싶다면
당신의 선량함에 가시를 날카롭게 세어야 합니다.

착하면서도 '가시'를 세울 수 있는 4가지 방법

1. 인내할 수 있는 한계선을 설정하고, 필요시 상대방에게 알려라.
혹시 무조건 다른 사람을 먼저 배려하는 것을 
선량함이라고 생각하시나요?
자기 이익을 포기하고 견디면
상대가 감동받을 것이라고 생각하시나요?
그것은 아주 큰 착각입니다.
최소한의 기준조차 없는 선량함과 양보는 당신 자신을 학대하는 것이나 다름 없습니다.
상대에게 당신을 이용해도 좋다는 
신호를 보이는 셈이 되기 때문입니다.
만약 당신이 상대와 잘 지내고 싶다면
무조건 참고 끌려 다니지 말고
당신이 인내할 수 있는 한계선을 명확히 알려야 합니다.
만약 상대도 당신과 잘 지낼 마음이 있다면
그 한계선을 존중할 것입니다.
그래야 두 사람의 관계가 더 나은 방향으로
발전할 수 있기 때문입니다.

2. 처음에는 소인처럼 깐깐하게 굴고 나중에는 군자처럼 대범해져라.
호의가 계속되면 권리인줄 안다는 말을 들어보셨나요?
처음에는 선의로 부탁을 들어줬어도
그것이 계속되면 당연히 내가 해야할 일인 것처럼 된다는 뜻입니다.
나의 일이 아닌데도 당연히 내가 해야될 일처럼 분위기가 조성되었을 때
비로소 불만을 터트리면 상대도 나도 마음이 상하고 마는 이상한 분위기가 조성됩니다.
사적이든 직장에서든 뒤탈없는 인간관계를 만들려면 
처음에는 소인처럼 깐깐하게 굴고
나중에는 군자처럼 대범하게 행동해야 합니다.
다소 까다롭게 보일지라도 
초반에 미리 당신이 원치않은 상황과 
반드시 지켜줬으면 하는 점들,
도움을 청하고 받는 범위 등을 솔직히 밝혀두세요.
하기 싫은 일을 억지로 해가며 다른 사람의 비위를 맞추는 것은
선한 것이 아닐 뿐 아니라 유약하고 어리석은 것일 뿐인 것입니다.

3. 마음은 친절하게, 그러나 태도는 단호하게 
새로운 친구를 사귀고,
새로운 친구에게 잘 해줬더니,
친구는 오히려 당신을 막 대했던 경험이 있으신가요?
이 때 계속해서 당신이 잘해줬다면
그 친구는 그것이 당연한 것인줄 알고,
계속해서 당신을 막 대했을 것입니다.
행동은 일련의 연쇄반응을 일으킵니다.
그러므로 손을 내밀 때는 내밀더라도
반격해야 할 때는 확실히 반격해야 합니다.
늘 당하던 사람이라도 
한번만 제대로 반격한다면,
이후에는 당신을 괴롭히는 빈도가 현저히 줄어들게 될 것입니다.
만약 당신이 반격하는데 어려움을 겪고 있을 때, 알아두면 좋은 팁이 있습니다.


대화의 성패를 가르는 것은 70%의 분위기 30%의 내용
그만큼 말에서는 내용보다 분위기가 중요하다는 뜻입니다.
부드러운 분위기를 무기삼아 평소 하고 싶었던 말을 상대에게 해보세요

4. 절대 지나치게 헌신을 하지 말라.

사람들이 대게 헌신이라고 생각하는 것은 상대방에게는 불필요한 이익일 뿐입니다.
헌신은 결국 쌍방 모두에게 무거운 감정적 짐으로 남습니다.
'베푼 쪽은' 상대방으로부터 반응과 감사를 원하게 되고,
'받은 쪽은' 더 큰 보답을 해야한다는 압박에 시달리기 때문입니다.
진정한 사랑이란 불필요한 헌신이 아니라
상대가 정말 필요로 하는 것을 주는 것입니다.
상대가 요구하지 않은 헌신에 에너지를 쏟기보다,
당신의 성장에 시간과 에너지를 붓는 것이 
서로의 관계에 더욱 좋은 결과를 나을 것입니다.

착하게만 살아서도
악하게만 살아서도 안되는 시대입니다.
다른 무언가를 위해 살아가기 보다 당신 자신을 위해 살아가세요.
타인의 눈치를 보지 않고 온전히 자신을 위해 살아가기 위해서
위 4가지 방법이 당신의 든든한 방패막이 되어줄 것입니다.

당신의 착함을 이용하는 사람들에게 한방을 먹여주세요.

출처 : https://www.youtube.com/watch?v=2kMdTvaFdYk
       책 : 착하게, 그러나 단호하게

Posted by 자수성가한 부자
카테고리 없음2019. 8. 19. 13:04

MySQL

Percona Server

Maria DB

3개 회사의 솔루션이 기본 코드를 공유하면서도 각자 조금씩 다른 기능들을 가지고 있다.

 

 

MySQL 5.x의 데이터 파일과 .FRM 파일(테이블 정의 파일)은 MariaDB 5.x와 호환된다.

 

MySQL 5.x 와 Maria DB 5.x는 옵티마이저나 스토리지 엔진에서 상당한 차이가 있다.

HeidiSQL : MariaDB 10.0 버전 이상에서 설치되는 GUI 클라이언트 툴

mysql_upgrade : 업그레이드를 위한 유틸리티

InnoDB : 종료되었다가 나중에 다시 시작될 때 트랜잭션 로그

 

사용자의 식별

 계정은 사용자의 접속 지점도 계정의 일부가 된다. 예) `svd_id`@`127.0.0.1`

 여러 개의 계정 중 하나로 접속하기 위해서는 권한과 계정정보가 작은 것을 선택한다. 

 예) 아래의 두개의 계정 중 권한과 계정 정보가 적은 1번으로 로그인한다. 패스워드를 abc로 하게되면 비밀번호 불일치 로 오류가 난다.

 1. `svc_id`@`192.168.0.10` 패스워드 : 123

 3. `svd_id`@`%` 패스워드 : abc

 

명령어

## 시작 

shell> sh ${MYSQL_HOME}/support-files/mysql.server start

## 종료

shell> sh ${MYSQL_HOME}/support-files/mysql.server stop

shell> mysqladmin -u root -p shutdown

 

## database 조회

show databases

## 권한 부여

mariadb> GRANT privilege_list on db.table to `user`@`host`;

mariadb> GRANT privilege_list on db.table to `user`@`host` identified by `password` with grant option;

             (with grant option : 다른 사용자에게 권한을 부여할 수 있는 권한)

 

mariadb> GRANT SUPER *.* to `user`@`localhost`;

maria db는 특정 컬럼에만 권한도 부여 가능하다. => 그러나 권장하지 않는다. 왜냐하면 나머지 모든 컬럼에 대해서도 권한 체크가 발생하기 때문에 성능상에 느리다. 컬럼 단위의 접근이 필요하다면 view를 만들어 사용하는 것을 권장한다.

mariadb> SHOW DATABASES;

information_schema : 테이블 정보, 스토어드 프로그램 정보가 같은 정보 조회 가능(오라클의 딕셔너리뷰와 동일)

mysql : MariaDB 서버의 사용자 인증 정보 스토어드 프로그램과 이벤트 정보 타임존이나 복제에 관련된 정보 저장.

peroformance_schema :

test : MariaDB의 디폴트 DB로 아무런 오브젝트가 없다. 삭제하는 것이 낫다.

root 관리자 계정은 너무 많이 알려져 있기 때문에 별도의 아이디를 이용해 관리자 계정을 준비하는 것이 좋다.

FLUSH privilege;

 => grant 명령 실행시 실행이 되지 않을 경우 이 명령을 실행하면 실행 가능한 경우가 있다.

IF NOT EXISTS : CREATE TABLE 구문에 조건을 포함시킬 수 있는데, 생성하려는 테이블이나 칼럼이 이미 있는 경우는 에러를 발생시키지 않고 경고 메시지만 발생시킨다.

CREATE TABLE IF NOT EXISTS tab_test (

....

) ENGINE = InnoDB; => 스토리지 엔진을 지정

 

스토리지 엔진의 종류

Inno DB :

XtraDB :

## 테이블의 정보를 보기 위한 명령어

SHOW CREATE TABLE 테이블명 ;

DESC 테이블명;

 

데이터 타입

oracle maria db  
number int  
varchar, varchar2 varchar  
     
     
     
     
     

 

참고문서 및 사이트

 Migrating to MariaDB : https://www.apress.com/gp/book/9781484239964#aboutBook

 

Migrating to MariaDB - Toward an Open Source Database Solution | William Wood | Apress

This book will help you mitigate the risks involved in migrating away from a proprietary database platform toward MariaDB’s open source database engine. You’ll learn to implement MariaDB features to provide security and failover protection, and ensure a su

www.apress.com

궁금한 점

 MySQL -> Maria DB Winback이 가능한가?

 Shareplex는 이기종 DB의 동기화가 가능한가?

  => Oracle to Maria DB는 가능하다.

 앞으로 Maria DB의 기술지원 형태는 어떻게 될 것인가?

 업그레이드 방식은 어떻게 되는가?

 Maria DB도 HA 구성을 할 수 있는가?

 파라미터는 어떻게 설정, 변경할 수 있는가?

딕셔너리 뷰는 존재하는가?

파티셔닝은 가능한가?

Maria DB의 기술지원 금액 및 기술지원의 범위는 어떻게 되는가?(타사 사례)

Maria DB에서의 Database의 개념은 Oracle의 Database와 어떻게 다른가?

 DB시장의 Market share는 어떻게 되는가?

https://db-engines.com/en/ranking

 

DB-Engines Ranking

Popularity ranking of database management systems.

db-engines.com

 

 

참고문서

 autocommit :  https://slobell.com/blogs/41

Posted by 자수성가한 부자
카테고리 없음2019. 7. 10. 07:04

1. cellcli 접속

cellcli

 

2. validate cell configuration
alter cell validate configuration

 

3. alerthistory 조회
list alerthistory

 

 

4. drop all alerthistory
drop alerthistory all

 

5. 확인
list alerthistory

Posted by 자수성가한 부자
카테고리 없음2019. 6. 4. 14:21

-----------
EM express
-----------

1. 현재 EM express port 조회

SQL> select dbms_xdb_config.getHttpsPort() from dual;


2. EM port 변경

SQL> exec dbms_xdb_config.sethttpsport(port-number)


3. 접속(on Webbrowser)
 https://<IP Address>:8000/em


출처 : https://docs.cloud.oracle.com/iaas/Content/Database/Tasks/examonitoringDB.htm

Posted by 자수성가한 부자
카테고리 없음2019. 5. 14. 15:13

제목 : TDE 테스트

 

테스트 환경

DB 버전 : Oracle 12c EE(12.2.0.1)

OS 버전 : Oracle Linux Server release 7.6

 

 


 

시나리오 요약

 1. TDE 환경 구축

 2. 테스트용 유저, 테이블스페이스, 테이블 생성

 3. TDE 자동 로그인 설정

 4. 확인

 


시나리오 상세 및 테스트 로그

 

1. TDE 환경 구축

  1) 디렉토리 생성

$ cd /u01/app/oracle/product/12.2.0
$ mkdir WALLET


  2) sqlnet.ora 편집
[oracle@datasvc-db admin]$ cat sqlnet.ora
sqlnet.ora Network Configuration File: /u01/app/oracle/product/12.2.0/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

ENCRYPTION_WALLET_LOCATION =
  (SOURCE =(METHOD = FILE)(METHOD_DATA =
    (DIRECTORY = /u01/app/oracle/product/11.2.0/WALLET)))

#sqlnet.authentication_services=(none)


  3) key store 생성

SQL> administer key management create keystore '/u01/app/oracle/product/11.2.0/WALLET/' identified by wallet#123;

keystore altered.


  4) open key store

SQL> administer key management set keystore open identified by wallet#123;

keystore altered.


  5) key 활성화
SQL> administer key management set key identified by wallet#123 with backup;

keystore altered.

  6) 설정 확인
SQL> select con_id, key_id from v$encryption_keys;

    CON_ID KEY_ID
---------- ------------------------------------------------------------------------------
 0 AQPScKAD2U9Qv+bhIHGUBkkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA


  7) key 확인
set lines 200
col wrl_parameter for a50
select * from v$encryption_wallet;

BAC     CON_ID
-------------------- -------------------------------------------------- ------------------------------ -------------------- -------
FILE      /u01/app/oracle/product/11.2.0/WALLET/ OPEN        PASSWORD      SINGLE    NO    0

 

2. 테스트용 유저, 테이블스페이스, 테이블 생성


  1) 암호화 테이블스페이스 생성


SQL> create tablespace tbs_tde_test datafile '/u01/oradata_12c/ORA12KO/tbs_tde_test_01.dbf' size 100M  
  2  encryption using 'AES256' default storage(ENCRYPT);

Tablespace created.



  2) 유저 생성 / 권한 부여 / 디폴트 테이블스페이스 지정
SQL> create user tde_test identified by "tde_test123!";

User created.

SQL> grant dba to tde_test;

Grant succeeded.

SQL> alter user tde_test default tablespace tbs_tde_test;

User altered.


  3) 테스트용 테이블 생성


SQL> conn tde_test/tde_test123!
Connected.

SQL> create table tb_tde_test (owner varchar2(128), table_name varchar(128) encrypt);

Table created.

SQL> insert into tb_tde_test
  2  select owner, table_name from dba_tables;

2567 rows created.

SQL> commit;

Commit complete.



  4) 테이블정보 확인

SQL> select owner, table_name, column_name, encryption_alg from dba_encrypted_columns
where table_name = 'TB_TDE_TEST'

OWNER        TABLE_NAME COLUMN_NAME  ENCRYPTION_ALG
------------------------------ ---------------------------------------- ---------------------------------------- ------------------
TDE_TEST        TB_TDE_TEST TABLE_NAME  AES 192 bits key

3. TDE 자동 로그인 설정

SQL> administer key management create auto_login keystore from keystore '/u01/app/oracle/product/11.2.0/WALLET/' identified by wallet#123;

keystore altered.

4. 재기동 후 확인

- 재기동
SQL> startup force;


- 확인

select * from tde_test.tb_tde_test;

OWNER        TABLE_NAME
------------------------------ ----------------------------------------

... 중간 생략 ...


APEX_050000        WWV_MIG_FRM_MENUSMODULEROLES
APEX_050000        WWV_MIG_FRM_MENU
APEX_050000        WWV_MIG_FRM_MENU_MENUITEM
APEX_050000        WWV_MIG_FRM_MENUITEM_ROLE

2567 rows selected.


참고문서 : 

https://dbaclass.com/article/transparent-data-encryption-tde-in-oracle-12c/

Posted by 자수성가한 부자
카테고리 없음2019. 4. 16. 11:17

Smart Scan을 위한 조건
----------------------------
1. Full Table Scan 또는 Fast Full Index Scan, Full Bitmap Index Scan이 발생되어야 한다.


2. Buffer Cache로 부터 블럭을 읽어들이지 않고, Disk로부터 Direct Path Read를 해야한다.
- Parallel Query 는 SMALL TABLE보다 큰 테이블에 대해 Direct Path Read를 해야한다.
- _serial_direct_read=TRUE로 direct read를 강제할 수 있다.


3. Scan되는 Segment는 Exadata Cell Storage 상의 Disk Group에 존재해야 합니다. 즉 Exadata나 SuperCluster 등에서만 동작합니다.


4. CELL_OFFLOAD_PROCESSING=TRUE;로 설정되어 있어야 한다.


5. ASM은 11.2 이상이고, diskgroup의 attributes인 cell.smart_scan_capable=TRUE로 설정되어 얐어야 한다.

 

select b.name "GROUP", a.name "ATTRIBUTE", value
from v$asm_attribute a, v$asm_diskgroup b
where a.group_number = b.group_number
and a.name = 'cell.smart_scan_capable';

 

참고 : https://otsteam.tistory.com/186

Posted by 자수성가한 부자
카테고리 없음2019. 4. 16. 09:22

Q : 

 

일반 테이블을 파티션으로 변경하려고 할 때, 고려해야할 사항이 무엇인가?

 

 

A :

 

1. 일반 테이블의 크기가 일정 크기 이상이 되어야 파티션 테이블로 하는 것이 의미가 있다.

예를 들어 세그먼트 크기가 10GB이상, 건수가 5000만건 이상 등.

 

2. 특정 컬럼을 기준으로 나눌 수 있는가? 컬럼이 특정의 리스트로 분류되는지 아니면 날짜를 기준으로 분류되는지 알아야 한다.

 

3. 파티션 단위로 관리될 필요가 있는가? 특정 컬럼의 값이 날짜 또는 특정 리스트로 분류되는가?

 

4. 인덱스(PK 포함)는 파티션 키가 포함되어 있어 local로 생성되도록 한다. 왜냐하면 파티션이 추가되거나 삭제되거나 할 때 그에 따라 수반되는 작업을 줄이기 위해서는 local로 생성하는 것이 좋다. 그러나 한가지 주의할 점은 자주 사용되는 SQL에서 where 절에 파티션 키가 없다면, full table scan이나 그에 준하는 최악의 실행계획이 나올 수 있어 성능에 악영향를 미친다.

Posted by 자수성가한 부자
Oracle/Backup & Recovery2019. 4. 5. 11:41

설명

 

RMAN의 12c new feature인 Recover table을 테스트하는 시나리오.

기존에 클론 DB 생성 후 데이터 export 후 데이터 import하는 절차를 RMAN의 명령어 하나로 복구할 수 있게 된 기능

 

 

테스트 시나리오 요약


 1. 테스트용 테이블 생성

 2. 백업

 3. 테스트용 테이블 DROP

 4. 복구

 5. 복구된 테이블 확인

 

 

 

테스트 상세


1. 테스트용 테이블 생성

 

SQL> create table test.test (co1l number);

Table created.

SQL> insert into test.test values(1);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from test.test;

      CO1L
----------
         1

SQL> select sysdate from dual;

SYSDATE
-------------------
2019/03/30 11:19:19           ============> 복구될 시간

 

 

2. 백업

 

rman target /

 

RMAN> run {
 allocate channel ch1 type disk format='/tmp/backup/%U_%T';
 backup database;
 }2> 3> 4>

 

released channel: ORA_DISK_1
allocated channel: ch1
channel ch1: SID=108 instance=bitek1 device type=DISK

Starting backup at 30-MAR-19
channel ch1: starting full datafile backup set
channel ch1: specifying datafile(s) in backup set
input datafile file number=00002 name=+DATA/BITEK/DATAFILE/sysaux.261.1002792885
input datafile file number=00001 name=+DATA/BITEK/DATAFILE/system.260.1002792865
input datafile file number=00003 name=+DATA/BITEK/DATAFILE/undotbs1.262.1002792889
input datafile file number=00004 name=+DATA/BITEK/DATAFILE/undotbs2.264.1002792943
input datafile file number=00006 name=+DATA/BITEK/DATAFILE/splex.296.1003324047
input datafile file number=00005 name=+DATA/BITEK/DATAFILE/users.265.1002792955
channel ch1: starting piece 1 at 30-MAR-19
channel ch1: finished piece 1 at 30-MAR-19
piece handle=/tmp/backup/2cttnpn9_1_1_20190330 tag=TAG20190330T110720 comment=NONE
channel ch1: backup set complete, elapsed time: 00:00:25
Finished backup at 30-MAR-19

Starting Control File and SPFILE Autobackup at 30-MAR-19
piece handle=/oracle/oracle/product/12.2.0/dbhome_1/dbs/c-120744536-20190330-03 comment=NONE
Finished Control File and SPFILE Autobackup at 30-MAR-19
released channel: ch1

 

 

3. 테스트용 테이블 drop

 

SQL> drop table test.test purge;

Table dropped.

SQL> desc test.test
ERROR:
ORA-04043: object test.test does not exist

 

 

4. 복구

 

RMAN> recover table "TEST"."TEST" until time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')" auxiliary destination '/oracle/oracle/recover';

 

  => 스키마(TEST)와 테이블명(TEST)은 큰따옴표로 묶고, 대문자를 반드시 써야한다. 그렇지 않으면 오류 발생

Starting recover at 30-MAR-19
current log archived
using channel ORA_DISK_1
RMAN-05026: warning: presuming following set of tablespaces applies to specified point-in-time

List of tablespaces expected to have UNDO segments
Tablespace SYSTEM
Tablespace UNDOTBS1
Tablespace UNDOTBS2

Creating automatic instance, with SID='prev'

initialization parameters used for automatic instance:
db_name=BITEK
db_unique_name=prev_pitr_BITEK
compatible=12.2.0
db_block_size=8192
db_files=200
diagnostic_dest=/oracle/oracle
_system_trig_enabled=FALSE
sga_target=1024M
processes=200
db_create_file_dest=/oracle/oracle/recover
log_archive_dest_1='location=/oracle/oracle/recover'
#No auxiliary parameter file used


starting up automatic instance BITEK

Oracle instance started

Total System Global Area    1073741824 bytes

Fixed Size                     8628936 bytes
Variable Size                281019704 bytes
Database Buffers             780140544 bytes
Redo Buffers                   3952640 bytes
Automatic instance created

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# restore the controlfile
restore clone controlfile;

# mount the controlfile
sql clone 'alter database mount clone database';

# archive current online log
sql 'alter system archive log current';
}
executing Memory Script

executing command: SET until clause

Starting restore at 30-MAR-19
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=45 device type=DISK

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: reading from backup piece /oracle/oracle/product/12.2.0/dbhome_1/dbs/c-120744536-20190330-04
channel ORA_AUX_DISK_1: piece handle=/oracle/oracle/product/12.2.0/dbhome_1/dbs/c-120744536-20190330-04 tag=TAG20190330T111223
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/oracle/oracle/recover/BITEK/controlfile/o1_mf_g9xnlzst_.ctl
Finished restore at 30-MAR-19

sql statement: alter database mount clone database

sql statement: alter system archive log current

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# set destinations for recovery set and auxiliary set datafiles
set newname for clone datafile  1 to new;
set newname for clone datafile  3 to new;
set newname for clone datafile  4 to new;
set newname for clone datafile  2 to new;
set newname for clone tempfile  1 to new;
# switch all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  1, 3, 4, 2;

switch clone datafile all;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

renamed tempfile 1 to /oracle/oracle/recover/BITEK/datafile/o1_mf_temp_%u_.tmp in control file

Starting restore at 30-MAR-19
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /oracle/oracle/recover/BITEK/datafile/o1_mf_system_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00003 to /oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs1_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00004 to /oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs2_%u_.dbf
channel ORA_AUX_DISK_1: restoring datafile 00002 to /oracle/oracle/recover/BITEK/datafile/o1_mf_sysaux_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /tmp/backup/2ettnpvt_1_1_20190330
channel ORA_AUX_DISK_1: piece handle=/tmp/backup/2ettnpvt_1_1_20190330 tag=TAG20190330T111156
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:45
Finished restore at 30-MAR-19

datafile 1 switched to datafile copy
input datafile copy RECID=5 STAMP=1004268073 file name=/oracle/oracle/recover/BITEK/datafile/o1_mf_system_g9xnmcsd_.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=6 STAMP=1004268073 file name=/oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs1_g9xnmcsw_.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=7 STAMP=1004268073 file name=/oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs2_g9xnmctb_.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=8 STAMP=1004268073 file name=/oracle/oracle/recover/BITEK/datafile/o1_mf_sysaux_g9xnmcrw_.dbf

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# online the datafiles restored or switched
sql clone "alter database datafile  1 online";
sql clone "alter database datafile  3 online";
sql clone "alter database datafile  4 online";
sql clone "alter database datafile  2 online";
# recover and open database read only
recover clone database tablespace  "SYSTEM", "UNDOTBS1", "UNDOTBS2", "SYSAUX";
sql clone 'alter database open read only';
}
executing Memory Script

executing command: SET until clause

sql statement: alter database datafile  1 online

sql statement: alter database datafile  3 online

sql statement: alter database datafile  4 online

sql statement: alter database datafile  2 online

Starting recover at 30-MAR-19
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 84 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_84.336.1004267561
archived log for thread 1 with sequence 85 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_85.337.1004267563
archived log for thread 1 with sequence 86 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_86.338.1004267991
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_84.336.1004267561 thread=1 sequence=84
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_85.337.1004267563 thread=1 sequence=85
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_86.338.1004267991 thread=1 sequence=86
media recovery complete, elapsed time: 00:00:01
Finished recover at 30-MAR-19

sql statement: alter database open read only

contents of Memory Script:
{
   sql clone "create spfile from memory";
   shutdown clone immediate;
   startup clone nomount;
   sql clone "alter system set  control_files =
  ''/oracle/oracle/recover/BITEK/controlfile/o1_mf_g9xnlzst_.ctl'' comment=
 ''RMAN set'' scope=spfile";
   shutdown clone immediate;
   startup clone nomount;
# mount database
sql clone 'alter database mount clone database';
}
executing Memory Script

sql statement: create spfile from memory

database closed
database dismounted
Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    1073741824 bytes

Fixed Size                     8628936 bytes
Variable Size                281019704 bytes
Database Buffers             780140544 bytes
Redo Buffers                   3952640 bytes

sql statement: alter system set  control_files =   ''/oracle/oracle/recover/BITEK/controlfile/o1_mf_g9xnlzst_.ctl'' comment= ''RMAN set'' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started)
Oracle instance started

Total System Global Area    1073741824 bytes

Fixed Size                     8628936 bytes
Variable Size                281019704 bytes
Database Buffers             780140544 bytes
Redo Buffers                   3952640 bytes

sql statement: alter database mount clone database

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# set destinations for recovery set and auxiliary set datafiles
set newname for datafile  5 to new;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile  5;

switch clone datafile all;
}
executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

Starting restore at 30-MAR-19
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=51 device type=DISK

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00005 to /oracle/oracle/recover/PREV_PITR_BITEK/datafile/o1_mf_users_%u_.dbf
channel ORA_AUX_DISK_1: reading from backup piece /tmp/backup/2ettnpvt_1_1_20190330
channel ORA_AUX_DISK_1: piece handle=/tmp/backup/2ettnpvt_1_1_20190330 tag=TAG20190330T111156
channel ORA_AUX_DISK_1: restored backup piece 1
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 30-MAR-19

datafile 5 switched to datafile copy
input datafile copy RECID=10 STAMP=1004268201 file name=/oracle/oracle/recover/PREV_PITR_BITEK/datafile/o1_mf_users_g9xnrr06_.dbf

contents of Memory Script:
{
# set requested point in time
set until  time "to_date('2019/03/30 11:19:19','yyyy/mm/dd hh24:mi:ss')";
# online the datafiles restored or switched
sql clone "alter database datafile  5 online";
# recover and open resetlogs
recover clone database tablespace  "USERS", "SYSTEM", "UNDOTBS1", "UNDOTBS2", "SYSAUX" delete archivelog;
alter clone database open resetlogs;
}
executing Memory Script

executing command: SET until clause

sql statement: alter database datafile  5 online

Starting recover at 30-MAR-19
using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 84 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_84.336.1004267561
archived log for thread 1 with sequence 85 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_85.337.1004267563
archived log for thread 1 with sequence 86 is already on disk as file +DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_86.338.1004267991
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_84.336.1004267561 thread=1 sequence=84
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_85.337.1004267563 thread=1 sequence=85
archived log file name=+DATA/BITEK/ARCHIVELOG/2019_03_30/thread_1_seq_86.338.1004267991 thread=1 sequence=86
media recovery complete, elapsed time: 00:00:00
Finished recover at 30-MAR-19

database opened

contents of Memory Script:
{
# create directory for datapump import
sql "create or replace directory TSPITR_DIROBJ_DPDIR as ''
/oracle/oracle/recover''";
# create directory for datapump export
sql clone "create or replace directory TSPITR_DIROBJ_DPDIR as ''
/oracle/oracle/recover''";
}
executing Memory Script

sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/oracle/oracle/recover''

sql statement: create or replace directory TSPITR_DIROBJ_DPDIR as ''/oracle/oracle/recover''

Performing export of tables...
   EXPDP> Starting "SYS"."TSPITR_EXP_prev_Fqyg":
   EXPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
   EXPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
   EXPDP> Processing object type TABLE_EXPORT/TABLE/TABLE
   EXPDP> . . exported "TEST"."TEST"                               5.054 KB       1 rows
   EXPDP> Master table "SYS"."TSPITR_EXP_prev_Fqyg" successfully loaded/unloaded
   EXPDP> ******************************************************************************
   EXPDP> Dump file set for SYS.TSPITR_EXP_prev_Fqyg is:
   EXPDP>   /oracle/oracle/recover/tspitr_prev_99272.dmp
   EXPDP> Job "SYS"."TSPITR_EXP_prev_Fqyg" successfully completed at Sat Mar 30 11:25:42 2019 elapsed 0 00:01:23
Export completed


contents of Memory Script:
{
# shutdown clone before import
shutdown clone abort
}
executing Memory Script

Oracle instance shut down

Performing import of tables...
   IMPDP> Master table "SYS"."TSPITR_IMP_prev_Fyhj" successfully loaded/unloaded
   IMPDP> Starting "SYS"."TSPITR_IMP_prev_Fyhj":
   IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE
   IMPDP> Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
   IMPDP> . . imported "TEST"."TEST"                               5.054 KB       1 rows
   IMPDP> Processing object type TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
   IMPDP> Job "SYS"."TSPITR_IMP_prev_Fyhj" successfully completed at Sat Mar 30 11:26:23 2019 elapsed 0 00:00:14
Import completed


Removing automatic instance
Automatic instance removed
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_temp_g9xnockf_.tmp deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/onlinelog/o1_mf_4_g9xns44l_.log deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/onlinelog/o1_mf_3_g9xns32o_.log deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/onlinelog/o1_mf_2_g9xnrzx9_.log deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/onlinelog/o1_mf_1_g9xnrzfl_.log deleted
auxiliary instance file /oracle/oracle/recover/PREV_PITR_BITEK/datafile/o1_mf_users_g9xnrr06_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_sysaux_g9xnmcrw_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs2_g9xnmctb_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_undotbs1_g9xnmcsw_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/datafile/o1_mf_system_g9xnmcsd_.dbf deleted
auxiliary instance file /oracle/oracle/recover/BITEK/controlfile/o1_mf_g9xnlzst_.ctl deleted
auxiliary instance file tspitr_prev_99272.dmp deleted
Finished recover at 30-MAR-19

 

5. 복구된 테이블 확인

 

SQL> select * from test.test;

      CO1L
----------
         1

 

※ 추가내용

recover table "TEST"."TEST" until time "to_date('2019/03/30 16:01:17','yyyy/mm/dd hh24:mi:ss')" auxiliary destination '/oracle/oracle/recover'
remap table "TEST"."TEST":"TEST_OLD";

 

 => 기존에 테이블이 존재한다면 remap table 기능을 이용하여 복구도 가능하다.

Posted by 자수성가한 부자