1. 인덱스 (INDEX)

인덱스의 장점 : 검색 속도가 빠르다.

인덱스의 단점

데이터에 대한 추가/수정/삭제에 대한 연산 속도는 약간 느려진다.

데이터와 별도의 장소에 저장되어서 공간이 조금 더 필요하다. (데이터 저장 크기의 5~20%)

관리자의 수고

인덱스를 이용하게 되는 쿼리

- WHERE 절에서 인덱스 된 컬럼으로 검색할 때

- 조인 질의(Join Query)시 인덱스 된 컬럼으로 검색할 때

- Order By 절에서 인덱스 된 컬럼으로 정렬할 때

- Group By 절에서 인덱스 된 컬럼으로 집합 연산할 때

인덱스를 설정해주면 좋은 컬럼의 예 : 자주 사용되는 컬럼(검색 조건이나 정렬 조건으로 자주 이용되는 컬럼)

- 프라이머리 키(Primary Key) 컬럼

- 참조 키(Foreign Key) 컬럼

- 조인 질의(Join Query)에서 사용되는 컬럼

- 정렬 순서로 자주 사용되는 컬럼

- 자주 범위로 검색되는 컬럼

 

 

'MSSQL 2008 > 인덱스(INDEX)' 카테고리의 다른 글

인덱스 마지막 사용 시간 보기  (0) 2014.02.10
INDEX REBUILD & REORGANIZE  (0) 2014.02.06
INDEX SCAN 과 INDEX SEEK  (0) 2014.01.28
WITH ONLINE = OFF | ON  (0) 2014.01.22
MSSQL 통계  (0) 2014.01.22
by 짱구를꼭말려 2014. 1. 5. 16:58

페이지 분할

데이터에 행을 힙(heap)에 삽입할 때에는 PFS 페이지의 정보를 이용해서 빈 페이지를 찾으므로 페이지 분할이 발생하지 않는다

 

페이지 분할

- 키 순으로 데이터를 정렬해야 하는 클러스터 인덱스에 행을 삽입할 때 페이지 분할이 발생할 가능성이 있다.

- 페이지 분할이 발생할 때 페이지의 절반은 비어있는 새 페이지로 이동된다. 이 때, 같은 익스텐트에서 새 페이지를 먼저 찾고, 없을 경우 새로운 익스텐트를 할당 받는다(GAM, SGAM 을 이용)

- 일단 페이지가 분할되면 롤백을 하더라도 분할 상태가 그대로 유지된다.

by 짱구를꼭말려 2014. 1. 3. 15:28

1. 자동 증가(Auto Growth) - 성능 하락

데이터베이스의 파일(데이터 및 로그 파일) 단위로 설정되는 옵션, 모든 Edition에서 기본적으로 설정된다.

이 옵션은 성능에 나쁜 영향을 미친다. 이유 : 파일이 증가할 때 증가되는 부분을 모두 0으로 채우는 초기화 작업(zero-out)을 거치므로. 게다가 간헐적으로 증가하다 보면 연속적인 공간사용을 못하게 되어 여기저기 조각이 나게 된다. 따라서 순차적 읽기 대신 랜덤 액세스를 하게 되어 성능이 저하.

EX) 아무 옵션 없이 데이터베이스를 생성하면 1MB로 시작해서 10%씩 자동 증가되도록 설정

SOL) FILEGROWTH 옵션을 0 으로 지정하여 자동증가 해제, DBA가 부하가 덜 한 시간에 ALTER DATABASE 문을 사용하여 파일 크기를 키우던가 파일을 추가해 준다.

저의 회사에서는 사용 & Fixed 용량으로 자동증가를 시켜 놓았다. (% 증가보다 Fixed 증가가 더 좋기 때문)

 

2. 자동 축소(Auto Shrink) - 성능 하락

데이터베이스의 autoshrink 옵션을 TRUE로 설정하면 주기적으로 데이터베이스 파일의 축소가 발생. SQL Server의 Personal 및 Desktop 판에서 이 옵션이 기본적으로 설정.

* 자동 축소 될 때 DB 잠금이 발생. 데이터 이동에 따른 디스크 I/O 가 발생하여 성능 저하.

 

3. 자동 닫기(Auto Close) - 성능 하락

- SQL Server의 Personal 및 Desktop 판에서 이 옵션은 기본적으로 설정된다.

- 데이터베이스의 Autoclose 옵션을 TRUE로 설정하면 이 데이터베이스에 대한 마지막 사용자가 연결을 끊을 때 데이터베이스를 메모리에서 내리고, 사용자가 다시 접속할 때 데이터베이스를 메모리로 다시 올린다.

메모리에서 내릴 때에 디스크와 동기화 안된 페이지(Dirty Page)를 기록 하느라 디스크 I/O 발생.

메모리에서 올릴 때에 디스크에서 메모리로 올리면서 디스크 I/O 발생.

 

4. 통계 자동 생성 및 갱신 - 성능 증가

Auto create statistics

Auto update statistics 옵션으로 설정한다.

 

 

by 짱구를꼭말려 2014. 1. 2. 15:46

1. 시스템 구조

SQL 서버의 시스템 아키텍쳐

1. 논리적 데이터베이스

데이터베이스의 테이블, 뷰, 저장 프로시저 등

2. 물리적인 데이터베이스

데이터베이스의 파일

1. 주 데이터 파일 (Primary Data Files, MDF)

기본적인 데이터 구조 및 데이터 들이 저장

2. 보조 데이터 파일 (Secondary Data Files, NDF)

여러개의 디바이스 파일을 운영할 때 보조 데이터 파일

목적 : 데이터 I/O를 병렬적으로 수행하여 I/O 병목현상 줄이고, 수행 속도 증가

3. 로그 파일 (Log Files, LDF)

데이터베이스를 복구하는데 필요한 정보를 저장

각데이터베이스마다 반드시 있어야 한다.

 

TIP : 주 데이터 파일의 경로 알아내기

(Master 데이터베이스의 Sysdatabases 검색)

Select * from SYS.DATABASES WHERE name='데이터베이스이름'

 

파일을 백업 복사하여 다시 첨부 하는 것만으로 그 당시까지의 데이터와 로그를 다시 불러올 수 있다.

이러한 작업에 사용되는 프로시저 = sp_attach_db , sp_attach_single_file_db

 

2. 데이터 파일 구조

1. 페이지(Page)

데이터를 저장하고 처리하는데 사용되는 가장 기본적인 입출력 단위

페이지 헤더(96바이트)(페이지의 종류, 페이지의 여유공간정보, 페이지가 저장하는 데이터의 오브젝트ID) + 8096바이트 로 구성

- 데이터 파일 앞부분의 특수 페이지들

파일헤더 | PFS | GAM | SGAM | BCM | DCM | ...

PFS (Page Free Space) - http://blog.naver.com/jumdol625/110169523098

- 페이지의 할당 여부 및 각 페이지에 있는 빈 공간의 크기를 기록하는 페이지

- 각 페이지에 1바이트를 사용하여 페이지의 할당 여부와, 페이지의 남은 공간을 기록

- 힙, 텍스트, 이미지 페이지에 대해서만 페이지 내의 빈 공간의 양이 관리 

- 새로 삽입된 행을 보관할 수 있는 빈 공간이 있는 페이지를 찾아야 할때 사용 

- GAM, SGAM, PFS를 이용해서 사용할 페이지 검색 

- 인덱스의 경우에는 새 행을 삽입할 지점이 인덱스 키 값에 의해 설정되므로 페이지의 빈 공간을 추적할 필요가 없음 

- 8088개의 페이지 관리, 8088개가 넘어가면 PFS페이지를 추가

* GAM (전역 할당 맵) : 어떤 익스텐트가 할당 되었는가

* SGAM (공유 전역 할당 맵) : 어떤 익스텐트가 혼합익스텐트인지, 빈페이지가 있는지, 4GB 관리.

http://blog.naver.com/jumdol625/110168581449 - GAM, SGAM 자세히 나와있는 곳

* BCM (Bulked Change Map)(대량 복사 변경 맵) : Backup Log 문 이후 대량 기록작업에 의해 수정된 익스텐트를 관리

* DCM (Differential Change Map)(차등 변경 맵) : 마지막 BACKUP DATABASE 문(FULL BACKUP) 이후에 변경된 익스텐트를 관리하는 페이지, 차등 백업의 대상 익스텐트를 찾기 위해 사용. 4GB 관리.

 

2. 익스텐트(Extent) : 8개의 연속된 페이지가 모여 이룬 단위

1. 혼합 익스텐트

8개의 페이지에 각각 다른 오브젝트의 데이터를 저장할 수 있다.

2. 단일 익스텐트

8개의 페이지에 모두 같은 오브젝트를 저장할 수 있다.

 

테이블이나 인덱스가

8 Page보다 커지기 전까지는 Mixed로 저장된다.(다른 개체에서도 추가되는 작업이 있다면 위의 그럼처럼 떨어져서....)

8 Page보다 커지는 순간

9번째 Page가 저장될때는 Uniform으로 8 Page의 공간이 할당되고 그 Extent에는 해당 객체만 들어갈수 있다!

 

처음부터 Uniform으로 8 KB씩 할당하지 않는 이유 : 데이터베이스가 많은 작은 테이블을 보유하고 있을때 

공간들이 낭비되지 않게하기 위해서이다. (공간을 효율적으로 사용!)

 

3. 로그 파일 구조

- 데이터 파일처럼 익스텐트로 구성 X, 가상 로그 파일(Virtual Log File, VLF)이라는 저장 단위로 구성.

- VLF는 트랜잭션 로그의 잘라내기 단위가 된다.

- 로그 파일은 Circular queue 방식으로 순차적으로 저장이 되기 때문에 여러개의 파일로 분할하여도 성능향상은 기대할 수 없다. Circular queue 방식의 경우 데이터가 최근 저장된 순서로 다시 인출될 수 있으므로 트랜잭션의 개념에 가장 잘 부합된다.

- Transaction Log : UPDATE/DELETE/INSERT 등과 같은 작업 시에 기록되는 로그, 임의의 시점에 Checkpoint가 발생하면 Physical database에 기록

- 가상 로그 파일의 성능 : 파일이 작고 많을 경우 성능을 저하시킨다.

- 가상 로그 파일 변경 방법

1. BACKUP LOG 문을 사용하여 로그 백업을 수행.

2. CHECKPOINT 문을 사용하여 메모리와 디스크를 동기화.

  DBCC SHRINKFILE( logfilename, TRUNCATEONLY ) 를 사용하여 트랜잭션 로그 파일 축소.

  Sp_helpdb 데이터베이스명  으로 logfilename을 알 수 있다.

3. 데이터베이스 변경을 하여 로그 파일 크기를 수정(충분히 크게 늘려서 가상로그 파일의 크기가 크고, 개수가 적도록 한다. 증가값 역시 충분히 크게 잡는다.) 구문은 다음과 같다.

ALTER DATABASE dbname

 MODIFY FILE ( NAME = file_name, SIZE = new_size, FILEGROWTH = XXMB )

 

 

 

4. 데이터 페이지의 구조

text, ntext, image의 데이터 형태를 제외한 모든 데이터 로우들이 저장된다.

페이지 헤더에는 전페이지와 후페이지의 관계에 대한 포인터를 가지고 있다.

Offset은 각 Row가 시작되는 위치(시작되는 바이트가 페이지의 시작에서 얼마나 떨어져 있는지)를 알려준다.

 

5. 데이터 페이지의 동작 원리 

1. 클러스터드 인덱스 테이블(Clustered Index Table)

데이터 페이지들이 순서대로 정렬이 되어 저장되어 있는 상태. 따라서 각 테이블에 클러스터드 인덱스는 1개만 존재가능.

 

2. 넌 클러스터드 인덱스 테이블(Non-Clustered Index Table)

 

3. 데이터페이지의 관리

클러스터드나 넌클러스터드 인덱스 모두 B-Tree(Balanced Tree)구조를 가진다.

인덱스 된 뷰(Indexed View)는 클러스터드 테이블과 동일한 저장구조를 가진다.

 

* 모든 테이블, 인덱스, 인덱스 된 뷰 는 SYSINDEXES 테이블에 페이지 포인터(Page Pointer)를 가지게 된다. SYSINDEXES 테입블은 각 인덱스에 존재. SYSINDEXES 테이블에는 각 객체들에 대한 ID와 인덱스에 대한 ID인 INDID가 존재

이를 조회하는 쿼리

SELECT ID, INDID, FirstIAM FROM SYSINDEXES

이를 조회했을 때

1. INDID = 0  : 클러스터드 인덱스가 아닐 때. 순서 없이 저장된 테이블 = 이를 힙(Heap)이라고 한다. 이러한 힙 형태의 정보를 찾기 위해서는 SYSINDEXES.FirstIAM을 통해 데이터를 검색한다.

- 데이터 페이지 검색 방법 : SYSINDEXES의 FirstIAM 컬럼의 주소 값을 기준으로 첫 번째 IAM 페이지를 찾아간다. 이 IAM 페이지를 기준으로 익스텐트를 찾고 IAM 페이지에 있는 익스텐트 들을 모두 스캔했으면 다음 IAM페이지로 가서 또 스캔한다.

2. INDID = 1 : 클러스터드 인덱스. SYSINDEXES.Root 컬럼에는 클러스터드 인덱스의 루트 인덱스 위치 값이 존재

- 데이터 페이지 검색 방법 : 데이터가 정렬되어 있으므로 B-Tree를 검색하면 원하는 데이터 페이지 바로 검색 가능

3. INDID = 2~250 : 넌클러스터드 인덱스. SYSINDEXES.Root 컬럼에 넌클러스터드 인덱스의 루트 인덱스 위치 값이 존재

- 데이터 페이지 검색 방법 : SYSINDEXES의 개체 아이디가 일치하는 것을 검색한 후에 Root 컬럼 값을 찾아내면 해당 넌클러스터드 인덱스의 루트 노드를 가리키는 주소 값을 찾을 수 있다. 동일하게 B-Tree를 검색하면 원하는 데이터 페이지의 주소를 검색할 수 있다.

4. INDID = 255 : 텍스트나 이미지 형태. 각 테이블당 하나의 텍스트 및 이미지 컬럼을 가질 수 있다.

 

4. IAM (Index Allocation Map Page)

힙이나 인덱스 된 형태, 텍스트와 이미지 등 모든 개체의 익스텐트들을 관리

IAM 페이지에는 익스텐트의 시작 지점을 가리키는 헤더 정보를 갖고있다.

개체가 커져서 하나의 IAM으로 관리할 수 없을 떄는 연결 리스트 구조로 새로운 IAM이 추가된다.

IAM 때문에 한 데이터베이스에 파일이 여러개 일 때 DBCC SHOWCONTIG를 하면 약간의 왜곡이 생긴다.

 

* SQL 서버가 새로운 데이터를 데이터 페이지에 할당할 때

- 먼저 IAM페이지를 통해 개체에 할당된 익스텐트를 참조하여 익스텐트가 비어있지 않다면, PFS 페이지 정보를 검색하여 새로운 데이터를 저장. 이때 IAM이나 PFS 페이지 모두 메모리 버퍼 풀(Memory Buffer Pool)에 상주하여 매우 빠른 속도로 검색된다) 그리고 이러한 익스텐트에 대한 검색은 데이터를 삽입할 때 충분한 공간이 존재하지 않았을 때만 발생.

 

 

 

by 짱구를꼭말려 2014. 1. 2. 08:52

DELETE 삭제

TRUNCATE 삭제

DROP 삭제


테이블을 만들어서 100M짜리 데이타

이때, 데이타는 100만건있고

홍길동을 셀렉트로 검색하면 1시간 걸린다


Delete 를 하면 데이타는 지우지만 용량은 그대로이다 테이블 용량은 100M 그대로 

데이타를 줄이려면 100M -> 1M로 줄이려면 REORG 해줘야한다

delete하고 홍길동을 셀렉트 하면, 여전히 1시간 그대로 걸린다


TRUNCATE

내용을 다 날려버리고, 처음 create 했던것처럼 만든다

100M -> 1M 로 바로 줄어든다



Drop

create로 만들었던 테이블 까지 다 지워버린다

'MSSQL 2008 > SQL' 카테고리의 다른 글

DB에서 컬럼 이름 찾기 - MS SQL  (0) 2014.02.26
SQL Server 에서 GO의 의미 (Batch)  (0) 2014.01.20
SET 옵션들  (0) 2014.01.13
쿼리 처리 과정 / SELECT 실행순서  (0) 2014.01.07
DDL, DML, DCL 란?  (0) 2013.10.06
by 짱구를꼭말려 2013. 12. 5. 16:33

Create a New Virtual Machine


- Custom (advanced) 선택

- workstation 9.0 선택

- I will install the operation system later 선택

- Linix/Fedora 선택

- 저장 될 VM 에 적절한 위치 선택한 후

- 프로세서는 2개 정도로 선택

- 메모리 1G

- Network type 을 Use bridged networking 으로 선택

- 완료 후 CD/DVD 를 더블 클릭 후 Use ISO image file 클릭, rhel-5.3-server-i386-dvd.iso 파일을 선택 후

- Power on this virtual machine 클릭

 

▼  ENTER 를 누른다

▼ SKIP

▼ NEXT

▼ NEXT

▼ NEXT

 

 ▼ Skip

 ▼ Yes - 새 하드이니 모두 지워버려도 상관이 없다.

 ▼ Custom layout.

 

▼ 파티션

/    -  5000  <- root 라고 하고 시스템의 중요한 파일들이 설치되는 공간입니다.

/boot   -   100  <- boot 관련된 중요한 파일들이 설치되는 공간입니다.

/var     -  1000  <- 주요 시스템 로그나 메시지 등이 생성되는 공간입니다.

swap   -  2000  <- 메모리가 부족할 경우 가상메모리로 사용되며 주로 RAM  2배 정도 설정합니다.

/home  -  10000  <- 일반 사용자의 홈 디렉터리로 각 사용자의 자료가 생성됩니다.

/app    -  나머지  <- 이 디렉터리에 오라클을 설치하겠습니다. 남은 용량 다 주세요. <---- 11g압축파일 여기에 옮기고 11g를 설치 해본과 16G정도 필요했다. 적게 12G뿐이 안되서 11g압축 파일 풀고 설치하기전 지워야하는 일이 발생한다.(지워도상관은 없겠지만)

 ▼ next

 ▼ 자신이 쓸 IP 설정에 맞게 하고 넘어간다.

 ▼ 서울

 ▼ Root 계정의 비밀번호

 ▼ Customize now

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'OS > RHEL5' 카테고리의 다른 글

하드디스크 추가하기  (0) 2013.08.02
by 짱구를꼭말려 2013. 12. 1. 13:47

 Reorganization의 목적 (REORG)

1. 단편화 해소를 통한 성능 향상

    - 인덱스 rebuild, 테이블 move를 통하여 단편화 해소

2. 단편화 해소 및 저장위치 변경을 통항 성능 향상

    - 오브젝트의 테이블스페이스를 변경하여 단편화를 해소하고 테이블스페이스 내에 데이터를 재배치하여 디스크 공간 확보

3. 스키마 오브젝트의 물리적 재구성을 통한 성능 향상

    - 대용량 테이블을 파티셔닝 (테이블1 -> 테이블n)을 통해 물리적으로 분리

 

==> REORG는 DB의 최적화로 성능향상을 위한 것.

 

※ 인덱스 단편화는 왜 생기는 걸까?

    인덱스는 항상 sorting된 상태를 유지하기 때문에 새로 추가된 자리를 마련하기 위해 공간을 만들어 넣기 때문이다.

    인덱스 단편화는 Insert 된 데이터에 의해 발생되는 것이 대부분이다. 일부는 update된 데이터에 의해 발생하지만,

    인덱스에 해당하지 않는 컬럼인 경우에는 단편화는 발생하지 않는다.

 

 

테이블 reorg : alter table scott.tab_01 move tablespace ts_d_work1;

인덱스 rebuild : alter index scott.ix_tab_01 rebuild tablespace ts_i_work1;

    (보통 인덱스 리빌드시 nollogging으로 처리 후 logging모드로 전환.

     alter index scott.ix_tab_01 rebuild partition p04 parallel 5 nologging;

     alter index scott.ix_tab_01 logging; )

인벨리드 오브젝트 컴파일 : alter function scott.fn_tab_01 compile;    --> function/trigger/procedure/view

 

출처 : http://blog.naver.com/lemonyja/10153976212

by 짱구를꼭말려 2013. 10. 24. 00:03

GTS250으로 HDMI 연결

 

동생 컴퓨터가 GTS250을 사용하고 있다.

 

HDMI 단자가 있어서 TV에 연결을 해봤지만 소리가 나지 않았다.

 

HDMI 케이블은 원래 영상과 사운드를 둘다 전송해 준다.

 

소리가 나지 않는 이유는 바로 GTS250이란 녀석 때문!

 

GTS250 안에 같이 들어있는 케이블을 메인보드의 사운드 단자와 연결해 주어야 한다.

 

메인보드의 사운드 단자 이름은 SPDIF_OUT 이다.

 


 

 

◈[메인보드] HDMI 사운드 설치(연결) 방법 및 설정 방법 (XP/VISTA)◈


   [사전지식]

   *HDMI 는 HD영상과 음성이 포함된 신호로 DVI보다 더 좋은 영상의 화질을 볼 수 있어 최근 사용자
     가 많이 늘어나고 있습니다.
     HDMI 케이블로 연결 했을 때 영상만 출력되고, 음성은 출력되지 않는 경우가 있는데 이런 경우가
     있습니다.


   [해당모델]

   *모든 기가바이트 메인보드 및 그래픽 제품군


   [발생원인]

   *시스템이 HDMI 음성 코덱을 기본장치로 인식하지 않고, 메인보드의 내장 오디오 코덱을 기본장치
     로 인식한 것으로 별도의 설정이 필요합니다.


   [해결방법]

   *HDMI 설정 방법 및 설치(연결) 방법은 NVIDIA와 AMD ATI 그래픽에 따라서 다릅니다.

 

   [[AMD ATI 그래픽 제품]]


   1.윈도우XP에서 ATI 라데온 HD4850을 장착한 후 드라이버를 설치하였습니다.
      AMD ATI 그래픽카드는 자체적으로 HDMI 음성 코덱을 포함하고 있기 때문에 사운드장치에
      ATI HDMI Audio 드라이버가 설치 됩니다.

   2.제어판의 사운드 및 오디오 장치의 오디오탭에서 기본장치를 Realtek HDA HDMI Out으로
      변경하셔서 확인을 누르시면 기본장치 설정이 되며, HDMI 케이블을 통해 사운드 출력이 가능합니다.
      ※여기서 ATI HDMI 코덱이 Realtek HDA HDMI Out으로 나오는 이유는 ATI HDMI 코덱의 제조사
      가 Realtek이기 때문입니다.※

   3.윈도우 VISTA에서 ATI 라데온 HD4850을 장착한 후 드라이버를 설치하였습니다.
      마찬가지로 사운드장치에 HDMI 음성 코덱인 ATI HDMI Audio 드라이버가 설치 됩니다.

 

   4.트레이 아이콘의 볼륨믹서에서 마우스 오른쪽 버튼을 누르셔서 '재생장치'를 클릭해주시기 바랍니다.

 

   5.재생장치 목록에서 Realtek HDMI Output을 마우스 오른쪽 버튼을 눌러 기본 장치로 설정해주시면
      HDMI 케이블을 통해 사운드 출력이 가능합니다.

 

 


 

   [[NVIDIA 그래픽 제품]]


   *HDMI Audio 코덱이 포함되어 있는 AMD ATI 와 달리 NVIDIA는 Audio코덱이 없기 때문에 별도
     의 HDMI 음성 케이블을 메인보드의 SPDIF_Out 단자에 연결하여 음성 출력을 해야 합니다.

   ①그래픽카드에 포함되어 있는 HDMI 음성 케이블과 DVI to HDMI 젠더를 이용하여 연결을 하시면
      됩니다.
      ※기가바이트 그래픽카드의 DVI 포트 중, 파란색 포트와 흰색 포트가 있다면 DVI to HDMI 젠더를
         파란색 포트에 연결하셔야만 음성 출력이 가능합니다※

 

 

  ②메인보드에 보시면 아래와 같이 SPDIF_O 단자가 있는데 이 단자와 위의 음성 케이블을 연결하셔야
      합니다. 
      케이블 연결 방법은 아래와 같습니다.

 

 

  ③케이블의 반대편의 흰색 단자는 아래의 이미지와 같이 그래픽카드의 SPDIF In 단자와 연결을 하시면
      됩니다.

   ④메인보드와 그래픽카드가 연결된 모습입니다.

 

 

 

  1.윈도우XP에서 NVIDIA 지포스 9400GT를 장착한 후 드라이버를 설치하였습니다.
      NVIDIA는 Audio 코덱이 없기 때문에 메인보드의 내장 사운드 드라이버만 설치되어 있습니다.

 

   2.Realtek HD 오디오 관리자에서 오디오 I/O 탭의 디지털 S/PDIF 설정 버튼을 클릭 하시기
      바랍니다. 

 

   3.아래의 이미지와 같이 출력 디지털 오디오 소스에 체크를 하시면 메인보드 내장 사운드에서  디
      지털 출력이 가능하여 그래픽카드의 SPDIF In 단자로 음성 입력이 되며, HDMI 케이블을 통해 사
      운드 출력이 가능합니다.

 

   4.윈도우 VISTA에서 NVIDIA 지포스 9400GT를 장착한 후 드라이버를 설치하였습니다.
      마찬가지로 메인보드의 내장 사운드 드라이버만 설치 되어 있습니다.

 

   5.트레이 아이콘의 볼륨믹서에서 마우스 오른쪽 버튼을 누르셔서 '재생장치'를 클릭해주시기 바랍니다.

 

   6.재생장치 목록에서 Realtek Digital Output을 마우스 오른쪽 버튼을 눌러 기본 장치로 설정해주시면
      HDMI 케이블을 통해 사운드 출력이 가능합니다.

 

 

 

출처 : http://cafe.daum.net/gigagate/PBoH/10?docid=1I3J3|PBoH|10|20090609151359&q=xp%20hdmi%20%BB%E7%BF%EE%B5%E5%20%C0%E5%C4%A1&srchid=CCB1I3J3|PBoH|10|20090609151359

'IT기기' 카테고리의 다른 글

RAM 의 종류  (0) 2017.07.11
SD카드 종류 및 속도  (0) 2017.05.19
[리뷰] Plextor M7V 256GB 구입기  (2) 2016.05.01
6월 25~29일 해킹으로 인해 악성태그가 심겨졌었네요...  (0) 2015.06.30
E5300 울프데일  (0) 2013.07.31
by 짱구를꼭말려 2013. 10. 22. 23:53

DDL(Data Definition Language) – 객체의 생성,변경,삭제 명령어 (CREATE , ALTER , DROP,RENAME 등)

▪SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어
▪데이터베이스 관리자나 데이터베이스 설계자가 사용함
▪데이터 정의어(DDL)의 3가지 유형  

 

DML(Data Manipulation Language)- 레코드 제어 명령어 (SELECT, INSERT, UPDATE ,DELETE )
데이터베이스 사용자가 응용 프로그램이나 질의어를 통하여 저장된 데이터를 실질적으로 처리하는데 사용하는 언어
▪데이터베이스 사용자와 데이터베이스 관리 시스템 간의 인터페이스 제공
데이터 조작어(DML)의 4가지 유형

 

DCL(Data Control Language) – 객체 권한 부여등의 제어어 (GRANT 등)
데이터의 보안, 무결성, 데이터 회복, 병행 수행 제어 등을 정의하는 데 사용하는 언어
▪데이터베이스 관리자가 데이터 관리를 목적으로 사용함
▪데이터 제어어(DCL)의 종류

 

출처 : http://xxwony.egloos.com/25958 , http://blog.naver.com/digimon1740/110169209102

'MSSQL 2008 > SQL' 카테고리의 다른 글

DB에서 컬럼 이름 찾기 - MS SQL  (0) 2014.02.26
SQL Server 에서 GO의 의미 (Batch)  (0) 2014.01.20
SET 옵션들  (0) 2014.01.13
쿼리 처리 과정 / SELECT 실행순서  (0) 2014.01.07
delete , truncate, drop 차이  (0) 2013.12.05
by 짱구를꼭말려 2013. 10. 6. 23:31

Chap 16. Control File 장애 복구


   1.  Control File 관련 장애 해결하기   

1) Parameter file 의 경로와 실제 파일 경로가 다른 경우

- 우선 장애 상황을 만들기 위해 DB를 종료한 후 parameter file 에 적혀 있는 3 개의 control file 중에 하나를 삭제해 보자.

 

SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> !
[oracle@chan ~]$ cat $ORACLE_HOME/dbs/inittestdb.ora | grep control_files
*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl','/home/oracle/disk6/control03.ctl'
[oracle@chan ~]$ 
[oracle@chan ~]$ rm -f /home/oracle/disk6/control03.ctl
[oracle@chan ~]$   


-- 다시 DB open
[oracle@chan ~]$ exit
exit  


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
ORA-00205: error in identifying control file, check alert log for more info   -- 장애 발생    


SYS>

- alert_testdb.log 파일을 확인해서 장애상황 해결

SYS> !tail $ORACLE_BASE/diag/rdbms/testdb/testdb/trace/alert_testdb.log
Mon Aug 19 22:58:39 2013
ALTER DATABASE   MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: '/home/oracle/disk6/control03.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
ORA-205 signalled during: ALTER DATABASE   MOUNT...
Mon Aug 19 22:58:39 2013
Checker run found 1 new persistent data failures  


-- 위의 메세지 중 ORA-00202: control file: '/home/oracle/disk6/control03.ctl' 이런 부분이 보인다.
-- 해당 파일을 삭제했기 때문에 나오는 에러이다. 
-- 해당 파일만 복사해 주고 다시 DB open 하면 끝!
SYS> select status from v$instance;  


STATUS
------------------------
STARTED  


SYS> !cp /home/oracle/disk4/control01.ctl /home/oracle/disk6/control03.ctl  


SYS> alter database mount;  


Database altered.  


SYS> alter database open;  


Database altered.

2) Control file 끼리 내용이 다른경우

- 다중화된 모든 control file 끼리는 정보가 동일해야 한다. 만약 정보가 달라서 발생하는 version error 가 생길때는 어떻게 해결해야 하는지 살펴보자.

- 우선 하나의 control file 의 정보를 다르게 만들어 보자

 

SYS> select name from v$controlfile;


NAME
--------------------------------------------------------------------------------
/home/oracle/disk4/control01.ctl
/home/oracle/disk5/control02.ctl
/home/oracle/disk6/control03.ctl  


SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> 
SYS> !vi $ORACLE_HOME/dbs/inittestdb.ora  


-- 아래 처럼 마지막 control file 을 주석처리 한 후 저장
*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl'##,'/home/oracle/disk6/control03.ctl' 


SYS> startup   
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
Database mounted.
Database opened.
SYS>    
SYS> select name from v$controlfile;  

NAME
-------------------------------------------------------------------------------- /home/oracle/disk4/control01.ctl
/home/oracle/disk5/control02.ctl  


-- control file 의 정보가 변경되게 checkpoint 를 여러번 일으켜보자. 
SYS> alter system checkpoint;  


System altered.  


SYS> /  


System altered.  


SYS> /  


System altered.  


SYS> /  


System altered.  


SYS> /  


System altered.  


-- 주석처리 했던 control file 을 다시 사용하게 끔 변경
SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> 
SYS> !vi $ORACLE_HOME/dbs/inittestdb.ora
*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl' ,'/home/oracle/disk6/control03.ctl' 


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
ORA-00214: control file '/home/oracle/disk4/control01.ctl' version 865
inconsistent with file '/home/oracle/disk6/control03.ctl' version 846  


-- 위의 에러를 보면, control01 의 버전은 865 인데, control03 의 버전은 846 이다. 
-- 이럴 경우, 보통 번호가 큰 쪽이 최신 control file 이기 때문에 번호가 큰 파일로 덮어쓰면 된다. 
SYS> !cp /home/oracle/disk4/control01.ctl /home/oracle/disk6/control03.ctl  


SYS> alter database mount;  


Database altered.  


SYS> alter database open;  


Database altered.  


SYS> select name from v$controlfile;


NAME
-------------------------------------------------------------------------------- /home/oracle/disk4/control01.ctl
/home/oracle/disk5/control02.ctl
/home/oracle/disk6/control03.ctl

3) old control file / control file 삭제 된 경우 / incarnation 에러

- 편의를 위해 log와 data 파일을 조회하기 위한 sql 문을 미리 만들어 두자.

 

SYS> !vi data.sql  


conn / as sysdba  


set line 200
col tablespace_name for a10
col file_name for a50
col mb for 9999  


select tablespace_name, bytes/1024/1024 MB, file_name from dba_data_files;  


SYS> @data
Connected.  


TABLESPACE    MB FILE_NAME
---------- ----- --------------------------------------------------
USERS          5 /app/oracle/oradata/testdb/users01.dbf
UNDOTBS1      90 /app/oracle/oradata/testdb/undotbs01.dbf
SYSAUX       510 /app/oracle/oradata/testdb/sysaux01.dbf
SYSTEM       700 /app/oracle/oradata/testdb/system01.dbf
EXAMPLE      346 /app/oracle/oradata/testdb/example01.dbf  


SYS> !vi log.sql  


set line 200
col group# for 999
col mb for 9999
col member for a45
col seq# for 999
col status for a8
col arc for a5  


select a.group#, a.member, b.bytes/1024/1024 MB, b.sequence# "SEQ#",  b.status, b.archived "ARC", b.first_change#  from v$logfile a, v$log b where a.group#=b.group# order by 1,2;  


SYS> @log  


GROUP# MEMBER                       MB SEQ# STATUS   ARC   FIRST_CHANGE#
------ --------------------------------------------- ----- ---- -------- ----- -------------  
   1 /app/oracle/oradata/testdb/redo01.log        50    4 INACTIVE NO       823608  
   2 /app/oracle/oradata/testdb/redo02.log        50    5 INACTIVE NO       841406 
   3 /app/oracle/oradata/testdb/redo03.log        50    6 CURRENT  NO       859461

- 장애 상황 만들기 ▼

SYS> select name from v$controlfile;  


NAME
------------------------------------
/home/oracle/disk4/control01.ctl
/home/oracle/disk5/control02.ctl
/home/oracle/disk6/control03.ctl  


SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> 
SYS> !vi $ORACLE_HOME/dbs/inittestdb.ora


*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl' ##,'/home/oracle/disk6/control03.ctl' 


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
Database mounted.
Database opened.
SYS> 
SYS> select name from v$controlfile;  


NAME
---------------------------------------------
/home/oracle/disk4/control01.ctl
/home/oracle/disk5/control02.ctl  


-- 우선 다른 version 의 control file 을 만들기 위해 checkpoint
SYS> alter system checkpoint;  


System altered.  


SYS> /  


System altered.  


SYS> /  


System altered.  


SYS> /  


System altered.  


SYS> /  


System altered.  


SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> 
SYS> !vi $ORACLE_HOME/dbs/inittestdb.ora


*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl' ,'/home/oracle/disk6/control03.ctl' 


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
ORA-00214: control file '/home/oracle/disk4/control01.ctl' version 898 inconsistent with file '/home/oracle/disk6/control03.ctl' version 879  


-- 위의 에러를 보면 control01 과 control 03 의 version 이 다르다.
-- 이럴 때 위의 2) Control file 끼리 내용이 다른경우 처럼 해결을 할 때, 
-- version 이 높은애를 복사하지 말고 낮은 애를 복사할 경우, 
-- 어떤 에러가 나고 어떻게 처리하는지 살펴보자.   


SYS> !cp /home/oracle/disk6/control03.ctl /home/oracle/disk4/control01.ctl   


SYS> alter database mount;
alter database mount
*
ERROR at line 1:
ORA-00214: control file '/home/oracle/disk5/control02.ctl' version 898 inconsistent with file '/home/oracle/disk4/control01.ctl' version 879  


-- 이 상황에서 다시 control01 (낮은 버전) 을 control02(높은버전) 로 복사
SYS> !cp /home/oracle/disk4/control01.ctl /home/oracle/disk5/control02.ctl  


SYS> alter database mount;  


Database altered.
-- 모든 control file 의 version 이 낮은 버전으로 다 동일하게 되어서 mount 는 되었다.
-- 이제 open 시켜보자.  

SYS> alter database mount;  


Database altered.  


SYS> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/app/oracle/oradata/testdb/system01.dbf'
ORA-01207: file is more recent than control file - old control file  

-- old control file error 가 나왔다. 
- 이 에러의 원인은 control file 의 checkpoint 가 data file 의 checkpoint 정보보다
- 더 예전 내용이기 때문이다.

- 보통 위의 장애 상황을 해결하기 위해서는 3가지 방법이 있을 수 있다.

[1] 현재 data file, redo log file 에 이상이 없을 경우 : 재생성, no resetlogs 로 복구

[2] 현재 data file, redo log file 에 이상이 있고, data backup 이 있을 경우 : using backup control 로 복구 (드문 경우임)

[3] 현재 data file, redo log file 에 이상이 있거나, data backup 이 없을 경우 : 재생성, resetlogs 로 복구

 

- 해결 방안 [1]: 현재 data file, redo log file에 이상이 없을 경우 (control file 재생성 + no resetlogs)

-- control file 을 재생성 하려면 no mount 상태에서 DB 를 재생성하는 명령어를 입력해야 하는데, 
-- 그 명령어가 너무 길기 때문에 script 로 만들어서 생성하는 방법을 이용하자.
-- control file 재성성 script 를 만들기 위해서는 DB 가 mount 상태 이어야 한다.   


SYS> select status from v$instance;   


STATUS
--------
MOUNTED  


SYS> alter database backup controlfile to trace as '/home/oracle/re.sql';  


Database altered.  


SYS> shutdown immediate;
ORA-01109: database not open   


Database dismounted.
ORACLE instance shut down.
SYS> !
[oracle@chan ~]$   


-- /home/oracle/re.sql 파일을 열면 Set #1. NORESETLOGS case 과 
-- Set #2. RESETLOGS case 부분으로 script 가 2 부분으로 나눠져 있다. 
-- 여기서는 no resetlogs 를 사용할 것이므로, set #2 부분은 다 지우도록 하자. 
-- 즉, 아래의 내용만 있으면 된다.
-- 주의 할 점은 LOGFILE 부분과 DATAFILE 부분은 정확해야 한다.   


[oracle@chan ~]$ vi /home/oracle/re.sql  


STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "TESTDB" NORESETLOGS  NOARCHIVELOG
     MAXLOGFILES 16
     MAXLOGMEMBERS 3
     MAXDATAFILES 100
      MAXINSTANCES 8
     MAXLOGHISTORY 292
  LOGFILE
   GROUP 1 '/app/oracle/oradata/testdb/redo01.log'  SIZE 50M BLOCKSIZE 512,
   GROUP 2 '/app/oracle/oradata/testdb/redo02.log'  SIZE 50M BLOCKSIZE 512,
   GROUP 3 '/app/oracle/oradata/testdb/redo03.log'  SIZE 50M BLOCKSIZE 512 
-- STANDBY LOGFILE
DATAFILE
   '/app/oracle/oradata/testdb/system01.dbf',
   '/app/oracle/oradata/testdb/sysaux01.dbf',
   '/app/oracle/oradata/testdb/undotbs01.dbf',
   '/app/oracle/oradata/testdb/users01.dbf',
   '/app/oracle/oradata/testdb/example01.dbf'
CHARACTER SET KO16MSWIN949
 ;  


[oracle@chan ~]$ exit
exit  

SYS> @/home/oracle/re.sql
ORACLE instance started. 


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes  
Control file created.  


SYS> alter database open;  


Database altered.  


SYS> select name from v$controlfile;  


NAME
--------------------------------------
/home/oracle/disk4/control01.ctl
/home/oracle/disk5/control02.ctl
/home/oracle/disk6/control03.ctl

- 해결 방안 [2]: 현재 data file, redo log file 에 이상이 있고, data backup 이 있을 경우 (using backup control 로 복구)

-- 현재 상태를 전체 백업 수행  


SYS> select name from v$datafile;  


NAME
---------------------------------------------
/app/oracle/oradata/testdb/system01.dbf
/app/oracle/oradata/testdb/sysaux01.dbf
/app/oracle/oradata/testdb/undotbs01.dbf
/app/oracle/oradata/testdb/users01.dbf
/app/oracle/oradata/testdb/example01.dbf  


SYS> select name from v$controlfile;  


NAME
---------------------------------------------
/home/oracle/disk4/control01.ctl
/home/oracle/disk5/control02.ctl
/home/oracle/disk6/control03.ctl  


SYS> select member from v$logfile;  


MEMBER
---------------------------------------------
/app/oracle/oradata/testdb/redo03.log
/app/oracle/oradata/testdb/redo02.log
/app/oracle/oradata/testdb/redo01.log  


SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> 
SYS> !  


-- 미리 만들어 둔 /data/backup/close 폴더에 위의 파일들을 복사한다.
[oracle@chan ~]$ cp /app/oracle/oradata/testdb/*.dbf /data/backup/close/
[oracle@chan ~]$ cp /app/oracle/oradata/testdb/*.log /data/backup/close/
[oracle@chan ~]$ cp /home/oracle/disk4/*.ctl /data/backup/close/
[oracle@chan ~]$ cp /home/oracle/disk5/*.ctl /data/backup/close/
[oracle@chan ~]$ cp /home/oracle/disk6/*.ctl /data/backup/close/  


-- 위의 장애 상황 만들기 를 참고해서 다시 장애 상황을 만든다.
[oracle@chan ~]$ vi $ORACLE_HOME/dbs/inittestdb.ora


*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl' ##,'/home/oracle/disk6/control03.ctl' 


[oracle@chan ~]$ exit
exit  


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
Database mounted.
Database opened.
SYS> 
SYS> alter system checkpoint;  


System altered.  


SYS> /  


System altered.  


SYS> /  


System altered.  


SYS> / 


System altered.


SYS> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS> 
SYS> !
[oracle@chan ~]$ vi $ORACLE_HOME/dbs/inittestdb.ora


*.control_files='/home/oracle/disk4/control01.ctl','/home/oracle/disk5/control02.ctl' ,'/home/oracle/disk6/control03.ctl'   


[oracle@chan ~]$ exit
exit  


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
ORA-00214: control file '/home/oracle/disk4/control01.ctl' version 939
inconsistent with file '/home/oracle/disk6/control03.ctl' version 922 


SYS> !cp /home/oracle/disk6/control03.ctl /home/oracle/disk4/control01.ctl  


SYS> !cp /home/oracle/disk4/control01.ctl /home/oracle/disk5/control02.ctl


SYS> alter database mount;

  
Database altered.

 
SYS> alter database open;
alter database open
*
ERROR at line 1:
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/app/oracle/oradata/testdb/system01.dbf'
ORA-01207: file is more recent than control file - old control file  


-- 다시 old control file 장애가 발생했다. 이제 백업 데이터를 가지고 복구해 보자.
SYS> shutdown immediate;
ORA-01109: database not open   


Database dismounted.
ORACLE instance shut down.
SYS>   
SYS> !cp /data/backup/close/*.dbf /app/oracle/oradata/testdb/    -- 데이터 파일만 복원


SYS> startup mount 
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
Database mounted.
SYS> 
SYS> recover database until cancel using backup controlfile;
ORA-00279: change 866181 generated at 08/20/2013 00:39:18 needed for thread 1
ORA-00289: suggestion :
/app/oracle/fast_recovery_area/TESTDB/archivelog/2013_08_22/o1_mf_1_7_%u_.arc
ORA-00280: change 866181 for thread 1 is in sequence #7    


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log
'/app/oracle/fast_recovery_area/TESTDB/archivelog/2013_08_22/o1_mf_1_7_%u_.arc'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3    


ORA-00308: cannot open archived log
'/app/oracle/fast_recovery_area/TESTDB/archivelog/2013_08_22/o1_mf_1_7_%u_.arc'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3    


SYS> alter database open resetlogs;


Database altered.


SYS> select name from v$controlfile;


NAME
--------------------------------------------------------------------------------
/home/oracle/disk4/control01.ctl
/home/oracle/disk5/control02.ctl
/home/oracle/disk6/control03.ctl  


SYS> select name from v$datafile;  


NAME
--------------------------------------------------------------------------------
/app/oracle/oradata/testdb/system01.dbf
/app/oracle/oradata/testdb/sysaux01.dbf
/app/oracle/oradata/testdb/undotbs01.dbf
/app/oracle/oradata/testdb/users01.dbf
/app/oracle/oradata/testdb/example01.dbf  


SYS> select member from v$logfile;  


MEMBER
--------------------------------------------------------------------------------
/app/oracle/oradata/testdb/redo03.log
/app/oracle/oradata/testdb/redo02.log
/app/oracle/oradata/testdb/redo01.log

- 해결 방안 [3]: 현재 data file, redo log file에 이상이 있고 백업 파일이 없을 경우 (control file 재생성 + resetlogs)

- 사용중이다가 비정상 종료된 경우 checkpoint 가 다른 data file 을 사용해서 긴급 복구 하는 경우를 살펴보자

 

-- 현재 상태 확인
SYS> @data
Connected.  


TABLESPACE    MB FILE_NAME
---------- ----- --------------------------------------------------
EXAMPLE      346 /app/oracle/oradata/testdb/example01.dbf
USERS          5 /app/oracle/oradata/testdb/users01.dbf
UNDOTBS1      90 /app/oracle/oradata/testdb/undotbs01.dbf
SYSAUX       510 /app/oracle/oradata/testdb/sysaux01.dbf
SYSTEM       700 /app/oracle/oradata/testdb/system01.dbf  


SYS> @log  


GROUP# MEMBER                       MB SEQ# STATUS   ARC   FIRST_CHANGE#
------ --------------------------------------------- ----- ---- -------- ----- -------------
      1 /app/oracle/oradata/testdb/redo01.log        50    4 CURRENT  NO       866631
      2 /app/oracle/oradata/testdb/redo02.log        50    2 INACTIVE NO       866625
      3 /app/oracle/oradata/testdb/redo03.log        50    3 INACTIVE NO       866628


-- 장애 상황 만들기
SYS> create table scott.test01 (no number);  


Table created.  


SYS> insert into scott.test01 values (1);  


1 row created.  


SYS> insert into scott.test01 values (2);  


1 row created.  


SYS> commit;  


Commit complete.  


SYS> shutdown abort;
ORACLE instance shut down.
SYS>  
SYS> !rm -f /app/oracle/oradata/testdb/*.log  


SYS> !rm -f /home/oracle/disk4/*.ctl  


SYS> !rm -f /home/oracle/disk5/*.ctl  


SYS> !rm -f /home/oracle/disk6/*.ctl  


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
ORA-00205: error in identifying control file, check alert log for more info  


-- 위의 [2] 번 case 에서 백업해 둔 (오래된) control file 복원 
SYS> !cp /data/backup/close/control01.ctl /home/oracle/disk4/.  


SYS> !cp /data/backup/close/control02.ctl /home/oracle/disk5/.  


SYS> !cp /data/backup/close/control03.ctl /home/oracle/disk6/.  


SYS> startup
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
Database mounted.
ORA-01190: control file or data file 1 is from before the last RESETLOGS
ORA-01110: data file 1: '/app/oracle/oradata/testdb/system01.dbf'      -- 장애 발생  


-- control file 재생성 script. (resetlogs)
SYS> alter database backup controlfile to trace as '/home/oracle/re2.sql';  


Database altered.  


SYS> shutdown abort;
ORACLE instance shut down.  


SYS> !vi /home/oracle/re2.sql
-- 아래 부분만 남기자  


STARTUP NOMOUNT 
CREATE CONTROLFILE REUSE DATABASE "TESTDB" RESETLOGS  NOARCHIVELOG
     MAXLOGFILES 16
     MAXLOGMEMBERS 3
     MAXDATAFILES 100
     MAXINSTANCES 8
     MAXLOGHISTORY 292
 LOGFILE
   GROUP 1 '/app/oracle/oradata/testdb/redo01.log'  SIZE 50M BLOCKSIZE 512,
   GROUP 2 '/app/oracle/oradata/testdb/redo02.log'  SIZE 50M BLOCKSIZE 512,
   GROUP 3 '/app/oracle/oradata/testdb/redo03.log'  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE 
DATAFILE
   '/app/oracle/oradata/testdb/system01.dbf',
   '/app/oracle/oradata/testdb/sysaux01.dbf',
   '/app/oracle/oradata/testdb/undotbs01.dbf',
   '/app/oracle/oradata/testdb/users01.dbf',
   '/app/oracle/oradata/testdb/example01.dbf'
CHARACTER SET KO16MSWIN949
;
  

SYS> @/home/oracle/re2.sql
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes  


Control file created.  


SYS> alter database open resetlogs;
alter database open resetlogs
* ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/app/oracle/oradata/testdb/system01.dbf' 


-- 위와 같은 경우의 에러는, DB가 종료 될 때 shutdown abort 로 비정상 종료되어
-- 데이터 파일끼리 checkpoint 정보가 동기화되지 않아서 resetlogs 로 open 할 수 없으니
-- 복구하라는 내용이다. 하지만 현재 모든 redo log 역시 삭제되어 복구할 수 없다.
-- 이럴 경우 강제로 data file 끼리 checkpoint 정보를 동기화시켜서 open 시키는
-- hidden parameter 를 사용해야 한다. 단, 이 parameter 는 위험하기 때문에 실무에선 
-- 권장하지 않는다.   


SYS> shutdown immediate;
ORA-01109: database not open   


Database dismounted.
ORACLE instance shut down.
SYS>     
SYS> !vi $ORACLE_HOME/dbs/inittestdb.ora  


-- 아래 부분 추가 후 저장
_allow_resetlogs_corruption=true 


SYS> startup mount;
ORACLE instance started.  


Total System Global Area  422670336 bytes
Fixed Size          1344616 bytes
Variable Size         260049816 bytes
Database Buffers      155189248 bytes
Redo Buffers            6086656 bytes
Database mounted.
SYS> 
SYS> alter database open resetlogs;  


Database altered.  


SYS> select * from scott.test01;
select * from scott.test01
                     *
ERROR at line 1:
ORA-00942: table or view does not exist  

--  DB 는 open 되었지만, 데이터는 복구되지 못했다.

   2. Control file 를 재생성 해야 하는 대표적인 경   


1) control file 이 전부 사라졌을 경우


2) old control file 에러 발생 시


3) DB Name 을 변경하고 싶을 때


4) 최대 데이터 파일 갯수와 redo log 파일 갯수를 변경하고 싶을 때

by 짱구를꼭말려 2013. 9. 29. 00:03