2017년 9월 29일 금요일

RMAN – 파라미터파일(spfile) 복구

# 백업셋 조회

RMAN> list backup;
RMAN> list backupset; 

# 제어 파일 복구

RMAN> restore spfile;  -- 데이터베이스가 unmount 상태일 때
RMAN> restore spfile to 'D:\oradata2\spfile_temp.ora';  -- 데이터베이스가 운영중인 경우에는 다른 경로에 복원
RMAN> restore spfile to pfile 'D:\oradata2\init_temp.ora';  -- spfile 을 특정 위치 pfile 로 복원
RMAN> restore spfile from 'D:\ORABACKUP\ORCL_0FSFM8OB_1_1_20170929' -- 특정 백업 조각에서 복원

 

 


RMAN – 제어파일(Control) 복구

# 백업셋 조회

RMAN> list backup;
RMAN> list backupset; 

 

# 제어 파일 복구

RMAN> restore controlfile;  -- 데이터베이스가 unmount 상태일 때
RMAN> restore controlfile from tag TAG20170929T144247; -- 특정 TAG 위치 백업셋으로 복원
RMAN> restore controlfile  from 'D:\ORABACKUP\ORCL_0FSFM8OB_1_1_20170929' -- 특정 백업 조각에서 복원
RMAN> restore controlfile to 'D:\oradata2';  -- 데이터베이스가 운영중인 경우에는 다른 경로에 복원

 

 


RMAN – 테이블/레코드 복구

# 백업셋 조회

RMAN> list backupset; 
RMAN> list backup of database;
RMAN> list backup of datafile "D:\oradata\orcl\test.DBF";
RMAN> list backup of tablespace test;
RMAN> list copy of tablespace "test";

 

-- 일반적인 방법  --

# 별도 데이터베이스에 테이블스페이스/데이터 복원

# 별도 위치에 복원된 데이터에서 특정 테이블 데이터 export

# 원본 데이터베이스의 대상 테이블 or 레코드 삭제후 import

 

-- RMAN 버젼(12c)에서 recover table 지원시  --

RMAN> recover table 대상테이블 until time "to_date('2017-10-10:22:30:50','yyyy-mm-dd:hh24:mi:ss')"  auxiliary  destination 'd:/data/temp';  -- 지정된 시점으로  복원

RMAN> recover table 대상테이블 until scn 10345 auxiliary  destination 'd:/data/temp'; -- 백업 지점으로 테이블 전체 복원

RMAN> recover table 대상테이블 until time "to_date('2017-10-10:22:30:50','yyyy-mm-dd:hh24:mi:ss')"  auxiliary  destination 'd:/data/temp'  remap table scott.test1:test1_temp;  -- 기존 테이블과 별도로 다른 테이블 이름으로 복원

 


2017년 9월 27일 수요일

RMAN - 테이블스페이스 복구

# 백업셋 조회

RMAN> list backupset;
RMAN> list backup of database;
RMAN> list backup of datafile "D:\oradata\orcl\USERS01.DBF";
RMAN> list backup of tablespace "USERS";
RMAN> list copy of tablespace "USERS";
RMAN> report schema;  -- 테이블스페이스 정보 확인

 

# 테이블 스페이스 파일 손상/삭제 시  (오프라인 가능시)

RMAN> sql 'alter tablespace users offline immediate'; -- 대상 테이블스페이스 오프라인
RMAN> restore tablespace "USERS"; -- 파일 복구 (가장 마지막 백업본으로 복원. 백업셋/카피 모두 포함)
RMAN> recover tablespace "USERS"; -- 테이블스페스 복구
RMAN> sql 'alter tablespace users online'; -- 다시 온라인

*  백업셋/이미지 목록에서 마지막 백업본 확인 필요 (마지막 백업 이후 수정된 데이터는?)

 

# 테이블 스페이스 파일 손상/삭제시 (오프라인 불가시)

RMAN> shutdown abort;  -- 인스턴스 강제 종료
RMAN> startup mount;
RMAN> restore database;
RMAN> recover database;
RMAN> alter database open;

 

# 테이블 스페이스 파일을 다른 파일명 or 경로에 복원하기 

RMAN> run {
sql 'alter tablespace users offline immediate'; -- 대상 테이블스페이스 오프라인
set newname for datafile 4 to 'D:\app\Administrator\oradata\temp\users01.dbf';  -- 대상 파일 번호의 Datafile 정보 변경
restore tablespace "USERS";
switch datafile 4;
recover tablespace "USERS";
sql 'alter tablespace users online';
}

 


2017년 9월 15일 금요일

RMAN - 설정 및 백업

\dbhome_1\BIN>rman target system/xxxx
RMAN> connect target /   -- 현재 계정이 권한이 있는 경우

 

RMAN> show all;   -- 현재 기본 설정값 조회/설정  

# 백업파일 저장 위치 및 파일명 포맷  기본값 설정
RMAN> CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT 'D:/orabackup/orcl_%U_%T';

# 전체 데이터 백업 최적화 (이미 백업된 동일한 백업본이 있는 경우 건너뛰기)

RMAN> CONFIGURE BACKUP OPTIMIZATION ON;  

# 로그 삭제 정책

RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 0 TIMES TO 'DISK';

# 백업 보전 정책 (2가지중 한가지 선택 적용)

RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; (백업후 7일간 보존)
RMAN> CONFIGURE RETENTION POLICY TO REDUNDANCY 5; (최근 백업셋 5개 보존)

 

 

 

RMAN> report schema;  -- DB 테이블스페이스/파일 목록 조회

db_unique_name TESTDB을(를) 가진 데이터베이스에 대한 데이터베이스 스키마 보고서입니다.

영구 데이터 파일 목록
===========================
파일 크기(MB) 테이블스페이스 RB 세그먼트 데이터 파일 이름
---- -------- -------------------- ------- ------------------------
1 700 SYSTEM *** D:\APP\ADMINISTRATOR\ORADATA\TESTDB\SYSTEM01.DBF
2 780 SYSAUX *** D:\APP\ADMINISTRATOR\ORADATA\TESTDB\SYSAUX01.DBF
3 85 UNDOTBS1 *** D:\APP\ADMINISTRATOR\ORADATA\TESTDB\UNDOTBS01.DBF
4 5 USERS *** D:\APP\ADMINISTRATOR\ORADATA\TESTDB\USERS01.DBF

임시 파일 목록
=======================
파일 크기(MB) 테이블스페이스 최대 크기(MB) 임시 파일 이름
---- -------- -------------------- ----------- --------------------
1 197 TEMP 32767 D:\APP\ADMINISTRATOR\ORADATA\TESTDB\TEMP01.DBF

 

RMAN> backup database; -- 모든 Data 백업 (저장 경로는 전역값 참조)
RMAN> backup as compressed backupset  format 'D:/orabackup/orcl_data_%U_%T' database;
(압축,특정경로 지정시)
RMAN> backup tablespace users format 'D:/orabackup/orcl_data_users_%U_%T';
(특정 테이블스페이스만)
RMAN> backup archivelog all; -- 모든 아카이브로그 백업
RMAN> backup as compressed backupset format 'D:/orabackup/orcl_arc_%U_%T' archivelog all;
RMAN> backup archivelog all delete all input;
(로그 백업후 해당 로그 파일 삭제 - 미지정시 기본 정책 적용)
RMAN> copy datafile 'D:/oradata/testdb/USERS01.DBF' to 'D:/orabackup/USERS01.DBF';
(이미지 복사. 활용방법)

차등/증분/블록레벨

backup을(를) 17/09/15에서 시작 중
채널을 할당했습니다: ORA_DISK_1
ORA_DISK_1 채널: SID=1 장치 유형=DISK
ORA_DISK_1 채널: 전체 데이터 파일 백업 집합을 시작하는 중입니다.
ORA_DISK_1 채널: 백업 집합에서 데이터 파일을 지정하는 중입니다.
입력 데이터 파일 파일 번호=00002 이름=D:\APP\ADMINISTRATOR\ORADATA\TESTDB\SYSAUX01.DBF
입력 데이터 파일 파일 번호=00001 이름=D:\APP\ADMINISTRATOR\ORADATA\TESTDB\SYSTEM01.DBF
입력 데이터 파일 파일 번호=00003 이름=D:\APP\ADMINISTRATOR\ORADATA\TESTDB\UNDOTBS01.DBF
입력 데이터 파일 파일 번호=00004 이름=D:\APP\ADMINISTRATOR\ORADATA\TESTDB\USERS01.DBF
채널 ORA_DISK_1: 조각 1을(를) 17/09/15에서 시작 중
채널 ORA_DISK_1: 조각 1을(를) 17/09/15에서 완료
조각 핸들=D:\ORABACKUP\ORCL_01SEH05C_1_1_20170915 태그=TAG20170915T112948 주석=NONE
채널 ORA_DISK_1: 백업 집합 완료. 경과된 시간: 00:00:25
ORA_DISK_1 채널: 전체 데이터 파일 백업 집합을 시작하는 중입니다.
ORA_DISK_1 채널: 백업 집합에서 데이터 파일을 지정하는 중입니다.
백업 집합에 현재 제어 파일을 포함하는 중입니다.
백업 집합에 현재 SPFILE을 포함하는 중입니다.
채널 ORA_DISK_1: 조각 1을(를) 17/09/15에서 시작 중
채널 ORA_DISK_1: 조각 1을(를) 17/09/15에서 완료
조각 핸들=D:\ORABACKUP\ORCL_02SEH065_1_1_20170915 태그=TAG20170915T112948 주석=NONE
채널 ORA_DISK_1: 백업 집합 완료. 경과된 시간: 00:00:01
backup을(를) 17/09/15에서 완료

 

RMAN> list backupset; -- 백업셋 조회 (백업정보는 기본으로 컨트롤파일에 저장)


백업 집합 목록
===================


BS 키 유형 LV 크기 장치 유형 경과된 시간 완료 시간
------- ---- -- ---------- ----------- ------------ ---------
1 Full 1.21G DISK 00:00:19 17/09/15
BP 키: 1 상태: AVAILABLE 압축됨: NO 태그: TAG20170915T112948
조각 이름: D:\ORABACKUP\ORCL_01SEH05C_1_1_20170915
백업 집합 1의 데이터 파일 목록
파일 LV 유형 Ckp SCN Ckp 시간 이름
---- -- ---- ---------- -------- ----
1 Full 3705783 17/09/15 D:\APP\ADMINISTRATOR\ORADATA\TESTDB\SYSTEM01.DBF
2 Full 3705783 17/09/15 D:\APP\ADMINISTRATOR\ORADATA\TESTDB\SYSAUX01.DBF
3 Full 3705783 17/09/15 D:\APP\ADMINISTRATOR\ORADATA\TESTDB\UNDOTBS01.DBF
4 Full 3705783 17/09/15 D:\APP\ADMINISTRATOR\ORADATA\TESTDB\USERS01.DBF

BS 키 유형 LV 크기 장치 유형 경과된 시간 완료 시간
------- ---- -- ---------- ----------- ------------ ---------
2 Full 9.36M DISK 00:00:02 17/09/15
BP 키: 2 상태: AVAILABLE 압축됨: NO 태그: TAG20170915T112948
조각 이름: D:\ORABACKUP\ORCL_02SEH065_1_1_20170915
포함된 SPFILE: 수정 시간: 17/09/14
SPFILE db_unique_name: TESTDB
포함된 제어 파일: Ckp SCN: 3705791 Ckp 시간: 17/09/15

 

RMAN> CROSSCHECK BACKUPSET; -- 백업셋 정보와 파일간 일관성 체크 
RMAN> CROSSCHECK COPY;

RMAN> DELETE NOPROMPT OBSOLETE; -- 사용되지 않는 레코드 삭제 (불일치, 미존재등)
RMAN> DELETE NOPROMPT EXPIRED BACKUP;  -- 만기된 레코드 삭제
RMAN> DELETE NOPROMPT EXPIRED COPY;
RMAN> DELETE EXPIRED ARCHIVELOG ALL;

RMAN> validate database;  -- 백업 유효성 확인

 

# SQL Developer DBA 를 이용하면 GUI 를 이용하여 명령어를 손쉽게 생성 가능

* RUN{} 스크립트를 만들어서  배치 실행 가능
* 리스너 등 그외 서버 설정 파일등은 별도 백업을 진행해야 한다 

 



Oracle-RMAN-1.png
Oracle-RMAN-3.png
Oracle-RMAN-2.png

2017년 9월 14일 목요일

Oracle spfile 복구

파라미터 설정을 잘못한 경우 오류가 발생하여, DB 시작이 안되는 경우에 활용

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORA-16032: parameter xxxxx destination string cannot be translated
ORA-09291: sksachk: invalid device specified for archive destination
OSD-04018: ?????? ???????? ???? ?????? ???????? ?? ????????.
O/S-Error: (OS 123) ???? ????, ???????? ???? ???? ???? ?????? ?????? ??????????????.

 

SQL> conn system/xxxx as sysdba

[pfile 지정하여 마운트 - 기본 설치값 또는 백업용 지정]
SQL> startup mount pfile=D:\app\Administrator\product\11.2.0\dbhome_1\database\INITTESTDB.ORA
ORACLE 인스턴스가 시작되었습니다.  

[오류가 있는 spfile 을 참조하여 pfile 생성 - 생성된 pfile 에서 오류 부분 수정]
SQL> create pfile from spfile;
파일이 생성되었습니다. (경로는,  설치 기본 경로를 참조 "dbhome_1\database\")

[수정된 pfile 을 참조하여 다시 spfile 생성]
SQL> create spfile from pfile; 
파일이 생성되었습니다.

[백업 보관용으로 pfile 생성]
SQL> create pfile from spfile;

SQL> shutdown immediate
SQL> startup

 

 



Oracle-spfile-1.png

Oracle Archive Log Mode 설정

# SQL Plus

[DB 확인]
SQL> select name from v$database;
NAME
---------
TESTDB

[Archive Log 설정 확인]
SQL> archive log list;
ORA-01031: 권한이 불충분합니다
SQL> conn system/passwd as sysdba
연결되었습니다.
SQL> archive log list;
데이터베이스 로그 모드 아카이브 모드가 아님
자동 아카이브 사용 안함으로 설정됨
아카이브 대상 USE_DB_RECOVERY_FILE_DEST
가장 오래된 온라인 로그 순서 135
현재 로그 순서 137

[Archive Log 속성  적용 - 특정 경로, 파일명 필요시]
SQL> alter system set log_archive_dest_1='location=D:\app\Administrator\oradata\testdb\archive1' scope=spfile;
SQL> alter system set log_archive_dest_2='location=D:\app\Administrator\oradata\testdb\archive2' scope=spfile;
SQL> alter system set log_archive_format="%s_%t_%r.arc" scope=spfile;

[DB 종료]
SQL> shutdown immediate;

[DB Mount]
SQL> startup mount;

[Archive Log 설정  확인]
SQL> archive log list;
데이터베이스 로그 모드 아카이브 모드가 아님
자동 아카이브 사용 안함으로 설정됨
아카이브 대상 D:\app\Administrator\oradata\testdb\archive2
가장 오래된 온라인 로그 순서 135
현재 로그 순서 137

[DB Archive Log Mode 설정]
SQL> alter database archivelog;

데이타베이스가 변경되었습니다.

[Archive Log 설정  확인]
SQL> archive log list;
데이터베이스 로그 모드 아카이브 모드
자동 아카이브 사용으로 설정됨
아카이브 대상 D:\app\Administrator\oradata\testdb\archive2
가장 오래된 온라인 로그 순서 135
아카이브할 다음 로그 137
현재 로그 순서 137

[DB 활성]
SQL> alter database open;
데이타베이스가 변경되었습니다.

[Archive Log 파일 변경 테스트]
SQL> alter system switch logfile;
시스템이 변경되었습니다.

 

 



Oracle-ArchiveLog-1.png

2017년 9월 11일 월요일

Oracle Export, Import (백업/복원)

# Export 백업

exp userid=system/manager file='C:\full.dmp' full=y
exp userid=system/manager@SIDName file='C:\full.dmp' full=y (특정SID백업)
exp userid=scott/tiger file='C:\scott.dmp' (특정 소유자 개체 전체)
exp userid=system/manager file='C:\data.dmp' TABLESPACES=USERS (특정 테이블스페이스)
exp userid=system/manager file='C:\data.dmp' TABLES=(a,b) (특정 테이블)

 

# Import 복원

imp userid=system/system file='C:\full.dmp' full=y
imp userid=system/system@SIDName file='C:\full.dmp' full=y (특정SID복원)
- 복원하려는 시스템에 동일한 SID 가 존재해야 함


imp userid=system/manager owner=scott file='C:\scott.dmp'
- 복원하려는 시스템에 동일한 DB 계정 및 TableSpace 가 존재해야 함 (SID는 상관없음)

imp userid=system/system@SIDName file='C:\full.dmp' FROMUSER=scott TOUSER=scott2 tables=(a,b) 
- 특정 소유자 테이블을 다른 소유자 테이블로 복원

impdp  file=blog_data.dmp directory=mydir remap_tablespace=USERS:DATA
- 다른 테이블스페이스에 복원


exp --------------------------------------------------------------------------
USERID 사용자 이름/비밀번호    FULL 전체 파일 익스포트(N)
BUFFER 데이터 버퍼 크기    OWNER 소유자 사용자 이름 목록
FILE 출력 파일(EXPDAT.DMP)     TABLES 테이블 이름 목록
COMPRESS 하나의 확장 영역으로 임포트(Y)     RECORDLENGTH IO 레코드 길이
GRANTS 권한 부여 익스포트(Y)    INCTYPE 증분 익스포트 유형
INDEXES 인덱스 익스포트(Y)     RECORD 증분 익스포트 추적(Y)
DIRECT 직접 경로(N)     TRIGGERS 트리거 익스포트(Y)
LOG 화면 출력의 로그 파일     STATISTICS 객체 분석(ESTIMATE)
ROWS 데이터 행 익스포트(Y)    
CONSISTENT 테이블간 일관성(N)     CONSTRAINTS 제약 조건 익스포트(Y)
QUERY 테이블의 부분 집합을 엑스포트하는 데 사용하는 select 절
TTS_FULL_CHECK TTS에 대한 전체 또는 부분 종속성 검사 수행
TABLESPACES 익스포트할 테이블스페이스 목록

imp --------------------------------------------------------------------------
USERID 사용자명/비밀번호 FULL 파일 전체 임포트 (N)
BUFFER 데이터 버퍼의 크기 FROMUSER 소유 사용자명 목록
FILE 입력 파일들 (EXPDAT.DMP) TOUSER 사용자명의 목록
SHOW 파일 목차만 목록 (N) TABLES 테이블명 목록
IGNORE 생성 오류 무시 (N) 
GRANTS 권한부여 임포트 (Y) INCTYPE 증분 임포트 유형
INDEXES 인덱스 임포트 (Y) COMMIT 배열 삽입 커밋 (N)
ROWS 데이터 행 임포트 (Y) 
LOG 화면 출력의 로그 파일 CONSTRAINTS 제약조건을 임포트 (Y)
DESTROY 테이블스페이스 데이터 파일 겹쳐쓰기(N)
INDEXFILE 지정된 파일에 테이블/인덱스 정보 쓰기
DATA_ONLY 데이터만 임포트(N)

 


Oracle Listener / Tnsnames / Sqlnet 설정

listener.ora (서버) / tnsnames.ora (클라이언트)  / sqlnet.ora 파일 편집시, 포맷 오류 또는 오타등이 발생할수 있으므로 직접 편집 보다는 아래와 같은 툴을 활용하여 수정

- Oracle Net Configuration Assistant
- Oracle Net Manager
- 파일 위치 ex, File : \app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN

 

# 서버 서비스 제어 \dbhome_1\BIN>lsnrctl
  LSNRCTL> stop  (설정값 변경후에는 재시작 권장)
  LSNRCTL> start
  LSNRCTL> service
  LSNRCTL> status

 

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=WIN-9IHO67M3NVF)(PORT=1521)))
서비스 요약...
"CLRExtProc" 서비스는 1개의 인스턴스를 가집니다.
"CLRExtProc" 인스턴스(UNKNOWN 상태)는 이 서비스에 대해 1 처리기를 가집니다.
"testdb" 서비스는 1개의 인스턴스를 가집니다.
"testdb" 인스턴스(UNKNOWN 상태)는 이 서비스에 대해 1 처리기를 가집니다.
명령이 성공적으로 수행되었습니다

 

# 클라이언트 확인 \dbhome_1\BIN>tnsping.exe testdb

별칭 분석을 위해 TNSNAMES 어댑터 사용
DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = WIN-9IHO67M3NVF)(PORT = 1521)) (CONNECT_DATA = (SE
VER = SHARED) (SERVICE_NAME = testdb)))에 접속하려고 시도하는 중
확인(0밀리초)

 


Oracle Net Manager - 리스너 설정등

- 프로파일
- 서비스 이름 지정
- 리스너 설정
   (ex, File : \app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
   Service : OracleOraDb11g_home1TNSListener)

 



oracle-Net-Manager-1.png

2017년 9월 8일 금요일

Oracle Net Configuration Assistant - 리스너 구성 등

Oracle Net Configuration Assistant 를 활용하면, 리스너 구성 등 연결, 네트워크 구성등을 할수 있습니다. 물론 환경설정 파일을 직접 수정해도 되지만 오타 또는 포맷에 맞지 않는 경우 오류가 발생하므로, 기본 제공되는 툴을 활용하는 것도  좋은 방법입니다.

리스너 : 추가, 재구성, 삭제, 이름 바꾸기
   (ex, File : \app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
   Service : OracleOraDb11g_home1TNSListener)

 

 



oracle-Net-Configuration-1.png

Oracle Database 추가/구성/삭제 - Database Configuration Assistant

Database Configuration Assistant 를 사용하여, 인스턴스를 추가로 설치하거나 이미 설치된 인스턴스를 제거할수 있습니다. 

 



oracle-Configuration-1.png

Oracle Database 설정 - Administration Assistant

Oracle 설치 완료후, 설치된 인스턴스의 설정을 변경하고자 하는 경우.
* 물론 쿼리 명령어를 사용해도 되지만, 편리한 도구가 있으면 먼저 활용해 보는것도...

 

 

- Oracle 홈 : 기본 SID, control 파일 위치등 Oracle 작동 환경 설정값 
- OS 데이터베이스 관리자/운영자 (Oracle 제어 가능한 Windows 인증 계정)
- 인스턴스의 시작/정지/옵션/프로세스. Windows 인증 계정, Role 설정

 

ex, 
아래와 같은 오류시 현재 sqlplus 를 실행하는 계정이 윈도우 "ora_dba" 그룹에 포함되어 있지 않아서 권한이 없는 경우로, Administration Assistant 의 "OS 데이터베이스  관리자 - 컴퓨터" 에 계정을 추가해 주면 됨.

SQL> conn /as sysdba;
ERROR:
ORA-01031: insufficient privileges

"ora_dba" 그룹에 기본으로 포함되어 있는 계정 : LocalSystem, Oracle 설치시 사용된 계정

 

 



oracle-Administration-1.png

2019년 10월 MS 취약점 패치 주요 사항

CVE-2019-1166 | Windows NTLM 변조 취약성 https://portal.msrc.microsoft.com/ko-KR/security-guidance/advisory/CVE-2019-1166 CVE-2019-1230 | Hype...