오늘은 기분좋게 회사 동기분과 친구님과 식사를 함께하였습니다.

 

모처럼 사람답게 밥을 먹은 것 같습니다.

 

=======================================   1   =======================================

(19:00 ~ 19:55)

 

append.cpp

 

..

 

어제 마무리 하지 못한 IO뒷부분 코드를 살짝 살펴보고 오늘은 STL (Standard Template Library)에 대해 강의를 진행한다고 하셨습니다.

 

linked list.

STL은 단순히 Data를 저장하거나 하는것이 아니라 가변적으로 처리를 할 수 있도록 처리를 하기도 합니다.

 

이론 수업을 교제를 따라 쭉 진행하셨습니다.

4_linked

 

=======================================   2   =======================================

(20:05 ~ 20:53)

 

4_linked 에서 Memory를 해제해주는 코드를 추가하여 정리하였습니다. Memory를 할당받아서 사용을 하면 반드시 해제해주어야 합니다.

 

STL 예제 코드에 대해서 계속 설명을 해 주셨습니다.

 

 

 

=======================================   3   =======================================

(21:03 ~ 20:53)

 

코드 설명 해주시는 것을 듣다가 프로젝트 오일러 KR버전에 다시 rotjdsla2라는 아이디를 생성하여 퀴즈를 풀었습니다. 1번 문제를 푸는데도 살짤 햇갈릴 정도로 개발을 퀴즈를 멀리하게 되었네요.

오늘도 겨우겨우 저녁을 먹고 18:58에 출석!

 

 

========================================    1    =====================================

(19:03 ~ 19:54)

 

오늘은 c++의 예외처리 및 I/O에 대해 수업을 진행한다고 하셨습니다.

 

임베디드 시스템의 경우가 가장 이와 같은 처리에 민감하다고 사례와 함께 소개해 주셨습니다.

 

예외처리의 가장 큰 목적은 프로그램이 중간에 중단되는 것을 막아주고 추가적으로 다른 작업을 할 수 있도록 하는것입니다.

 

 c++에서는 try , throw , catch 라는 3가지의 키워드를 예외처리를 위해서 제공해줍니다.

 

예외처리를 해야하는 대표적인 것 중에 배열의 크기에 관한 것이 있습니다. 저 또한 배열의 크기를 넘어가는 값에 접근을 하는 경우가 발생하는 것을 본 적이 있어서 이러한 부분에 예외처리를 했던 기억이 납니다.

 

catch는 특정 type의 객체를 지정하여 지정된 예외 객체만을 처리할 수 있습니다.

 

실습을 쭉 진행을 해 보았으며 실습 2번에서 정수 나눗셈과 예외처리에 해당하는 예제에서 정수가 아닌 값을 입력하였을 때 이해할 수 없는 결과가 나왔습니다. IDE에 따라서 Code::block에서는 수행이 그나마 정상적인 것 처럼 보이지만 VS2010에서는 아예 쓰래기값을 보여주는 등 정말로 납득이 가지 않는 결과를 출력하는 것을 보았습니다.

상속을 받아서 예외처리 할 수도 있습니다.

 

========================================    2    =====================================

(20:10 ~ 21:04)

 

예외처리를 하면 좋지만 못할 경우, Run time시에 발생하는 예외의 경우... throw 키워드 다음에 예외타입을 지정하여 예외를 정의할 수 있습니다.

unexpected exceptions는 ??

API로 제공되는

Prototype in <unexpected>

문법을 사용하여 함수를 등록할 수 있습니다.

실습을 진행 해보고 교제의 64~65페이지에 있는 코드를 3_exapmle02에 실습을 해 보았습니다.

 

예외처리를 하는 것에 회의적인 개발자도 있습니다. 고전적인 방법의 예외처리를 하셔도 된다고 하셨습니다.

 

<< 입출력!!  >>

 

IO Stream을 제공함 - C++

그 이유는 기존의 C에서 사용하는 printf같은 함수보다 더 편리하게 사용을 할 수 있도록 하기 위함.

format을 설정하지 않아도 되기 때문에 편합니다. 이유는 각각의 기본 타입에 대해 오버로딩이 되어있기 때문입니다.

 

IOS_base라는 class가 IOS Class의 상위에 있습니다.

 

 

 

========================================    3    =====================================

(21:14 ~ 21:)

 

Input Stream

Output Stream

File I/O

I/O를 모두 상속받아서 입출력을 모두 처리할 수도 있습니다. Java와는 다르게 C++은 여러개의 Class를 상속받을 수 있습니다.

 

다이아몬드 꼴의 상속? scope 문제가 생길 수 있습니다.

 

====================================    1    =========================================

(19:01 ~ 19:47)

 

2일차! 오늘은 어제의 과오를 만회하기 위해 영수증을 잘 챙겼습니다.

맛있게 육짬뽕 곱배기를 완뽕하고 교육을 들으러 왔습니다.

 

오늘은 템플릿을 주제로 수업을 한다고 하였습니다.

 

일반화 코드를 작성하기 위해 사용하는 방법.!!! 이라고 설명을 해 주셨습니다.

 

타입만 바뀌는 경우?? 동일한 코드를 여러번 작성하는 것이 비효율적입니다. 그러한 일을 하지 않을 수 있도록 해 주는 것이 템플릿입니다.

 

 

 

처음으로 작성한 템플릿 함수입니다. 더하기를 아주 잘 하는것을 확인하였습니다.

템플릿 함수는 작성을 한다고 해서 바로 구현이 되는것이 아니라 인자를 받고 확인하여 구현된다는 설명을 해 주셨습니다. 또한 오버로딩도 가능합니다.

 

====================================    2    =========================================

(20:01 ~ 20:49)

 

예제 실습을 조금 해 보았는데 따라가기가 조금 힙이 듭니다.

 

2_exam05,

2_exam06

 

위의 2개 실습을 하였으며 06에서는 []에 대해 재정의를 하여 정말 문법적으로 틀려 보이는 것도 정상동작하게 만들어 진 것을 확인할 수 있었습니다.

 

explicit -> 생성자를 명시적으로 사용하도록 하는  keyword!

====================================    3    =========================================

(21:02 ~ 20:49)

 

일부 실습을 진행하고 Test식으로 Stack을 template을 활용하여 구현하는 것을 과제처럼 20분의 시간을 주며 해 볼 수 있도록 하셨습니다.

역시나 저에게는 조금 버거운 수업인 듯 합니다.

사전, 사후 테스트....??!!!!!

 

뭔가 이번 수업은 지난번의 수업들과는 다를 것 같습니다....

 

c++에 대해서는 공부를 해 본 경험도, 강의를 들어 본 적도 없습니다.

 

새로운 ???????????????????????????????????

 

연산자, 함수 재정의 등 그나마 알고있던 개념과 Friend라는 새로운 용어도 들었습니다.

 

codeblock이라는 새로운 IDE를 설치하였습니다.

 

========================================    2    =====================================

(20:01 ~ 20:52 )

 

컴파일을 하면 실행파일이 생성됨.

윈도우즈는 exe, 리눅스는 elf ->같은 종류의 코드로 묶고 섹션별로 구성

각 섹션별 저장되는 종류에 대해서 자세하게 설명을 해 주셨습니다.

 

전역변수와 초기화되지 않은 static변수는 무슨값을 갖는가에 대한 질문을 하셨는데 저만 당당하게 쓰레기값이라고 해서 틀렸습니다.!!!!!

 

좋은것을 배웠네요. 지역변수 ( Stack memory)는 쓰레기 값이, 전역변수와 static변수는 0이 들어간다는 것을 알려주셨습니다.

 

char *p = "apple";

char arr[] = "apple";

p[0] = 'b';

arr[0] = 'b';

 

위의 4줄에서 틀린줄은....!????

이번에도 과감하게 3번을 선택했는데 다행히 맞았습니다. 그 이유는 상수영역에 쓰기를 시도하기 때문에 컴파일 타임이 아닌 런타임에 잘못된 쓰기에 관한 Error가 발생합니다.

(생각하고 있던 이유는 살짝 틀렸습니다.)

 

const int a ;

int const a;

int const *a;

int *const a;

 

1번과 2번은 같고 3번은 값을 , 4번은 주소를 바꾸지 못하게 함.

앞에있는 것을 바꾸지 못하게 한다고 생각을 하면 된다고 설명을 해 주셨습니다.

 

const는 주로 Libary 함수에서 많이 사용합니다. 연산자 재정의시에도 많이 사용합니다.

참조변수 -> 변수의 별칭을 얘기합니다.

 

int a;

int &b = a;

 

참조변수는 값을 꼭 할당 해 주어야합니다.

 

함수 호출 방법 C언어는 아래의 2가지가 있습니다.

 

call by reference ->

call by value ->

 

C++에서는 아래의 방법도 있음.

참조변수를 복사해서 사용.

 

주소값을 복사하는 것이 값을 모두 복사하는 것 보다 큰 객체나 구조체의 경우에 유리하며 그것보다도 참조변수를 사용하는 것이 주소값을 복사하지 않고도 해당 메모리에 접근하여 사용할 수 있습니다.

 

inline Function

사용될 때 코드를 분기하여 이동하는 것이 아니라 추가하는 것이라고 보면 됩니다.

사용의 효과-> 작은 크기의 코드에서는 분기를 하지 않아 속도 개선을 할 수 있지만 Cache이상의 크기를 가지면 역효과를 낼 수 있습니다.

 

지역 변수에 대한 참조를 리턴하는것은 좋은 코드가 아닙니다.

 

==================================    3    ===========================================

(21:04 ~ )

 

함수를 const로 사용??

 

새로운 도구를 사용하여 프로젝트를 만들고 코드를 불러와서 실행을 하는 것을 해 보았습니다. 이번 강의는 호흡이 빨라 사진음 첨부하면서 따라가기가 조금 버겁습니다.

 

클레스 전체를 Friend로 등록을 하는 것 보다 private 맴버변수를 접근하는 메소드만 Friend로 등록을 하는 것이 더 바람직합니다.

 

10:04 AM 오늘은 4분 지각을 했습니다.

아침도 먹고, 급한 전화도 받고....

 

=====================================    1      ======================================

 

자바스크립트의 이벤트

이벤트 : 웹브라우저에서 일어나는 어떤 사건

이벤트 헨들러 : 이벤트를 처리해 주는 것

실습1 : e_exam01.html

 

이벤트 헨들러를 등록하는? 두가지 방법을 실습을 해 보았습니다.

객체에 직접 Window프로그래밍 처럼 등록을 할 수도 있고 스크립트 수행이 끝나고 객체별로 등록을 할 수도 있습니다.

(위의 실습에 버튼 1이 전자, 버튼 2가 후자의 방식입니다.)

위에서 후자의 방식으로는 하나의 이벤트 헨들러만을 사용할 수 있어서 다른 방법을 추가로 실습하였습니다.

객체에 addEventListener를 사용하는 방법으로 하나의 객체에 여러개의 이벤트 핸들러를 등록할 수 있습니다.

구버전의 IE에서도 지원을 하기 위해 Cross 라는 JavaScript 파일을 만들어서 처리를 하는 것 또한 해 보았습니다.

실습2 : crossEvent.js , e_exam01.html

 

http://jquery.com/

JQuery Website를 방문하여 JQuery의 장점을 확인할 수 있었고 그중에는

Cross-Browser

IE, Firefox, Safari, Opera, Chrome, and more

위의 내용을 지원하는 것 또한 포함되어 있습니다.

즉, 실습 2의 내용을 굳이 하지 않아도 JQuery를 사용하면 크로스브라우저 기능을 지원합니다.

 

 

이벤트 버블링?

 

부모자식간의 관계에 의해서 자식의 이벤트가 부모에게도 흘러가는것?

 

캡쳐링은 부모에서부터 자식으로 흘러가는 것?!

 

아직 위의 부분에 대해서는 명확한 개념이 들어오지 않았습니다.

 

실습 3. e_exam02.html

버블링 또한 표준 브라우져와 IE구버전이 다릅니다.

(실습 중 실습 2에서 만든 JS파일을 추가하지 않아서 버블링이 되지 않기도 했습니다.)

 

 

=====================================    2      ======================================

(~ 12:44)

 

mission2 ,뭔가 고작 더하기 빼기 하는건데 더하기하면 그냥 붙어 나오는 문제가 발생했습니다.

5+6 = 56,

6-5=1 이 나오는 이상한 계산기입니다.

그 이유는 parseInt()함수를 사용해서 값을 처리해 주지 않았기 때문에 문자열로 처리가 되었습니다.

 

datatype을 명시하지 않는것의 장점만 있는것이 아니라는 것을 학인할 수 있었습니다.

 

 

 

THIS??!!!!란??

실습 !!! -> t_exam01.html ~ t_exam03.html

보통의 경우는 window 객체,

event handler 안에서는 event를 발생시키는 대상 객체

생성자함수나 객체의 Method내에서는 해당 객체가 this!!!!

 

브라우저 내장 객체

 - window와 document

 

실습 : w_exam01.html

 

=====================================    3      ======================================

(14:05  ~ 14:55)

실습 : w_exam01.html        

 

부모 자식간의 결과를 주고 받는식의 실습

실습 : mission.html , address.html

 

 

(이론수업)

사용자 정의 함수와 객체모델                             <다른 강의자료 사용하셨습니다>

 

각 문서의 태그들을 Node가 있는 트리구조로 해석해 낼 수 있다고 가정하는 것입니다.

그동안은 DOM Level 0방식으로 접근하였습니다.

 

DOM API

DOM Property (nodeName, nodeType, childNodes, firstChild, lastChild, 등...)

 

 

return false -> 기본 이벤트를 취소(실행하지 않도록)시키는 기능을 하도록.

 

 

 

=====================================    4      ======================================

(15:09 ~16:14)

 

DOM 폴더를 가져와서

실습 : gallery01.html ~ gallery03.html , showPic.js

 

gallery03.html 에서 뭔가가 잘 되지 않습니다. 현재.

 

=====================================    5      ======================================

(16:24쯤? ~ 17:10)

gallery03.html 마무리

 

뭔가 여전히 강사님과 다른 페이지 레이아웃이지만 뭔....

 

실습 : talbe.html , stripeTable.js-> 홀수에 노랑색으로 표시되게 하기

 

클레스를 추가하는 함수를 추가로 만들어 줄 필요가 있다는 설명과 함께 위의 실습을 시작하였습니다.

 

추가 실습  : talbe.html , stripeTable.js-> 마우스 올라가면 굵은 글씨로 바꿔주기

 

=====================================    6      ======================================

(17:17 ~ 17:51)

ajax!

웹 2.0 기술.

 

Page를 다시 불러오지 않는 . 기존 기술을 비 동기식으로 처리해준것이라고 설명 해 주셨습니다.

GET방식 POST방식?

 

ajax는 자바스크립트의 이벤트부터 시작된다고 하셨습니다.

xml과 json방식으로 돌아가는 코드를 설명과 함께 봤습니다.

ajax폴더에 있는 code들입니다.

첫 주말강의이자 5번째 Kosta강의, 09:00 ~ 18:00. 8시간의 교육이 예정되어 있습니다.

 

오늘도 간단하게 환경설정을 위한 파일부터 복사를 했습니다.

 

10년 전과는 지금 책도 다르다고 설명, 예전에는 자바스크립트가 하나의 쳅터정도에 불과 했으나 지금은 책 하나 1300 페이지 5만원 가량의 책 또한 나오는 추세입니다.

 

Java와 Jave Script는 전혀 관계가 없습니다.

 

Java와는 실행 구조 메커니즘은 완전 다르고 Java와 기초문법과 객체지향 프로그래밍을 할 수 있는것이 유사하지만 객체지향 프로그래밍은 다른 언어로도 충분히 할 수 있다고 설명해주셨습니다.

과거에는 특정 단순한 기능 위주로 개발 및 사용을 하였습니다. 하지만 2010년 이후 그리고 현재에는 상호작용이 가능 하도록 사용을 합니다.

Web 2.0시대에 도래하면서  Ajax와 같이 활용을 하여 UI적인 변화를 겪으면서 자바스크립트가 각광받게 되었습니다.

HTML 5는 플러그인을 없에자는 것이었고 응용프로그램과 같이 사용할 수 있는 웹프로그램을 만들 수 있는것을 지향합니다.

 

(시대에 따른 흐름 ?)

1) DOM script ?

2) J Query (자바 스크립트의 라이브러리) 작업 생산성과 효율이 뛰어나서 자바스크립트를 사용하면 사용을 하지 않을 수 없다고 봐야 하는 상황이고 이러한 상황때문에 J Query를 쓰면서도 자바스크립트를 사용하지 않는다고 생각하는 사람도 있다고 하셨습니다.

3) Node JS - 스크립트 자체로 서버를 만들어 사용하는 것을 목적으로 하며 요즘 각광받고있습니다. 노드JS는 비동기식 프로그래밍을 해야하는데 동기식 프로그래밍에 익숙해진 개발자는 동기식으로 프로그래밍을 하면 최적의 성능을 발휘할 수 없습니다.

4) Angular JS -> 비지니스 모델과의 동기화 MVC의 처리를 하기 위한 스크립트입니다.

 

2)는 UI개발위주라면 3) ~4)는 비지니스 모델에 더 치우친 개발입니다.

2) 이후의 어느것을 사용하던 JavaScript의 기본 문법을 알아야 보다 효율적으로 다른 스크립트를 활용할 수 있다고 하셨습니다.

함수~! 객체~!!!! DOM!!에 대한 이해가 오늘의 주제라고 하셨습니다.

this가 나오면 어렵고 소심해진다고 하셨습니다.

top down방식으로 해석되며 인터프리터 방식으로 동작합니다.

 

 

 

요즘은 헤드단 보다 바디 단에서 부르는게 추세이고 그 이유는 그게 속도가 빠르다고 합니다.

자바스크립트는 자바 뿐 타언어와 비교하여도 문법이 느슨합니다.

 

 

설치를 진행하였습니다.  개인 노트북 사용자는 특히 apache-tomcat-7.0.37을 설치하고 마지막 쯤 체크박스를 모두 해제하도록 하라고 하셨습니다.

이클립스를 설치 후 Workspace를 설정해 주었습니다.

서버와 프로젝트 만들고 서버설치 하는등의 작업을 하였습니다.

 

아래는 글꼴을 바꾸는 부분입니다.

firefox를 설치하면 FireBug를 이용할 수 있고 이클립스에서 파이어폭스 콘솔에 설정에 가서 Enable에 체크가 되어있는지 확인을 해야 합니다. 체크가 되어있어여 디버그를 이용할 수 있습니다.

 

 

파이어폭스로 실행을 하면 파이어 폭스 창 우측 상단에 곤충모양의 버튼(1번)이 있습니다. 누르면 아래부분에 보이는 창이 위로 올라와 화면 하단에 보입니다. 그 창의 상단 텝에 콘솔(2번)탭이 있는데 콘솔텝에서 우클릭을 하면 사용중이면 지금 화면에서 메뉴가 올라오는 것 처럼 팝업메뉴가 보이고 비사용중이면 Disabled하나만 보입니다 그때 체크를 하면(3번) 됩니다.

 

=========================================  2  ======================================

컨트롤 스페이스!!!!  -> 자동완성 단축키

링크 잘 됬는지 확인은 알트키 누르고 클릭하면 파일이 열린다 (하이퍼링크)

 

한줄(블럭) 복사 : Ctrl + Alt + 위(아래) 

8. 블록 주석(/*..*/) 추가.(3.0 NEW): CTRL+SHIFT+/ 

근데 해보니 화면이 반전되었습니다. 저는....

 

추가 설정 ( 인코딩 변경 )

 

 

 

 

 

1) 자료형

자료형에 대해 확인을 해 보고 있습니다.

자바스크립트는 데이터타입(자료형)을 변수할당 전까지 가지고 있지 않아서 확인을 하고싶으면 (typeof intNum)를 사용하여 확인할 수 있어야 합니다.

Undefined와 Null은 다릅니다. 또한 자바스크립트는 자동으로 자료형이 변환됩니다.

2) 변수의 사용범위 규칙 (Scope Rule)

 - 전역변수

 - 지역변수

 

3) 형 변환...

 //문자열 => 숫자형 변환 : eval(), parseInt(), Number()

 var num = "15";
 //num= eval(num);   //=> 자료형 고려하여 숫자로 변환합니다. -> 숫자랑 문자 섞이면 Error
 //num= Number(num);  //=> 자료형 상관없이 숫자로 변환합니다. -> 숫자랑 문자 섞이면 Error 없음
 //num= parseInt(num);  //=> 변환할 수 있는 부분(숫자)만 변환합니다.
 

// == 일때와 ===일때 차이가 있음
 //==는 형변환을 안하고 비교하고 ===은 datatype까지 같아야 함.

 

==================================== 3 ============================================

(11:07 ~ 12:46)

자바스크립트 기본문법

1. 연산자

 산술연산자, 관계연산자, 논리연산자, 비트연산자, 할당연산자, 증감연산자, 조건연산자(3항연산자)

 

2. 제어문

 if, else , switch, while, do...while, for, break, continue, return

 

b_exam05.html

 

3. 사용자 정의 함수

1) 선언적 함수 - 선언부 위에 호출부가 위치해도 상관없음

2) 익명함수 - 선언부 아래에 호출부가 위치해야 함, 선언 이전에 호출하면 Error

두 차이는 호출되는 위치의 차이는 함수가 메모리에 올라가를 시점이 다르기 때문이라고 설명을 해 주셨습니다.

 

자바스크립트는 변수에 함수를 할당할 수 있으며 함수를 할당받은 변수 또한 다른 변수에 할당할 수 있습니다.

함수를 리턴하는 함수를 만들 수 있으며 이 내용에 대해서 실습을 해 보라고 하셨습니다.

 

인자와 리텀값에 함수를 사용하는 것이 익숙하지 않을 뿐이지 어려운 내용은 아니라고 하셨습니다.

 

4. 객체모형 (Object Model)

이전에 window, math등의 내장 객체를 사용했습니다.

1) 내장객체

내장객체는 java가 제공하는 객체입니다.

core객체는 string, date, math와 같은 프로그래밍을 하기위한 API같은 것입니다.

BOM(browser object model)은 window, document등입니다.

 

DOM(Document Object Model)은 HTML로 작성한 문서를 Tree구조로 표현해주는 것입니다.

tree구조로 표현된 노드 하나하나는 객체가 됩니다.

2) 사용자 정의 객체

 3가지의 표현방법이 있습니다.

 

 

사용자 정의 함수, 내장객체, DOM관련 객체 에 대해서 앞으로 이 순으로 수업을 진행할 것이라고 설명 해 주셨습니다.

class를 지원하지 않고 상속도 지원하지 않습니다. 상속은 흉내를 내서 사용할 수 있지만 100% 상속을 구현하기는 어렵습니다.

 

객체는 속성(Proprtties)과 메소드(Method)로 구성됩니다.

함수도 객체이며 객체처럼 생성됩니다!!

========================================  4  =======================================

14:04 ~ 14:58     

수업 시작과 거의 동시에 연습문제를 던지셨습니다.

리터럴 형식으로 객체를 생성 후 동적인 속성에 함수를 등록 후 함수를 호출하는 예제를 구현하시오.

 o_exam04.html

우선 했는데 확신은 안 서고 Java를 처음 배우는 느낌이 나서 즐겁습니다.

함수의 수행 영역 (context)에 따른 변수의 참조와 같은 것을 확인하고 클로저라는 개념에 대해 학습을 하며 또 다른 예제문제를 던져주셨습니다.

 // 클로저를 이용하여 함수에 선언된 10을 실행 context가 종료 후에도 콘솔에 출력되도록 하시오

 o_exam04.html

========================================  5  =======================================

15:08 ~ 16:08

 

프로토 타입?

프로토타입이라는 메모리영역은 객체가 생성되면 만들어 져서 생성자 함수를 호출할 때 마다 메모리에 올라가는 것이 아니라 객체가 생성될 때 마다 프로토타입의 메모리를 링크(연결)해서 사용하는 느낌이라고 설명을 하셨는데 맞게 이해한건지 감이 잘 오지를 않습니다.

요점은 Memery에 객체생성시마다 메소드를 메모리에 올리지 않아도 되는 것 같은 느낌입니다. 프로토타입이라는 키워드를 사용하면 된다고 하였습니다.

실습을 해 보던 중 똑같이 작성을 한 것 같은데 Error가 나서  o_exam05.html의 내용을 정확하게 한번 추후에 보아야 할 것 같습니다.

우선 강사님께서 작성하신 파일을 Backup 받고 오후에 작업한 것 부터는 USB드라이브에 작업이 되도록 workspace를 변경하였습니다.

자바스크립트는 상속이라는 개념을 도입하지 않았는데 자바스크립트에서 그럼 어떻게 구현을 해야할까?

 

부모의 생성자함수를 자식에서 호출을 한다? 자신의 Prototype을 부모의 Prototype을 참조하도록 하는 것입니다. 약간의 억측?이 있지는 하지만 중복되는 코드의 작성을 줄일 수 있습니다.

 

사용자 정의 객체 정리!!!!

1) Object 객체를 이용

2) 리터럴 형식을 이용 -> 단 한번만 객체를 생성하기 위함

3) 생성자함수를 호출 -> 여러 객체를 생성하기 위함.

 

생성자함수의 this를 사용하여 정의하는 것은 속성(property)이라고 함.

new연산자를 사용하여 객체를 생성하면 . 기호를 사용하여 호출을 할 수 있습니다.

method에 대한 memory를 중복하여 할당하므로 Prototype을 사용하면 Memory에는 단 한번만 올릴 수 있습니다.

생성자 함수에 속성으로 설정을하면 정보은닉이 되지 않으므로 지역변수로 맴버를 갖고 있고 메소드를 구현하여 처리를 할 수도 있습니다.

 

상속 기능을 구현하고 싶다면 부모의 생성자 함수를 호출하고, 부모의 프로토타입의 주소값을 자식의 프로토타입에 할당 해 주고 프로토타입에서 컨스트럭터는 자기자신으로 설정해주면 추후에도 문제가 없습니다.

=====================================  6  ==========================================

16:28 ~ 17:16

 

자바스크립트의 내장객체

웹브라우저에서는 모습을 나타내지 않는 객체들입니다.

1) Array 객체

속성 : length

메소드 : ....많이 있습니다.

실습으로 Array에 각종 method를 사용 해 보았습니다.

i_exam01.html

2)  Math객체

난수만들기와 그것을 이용해서 로또번호를 만들어보는 예제를 작성해보았습니다.

i_exam02.html

 

===================================    7    =========================================

(17: 25~ 17:39)

마지막 시간에는 이전 Math객체와 관련하여 예제를 하나 만들어보자고 하셨습니다.

베너이미지가 들어갈 때마다 변경되는 것을 맛보기로 구현을 해 보았습니다.

맨붕... 늦은 출발에 급해서 계산도 잘 못했습니다. 동기가 제발 7천원 이상 썼기를 바라며....

 

 

 

 

 

 

 

 

4. list copy;

 


하면 핫백업한 control file정보도 나옴.

5. 특정 datafile (4번) 만 조회

 

 

 

 

 

8_1 리던던시 적은부분은 그 숫자만큼 더 해야함

 

 

 

 

 

 

 

11_1 압축을 하면 압축 효율도 좋고 따로 압축을 풀 필요도 없어 쓸만하다.

 

아카이브 로그도 백업이 됩니다.

12 _1 시퀀스 번호 구간을 정해서 할 수도 있습니다.

 

 

 

 

12

 

 

 backup as copy datafile 4;
 는 OS 명령으로 파일 복사하는것과 같습니다.

 

 

 

 

backup as copy tablespace users;

 backup as copy database;

ctrl + c : 작업중단 명령입니다.

14. backup을 나눠서 하기 때문에 channel마다 backupset이 생김

 

 

 


 

 

15. 0과 1 level만 쓴다고 생각하면 됨

 

 

 

 

 

 

18. backup datafile 4 tag 'df4backup';

tag를 원하는데로 지정하여 사용을 할 수 있습니다.

 

 

=====================================   2    =======================================

 

 

실습 9-2

 

1 SQL PLUS에서 장애를 만들고 offline시킵니다.

 

 

 

 

2. 리스토어 하고 리커버를 RMAN에서 합니다.

Restore명령의 처리를 반드시 RMAN에서 해야합니다.

 

3. 다시 online으로

 

 

 

 

 

 

 

 

 

 

t07 : NLS_LANG이 설정되어있어야 합니다. 설정 안되있다면 설정해야 합니다.

또한 시간형식을 맞추기 위해

$ export LS_LANG=american_america.KO16MSWIN949

$ export NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS'

$ RMAN TARGET /

 

 

 

 실습 10장을 확인하겠습니다.

 

 

 

그 후 7번에서부터

 

11 만료됬다는 것은 backup정보는 있지만 그 파일이 없는 경우를 확인할 수 있습니다.

따라서 Crosscheck을 먼저하여 확인을 하고 datafile을 지워야 합니다.

12 만료된 것을 목록상에서 지우는 것입니다.

 

 

========================================    3    ====================================

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

오늘은 신입사원 사전직무교육을 받고 기분좋게 강의를 들으러 왔습니다.

 

어제 발생한 Error를 처리하지 못해 오자마자 Coldbackup을 진행하였습니다.

 

실습 4장을 진행하여 hot backup도 진행

 

 

 

테이블을 휴지통으로 보내는 개념이 생겨서 복구가 가능합니다 하지만 PURGE명령을 사용하여 Table을 drop하면 복구하기가 보다 힘듭니다.

SQL> drop table emp purge;

지금 DB현황이 불확실하지만 실습 6장을 진행하겠습니다.

 

 

log를 조회하니 redo log file의 이중화가 안되어 있어서 다시 이중화를 하였습니다.

SQL> SELECT * FROM v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
         1          1          1   52428800        512          1 NO
CURRENT                 892748 18-FEB-16   2.8147E+14

         2          1          0   52428800        512          1 YES
UNUSED                       0                      0

         3          1          0   52428800        512          1 YES
UNUSED                       0                      0


SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo01b.log'
  3  '/u01/app/oracle/oradata/orcl/redo02b.log'
  4  '/u01/app/oracle/oradata/orcl/redo02b.log';
'/u01/app/oracle/oradata/orcl/redo02b.log'
*
ERROR at line 3:
ORA-00946: missing TO keyword


SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo01b.log',
  3  '/u01/app/oracle/oradata/orcl/redo02b.log',
  4  '/u01/app/oracle/oradata/orcl/redo0b.log',
  5
SQL>
SQL> ;
  1  alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo01b.log',
  3  '/u01/app/oracle/oradata/orcl/redo02b.log',
  4* '/u01/app/oracle/oradata/orcl/redo0b.log',
SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo01b.log' to group1,
  3  '/u01/app/oracle/oradata/orcl/redo02b.log' to group2,
  4  '/u01/app/oracle/oradata/orcl/redo03b.log' to group3;
'/u01/app/oracle/oradata/orcl/redo01b.log' to group1,
                                              *
ERROR at line 2:
ORA-02236: invalid file name


SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo01b.log' to group1;
'/u01/app/oracle/oradata/orcl/redo01b.log' to group1
                                              *
ERROR at line 2:
ORA-02236: invalid file name


SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo01b.log' to group1;
'/u01/app/oracle/oradata/orcl/redo01b.log' to group1
                                              *
ERROR at line 2:
ORA-02236: invalid file name


SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log

SQL>
SQL> alter database add logfile member
  2  //u01/app/oracle/oradata/orcl/redo01b.log' to group1;
//u01/app/oracle/oradata/orcl/redo01b.log' to group1
*
ERROR at line 2:
ORA-02236: invalid file name


SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo01b.log' to group1;
'/u01/app/oracle/oradata/orcl/redo01b.log' to group1
                                              *
ERROR at line 2:
ORA-02236: invalid file name


SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo01b.log' to group 1;

Database altered.

SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo03b.log' to group 3;

Database altered.

SQL> alter database add logfile member
  2  '/u01/app/oracle/oradata/orcl/redo02b.log' to group 2;

Database altered.

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log
/u01/app/oracle/oradata/orcl/redo01b.log
/u01/app/oracle/oradata/orcl/redo03b.log
/u01/app/oracle/oradata/orcl/redo02b.log

6 rows selected.

SQL> SELECT * FROM v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES  BLOCKSIZE    MEMBERS ARC
---------- ---------- ---------- ---------- ---------- ---------- ---
STATUS           FIRST_CHANGE# FIRST_TIM NEXT_CHANGE# NEXT_TIME
---------------- ------------- --------- ------------ ---------
         1          1          1   52428800        512          2 NO
CURRENT                 892748 18-FEB-16   2.8147E+14

         2          1          0   52428800        512          2 YES
UNUSED                       0                      0

         3          1          0   52428800        512          2 YES
UNUSED                       0                      0


SQL>

 

====================================    2    ========================================

 

Redo log가 날아간 경우의 복구를 진행 해 보도록 하겠습니다. 이중화가 되어있는 경우에 한 하여 진행 할 수 있습니다.

 

Oracle문서 사용자 backup에 관한부분이 적으므로 아래의 문서를 확인하기를 권장하셨습니다.

Database Backup and Recovery User's Guide

Part VIII

Performing User-Managed Backup and Recovery

 

 RMAN이 무엇인지 설명을 해 주셨고 양이 방대하므로 아주 간단하게만 사용을 해 보겠다고 하셨습니다.

 

 

piece handle=/u01/app/oracle/flash_recovery_area/ORCL/backupset/2016_02_18/o1_mf_nnndf_TAG20160218T204556_cdccqnhy_.bkp

piece => back해서 생긴 파일

 

 

이번엔 DB를 전체적으로 백업하였습니다.

 위의 부분은 control file과 SPFILE이 자동으로 backup되는 것을 확인할 수 있습니다.

backup list 를 다시 조회하여 확인 해 보았습니다.

 

 

=========================================  3  ======================================

 

SQL> show parameter control_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time        integer     7
control_files                        string      /u01/app/oracle/oradata/orcl/c
                                                 ontrol01.ctl, /u01/app/oracle/
                                                 oradata/orcl/control02.ctl

RMAN의 backup정보 또한  control file에 기록을 하고 있습니다.

 (실제 backup을 한 파일을 가지고있지는 않습니다.)

 

7장 실습을 진행하도록 하겠습니다.

 

 

 

 

 

RMAN login하는것과 스크립트 만들어서 사용하는 실습을 해 보았습니다.    

'강의노트' 카테고리의 다른 글

[JavaScript] JavaScript 기초 1일차(160312, 토)  (0) 2016.03.12
[DB] DB백업과복구 5일차  (0) 2016.02.19
[DB] DB백업과복구 3일차  (0) 2016.02.17
[DB] DB백업과복구 2일차  (0) 2016.02.16
[DB] DB백업과복구 1일차  (0) 2016.02.15

3일차. 의도치 않게 차돌정식을 먹고 수강을 시작합니다.

SQL> alter database begin backup;

Database altered.

SQL> SELECT * FROM V$BACKUP;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
         1 ACTIVE                 876309 17-FEB-16
         2 ACTIVE                 876309 17-FEB-16
         3 ACTIVE                 876309 17-FEB-16
         4 ACTIVE                 876309 17-FEB-16
         5 ACTIVE                 876309 17-FEB-16

[oracle@ocpdba ~]$ cd /u01/app/oracle/oradata/
[oracle@ocpdba oradata]$ ls
arch1  coldbackup  hotbackup  orcl
[oracle@ocpdba oradata]$ cp orcl/*.dbf hotbackup/


SQL> alter database end backup;

Database altered.

QL> SELECT * FROM V$BACKUP;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
         1 NOT ACTIVE             876309 17-FEB-16
         2 NOT ACTIVE             876309 17-FEB-16
         3 NOT ACTIVE             876309 17-FEB-16
         4 NOT ACTIVE             876309 17-FEB-16
         5 NOT ACTIVE             876309 17-FEB-16

Not active로 바뀌었는지 확인을 해야 함.

이상으로 Hot backup을 마쳤습니다.

보통의 경우는 Table space별로 합니다. 실습의 경우 DB통으로 하였습니다.

 

실습 4장 3번 (실습 9페이지)

SQL> alter database backup controlfile to
  2  '/u01/app/oracle/oradata/hotbackup/control01.ctl';

Database altered.

 

65페이지     
SQL> alter tablespace users begin backup;

Tablespace altered.

SQL> shutdown abort
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area  849530880 bytes
Fixed Size                  1339824 bytes
Variable Size             511708752 bytes
Database Buffers          331350016 bytes
Redo Buffers                5132288 bytes
Database mounted.
ORA-10873: file 4 needs to be either taken out of backup mode or media
recovered
ORA-01110: data file 4: '/u01/app/oracle/oradata/orcl/users01.dbf'

 

SQL> alter database end backup;

Database altered.

(귀찮으니까 Tablespace하나하나 하지 않고 통째로 End backup)

SQL> alter database open;

Database altered.

[oracle@ocpdba oradata]$ cd /u01/app/oracle/diag/rdbms/orcl/orcl/trace/
[oracle@ocpdba trace]$ ls
alert_orcl.log       orcl_ora_19439.trc  orcl_ora_7814.trm
orcl_arc0_9994.trc   orcl_ora_19439.trm  orcl_ora_7819.trc
orcl_arc0_9994.trm   orcl_ora_20265.trc  orcl_ora_7819.trm
orcl_arc1_9996.trc   orcl_ora_20265.trm  orcl_ora_7829.trc
orcl_arc1_9996.trm   orcl_ora_20449.trc  orcl_ora_7829.trm
orcl_arc2_20802.trc  orcl_ora_20449.trm  orcl_ora_7831.trc
orcl_arc2_20802.trm  orcl_ora_21329.trc  orcl_ora_7831.trm
orcl_arc3_10000.trc  orcl_ora_21329.trm  orcl_ora_7883.trc
orcl_arc3_10000.trm  orcl_ora_21331.trc  orcl_ora_7883.trm
orcl_ckpt_12984.trc  orcl_ora_21331.trm  orcl_ora_7890.trc
orcl_ckpt_12984.trm  orcl_ora_21833.trc  orcl_ora_7890.trm
orcl_ckpt_13627.trc  orcl_ora_21833.trm  orcl_ora_7918.trc
orcl_ckpt_13627.trm  orcl_ora_21835.trc  orcl_ora_7918.trm
orcl_ckpt_16356.trc  orcl_ora_21835.trm  orcl_ora_7954.trc
orcl_ckpt_16356.trm  orcl_ora_21837.trc  orcl_ora_7954.trm
orcl_ckpt_9774.trc   orcl_ora_21837.trm  orcl_ora_7956.trc
orcl_ckpt_9774.trm   orcl_ora_21839.trc  orcl_ora_7956.trm
orcl_dbrm_12972.trc  orcl_ora_21839.trm  orcl_ora_7997.trc
orcl_dbrm_12972.trm  orcl_ora_21841.trc  orcl_ora_7997.trm
orcl_dbrm_13342.trc  orcl_ora_21841.trm  orcl_ora_8001.trc
orcl_dbrm_13342.trm  orcl_ora_21843.trc  orcl_ora_8001.trm
orcl_dbrm_13615.trc  orcl_ora_21843.trm  orcl_ora_8003.trc
orcl_dbrm_13615.trm  orcl_ora_22222.trc  orcl_ora_8003.trm
orcl_dbrm_16344.trc  orcl_ora_22222.trm  orcl_ora_8005.trc
orcl_dbrm_16344.trm  orcl_ora_22287.trc  orcl_ora_8005.trm
orcl_dbrm_20321.trc  orcl_ora_22287.trm  orcl_ora_8007.trc
orcl_dbrm_20321.trm  orcl_ora_22289.trc  orcl_ora_8007.trm
orcl_dbrm_6155.trc   orcl_ora_22289.trm  orcl_ora_8009.trc
orcl_dbrm_6155.trm   orcl_ora_22295.trc  orcl_ora_8009.trm
orcl_dbrm_6235.trc   orcl_ora_22295.trm  orcl_ora_8653.trc
orcl_dbrm_6235.trm   orcl_ora_22297.trc  orcl_ora_8653.trm
orcl_dbrm_6279.trc   orcl_ora_22297.trm  orcl_ora_8655.trc
orcl_dbrm_6279.trm   orcl_ora_22465.trc  orcl_ora_8655.trm
orcl_dbrm_9762.trc   orcl_ora_22465.trm  orcl_ora_8657.trc
orcl_dbrm_9762.trm   orcl_ora_22467.trc  orcl_ora_8657.trm
orcl_j000_10223.trc  orcl_ora_22467.trm  orcl_ora_8659.trc
orcl_j000_10223.trm  orcl_ora_22499.trc  orcl_ora_8659.trm
orcl_j000_10363.trc  orcl_ora_22499.trm  orcl_ora_8661.trc
orcl_j000_10363.trm  orcl_ora_22532.trc  orcl_ora_8661.trm
orcl_j000_13854.trc  orcl_ora_22532.trm  orcl_ora_8663.trc
orcl_j000_13854.trm  orcl_ora_22555.trc  orcl_ora_8663.trm
orcl_j000_16477.trc  orcl_ora_22555.trm  orcl_ora_8665.trc
orcl_j000_16477.trm  orcl_ora_22582.trc  orcl_ora_8665.trm
orcl_j000_21044.trc  orcl_ora_22582.trm  orcl_ora_8667.trc
orcl_j000_21044.trm  orcl_ora_22606.trc  orcl_ora_8667.trm
orcl_j000_6400.trc   orcl_ora_22606.trm  orcl_ora_8669.trc
orcl_j000_6400.trm   orcl_ora_22664.trc  orcl_ora_8669.trm
orcl_j000_7599.trc   orcl_ora_22664.trm  orcl_ora_8671.trc
orcl_j000_7599.trm   orcl_ora_22666.trc  orcl_ora_8671.trm
orcl_j000_7932.trc   orcl_ora_22666.trm  orcl_ora_8673.trc
orcl_j000_7932.trm   orcl_ora_22668.trc  orcl_ora_8673.trm
orcl_j001_6472.trc   orcl_ora_22668.trm  orcl_ora_8675.trc
orcl_j001_6472.trm   orcl_ora_22672.trc  orcl_ora_8675.trm
orcl_j001_8572.trc   orcl_ora_22672.trm  orcl_ora_8677.trc
orcl_j001_8572.trm   orcl_ora_22674.trc  orcl_ora_8677.trm
orcl_j001_8937.trc   orcl_ora_22674.trm  orcl_ora_8679.trc
orcl_j001_8937.trm   orcl_ora_22676.trc  orcl_ora_8679.trm
orcl_j001_9863.trc   orcl_ora_22676.trm  orcl_ora_8681.trc
orcl_j001_9863.trm   orcl_ora_22678.trc  orcl_ora_8681.trm
orcl_j004_6290.trc   orcl_ora_22678.trm  orcl_ora_8683.trc
orcl_j004_6290.trm   orcl_ora_22855.trc  orcl_ora_8683.trm
orcl_j006_13163.trc  orcl_ora_22855.trm  orcl_ora_8685.trc
orcl_j006_13163.trm  orcl_ora_22863.trc  orcl_ora_8685.trm
orcl_lgwr_6245.trc   orcl_ora_22863.trm  orcl_ora_8687.trc
orcl_lgwr_6245.trm   orcl_ora_22920.trc  orcl_ora_8687.trm
orcl_m000_10727.trc  orcl_ora_22920.trm  orcl_ora_8689.trc
orcl_m000_10727.trm  orcl_ora_22977.trc  orcl_ora_8689.trm
orcl_m000_11102.trc  orcl_ora_22977.trm  orcl_ora_8691.trc
orcl_m000_11102.trm  orcl_ora_22986.trc  orcl_ora_8691.trm
orcl_m000_13108.trc  orcl_ora_22986.trm  orcl_ora_8693.trc
orcl_m000_13108.trm  orcl_ora_23035.trc  orcl_ora_8693.trm
orcl_m000_20226.trc  orcl_ora_23035.trm  orcl_ora_8707.trc
orcl_m000_20226.trm  orcl_ora_23075.trc  orcl_ora_8707.trm
orcl_m001_13112.trc  orcl_ora_23075.trm  orcl_ora_8709.trc
orcl_m001_13112.trm  orcl_ora_23111.trc  orcl_ora_8709.trm
orcl_m001_18633.trc  orcl_ora_23111.trm  orcl_ora_8717.trc
orcl_m001_18633.trm  orcl_ora_23140.trc  orcl_ora_8717.trm
orcl_m001_20453.trc  orcl_ora_23140.trm  orcl_ora_8731.trc
orcl_m001_20453.trm  orcl_ora_23175.trc  orcl_ora_8731.trm
orcl_mman_12693.trc  orcl_ora_23175.trm  orcl_ora_8741.trc
orcl_mman_12693.trm  orcl_ora_23177.trc  orcl_ora_8741.trm
orcl_mman_12978.trc  orcl_ora_23177.trm  orcl_ora_8743.trc
orcl_mman_12978.trm  orcl_ora_23664.trc  orcl_ora_8743.trm
orcl_mman_13348.trc  orcl_ora_23664.trm  orcl_ora_8745.trc
orcl_mman_13348.trm  orcl_ora_23666.trc  orcl_ora_8745.trm
orcl_mman_13621.trc  orcl_ora_23666.trm  orcl_ora_8747.trc
orcl_mman_13621.trm  orcl_ora_24132.trc  orcl_ora_8747.trm
orcl_mman_16350.trc  orcl_ora_24132.trm  orcl_ora_8749.trc
orcl_mman_16350.trm  orcl_ora_24589.trc  orcl_ora_8749.trm
orcl_mman_20327.trc  orcl_ora_24589.trm  orcl_ora_8751.trc
orcl_mman_20327.trm  orcl_ora_24630.trc  orcl_ora_8751.trm
orcl_mman_6161.trc   orcl_ora_24630.trm  orcl_ora_8753.trc
orcl_mman_6161.trm   orcl_ora_24645.trc  orcl_ora_8753.trm
orcl_mman_6241.trc   orcl_ora_24645.trm  orcl_ora_8771.trc
orcl_mman_6241.trm   orcl_ora_25404.trc  orcl_ora_8771.trm
orcl_mman_6285.trc   orcl_ora_25404.trm  orcl_ora_8797.trc
orcl_mman_6285.trm   orcl_ora_6078.trc   orcl_ora_8797.trm
orcl_mman_9768.trc   orcl_ora_6078.trm   orcl_ora_8799.trc
orcl_mman_9768.trm   orcl_ora_6165.trc   orcl_ora_8799.trm
orcl_mmon_16362.trc  orcl_ora_6165.trm   orcl_ora_8801.trc
orcl_mmon_16362.trm  orcl_ora_6178.trc   orcl_ora_8801.trm
orcl_mmon_20339.trc  orcl_ora_6178.trm   orcl_ora_8803.trc
orcl_mmon_20339.trm  orcl_ora_6262.trc   orcl_ora_8803.trm
orcl_ora_10896.trc   orcl_ora_6262.trm   orcl_ora_8805.trc
orcl_ora_10896.trm   orcl_ora_6365.trc   orcl_ora_8805.trm
orcl_ora_12601.trc   orcl_ora_6365.trm   orcl_ora_8807.trc
orcl_ora_12601.trm   orcl_ora_6409.trc   orcl_ora_8807.trm
orcl_ora_12715.trc   orcl_ora_6409.trm   orcl_ora_8809.trc
orcl_ora_12715.trm   orcl_ora_6678.trc   orcl_ora_8809.trm
orcl_ora_12906.trc   orcl_ora_6678.trm   orcl_ora_8811.trc
orcl_ora_12906.trm   orcl_ora_6720.trc   orcl_ora_8811.trm
orcl_ora_12907.trc   orcl_ora_6720.trm   orcl_ora_8813.trc
orcl_ora_12907.trm   orcl_ora_6998.trc   orcl_ora_8813.trm
orcl_ora_13006.trc   orcl_ora_6998.trm   orcl_ora_8815.trc
orcl_ora_13006.trm   orcl_ora_7091.trc   orcl_ora_8815.trm
orcl_ora_13116.trc   orcl_ora_7091.trm   orcl_ora_8827.trc
orcl_ora_13116.trm   orcl_ora_7109.trc   orcl_ora_8827.trm
orcl_ora_13198.trc   orcl_ora_7109.trm   orcl_ora_8837.trc
orcl_ora_13198.trm   orcl_ora_7117.trc   orcl_ora_8837.trm
orcl_ora_13202.trc   orcl_ora_7117.trm   orcl_ora_9397.trc
orcl_ora_13202.trm   orcl_ora_7123.trc   orcl_ora_9397.trm
orcl_ora_13240.trc   orcl_ora_7123.trm   orcl_ora_9693.trc
orcl_ora_13240.trm   orcl_ora_7169.trc   orcl_ora_9693.trm
orcl_ora_13251.trc   orcl_ora_7169.trm   orcl_ora_9869.trc
orcl_ora_13251.trm   orcl_ora_7271.trc   orcl_ora_9869.trm
orcl_ora_13254.trc   orcl_ora_7271.trm   orcl_vktm_12679.trc
orcl_ora_13254.trm   orcl_ora_7404.trc   orcl_vktm_12679.trm
orcl_ora_13255.trc   orcl_ora_7404.trm   orcl_vktm_12964.trc
orcl_ora_13255.trm   orcl_ora_7410.trc   orcl_vktm_12964.trm
orcl_ora_13269.trc   orcl_ora_7410.trm   orcl_vktm_13334.trc
orcl_ora_13269.trm   orcl_ora_7412.trc   orcl_vktm_13334.trm
orcl_ora_13376.trc   orcl_ora_7412.trm   orcl_vktm_13607.trc
orcl_ora_13376.trm   orcl_ora_7724.trc   orcl_vktm_13607.trm
orcl_ora_13452.trc   orcl_ora_7724.trm   orcl_vktm_16336.trc
orcl_ora_13452.trm   orcl_ora_7728.trc   orcl_vktm_16336.trm
orcl_ora_13528.trc   orcl_ora_7728.trm   orcl_vktm_20313.trc
orcl_ora_13528.trm   orcl_ora_7730.trc   orcl_vktm_20313.trm
orcl_ora_13563.trc   orcl_ora_7730.trm   orcl_vktm_6147.trc
orcl_ora_13563.trm   orcl_ora_7732.trc   orcl_vktm_6147.trm
orcl_ora_13738.trc   orcl_ora_7732.trm   orcl_vktm_6227.trc
orcl_ora_13738.trm   orcl_ora_7790.trc   orcl_vktm_6227.trm
orcl_ora_13852.trc   orcl_ora_7790.trm   orcl_vktm_6271.trc
orcl_ora_13852.trm   orcl_ora_7791.trc   orcl_vktm_6271.trm
orcl_ora_16288.trc   orcl_ora_7791.trm   orcl_vktm_9754.trc
orcl_ora_16288.trm   orcl_ora_7808.trc   orcl_vktm_9754.trm
orcl_ora_16451.trc   orcl_ora_7808.trm
orcl_ora_16451.trm   orcl_ora_7814.trc


SQL> alter database backup controlfile to trace;

Database altered.

[oracle@ocpdba trace]$ vi orcl_ora_21656.trc

VI편집기로 내용을 확인하였습니다.

[oracle@ocpdba trace]$ oh
[oracle@ocpdba db_1]$ cd dbs
[oracle@ocpdba dbs]$ ls
hc_DBUA0.dat  init.ora  orapworcl      peshm_orcl_0
hc_orcl.dat   lkORCL    peshm_DBUA0_0  spfileorcl.ora

spfileorcl.ora 은 바이너리 파일로 편집기로 수정을 하면깨집니다.

[oracle@ocpdba dbs]$ cat spfileorcl.ora
ã5CC"4Worcl.__db_cache_size=331350016
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=343932928
orcl.__sga_target=507510784
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=159383552
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oCC"'wracle/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4039114752
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.log_archive_dest_1='location=/u01/app/oracle/oradata/arch1'
*.log_archive_format='%t_%s_%r.arc'
*.memory_target=848297984
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.uCC"*{ndo_tablespace='UNDOTBS1'
CC"FePuTTYCC"EeCC"DeC

 init.ora는 sample같은 것 입니다.

 

[oracle@ocpdba dbs]$ cat init.ora
#
# $Header: rdbms/admin/init.ora /main/23 2009/05/15 13:35:38 ysarig Exp $
#
# Copyright (c) 1991, 1997, 1998 by Oracle Corporation
# NAME
#   init.ora
# FUNCTION
# NOTES
# MODIFIED
#     ysarig     05/14/09  - Updating compatible to 11.2
#     ysarig     08/13/07  - Fixing the sample for 11g
#     atsukerm   08/06/98 -  fix for 8.1.
#     hpiao      06/05/97 -  fix for 803
#     glavash    05/12/97 -  add oracle_trace_enable comment
#     hpiao      04/22/97 -  remove ifile=, events=, etc.
#     alingelb   09/19/94 -  remove vms-specific stuff
#     dpawson    07/07/93 -  add more comments regarded archive start
#     maporter   10/29/92 -  Add vms_sga_use_gblpagfile=TRUE
#     jloaiza    03/07/92 -  change ALPHA to BETA
#     danderso   02/26/92 -  change db_block_cache_protect to _db_block_cache_p
#     ghallmar   02/03/92 -  db_directory -> db_domain
#     maporter   01/12/92 -  merge changes from branch 1.8.308.1
#     maporter   12/21/91 -  bug 76493: Add control_files parameter
#     wbridge    12/03/91 -  use of %c in archive format is discouraged
#     ghallmar   12/02/91 -  add global_names=true, db_directory=us.acme.com
#     thayes     11/27/91 -  Change default for cache_clone
#     jloaiza    08/13/91 -         merge changes from branch 1.7.100.1
#     jloaiza    07/31/91 -         add debug stuff
#     rlim       04/29/91 -         removal of char_is_varchar2
#   Bridge     03/12/91 - log_allocation no longer exists
#   Wijaya     02/05/91 - remove obsolete parameters
#
##############################################################################
# Example INIT.ORA file
#
# This file is provided by Oracle Corporation to help you start by providing
# a starting point to customize your RDBMS installation for your site.
#
# NOTE: The values that are used in this file are only intended to be used
# as a starting point. You may want to adjust/tune those values to your
# specific hardware and needs. You may also consider using Database
# Configuration Assistant tool (DBCA) to create INIT file and to size your
# initial set of tablespaces based on the user input.
###############################################################################

# Change '<ORACLE_BASE>' to point to the oracle base (the one you specify at
# install time)

db_name='ORCL'
memory_target=1G
processes = 150
audit_file_dest='<ORACLE_BASE>/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='<ORACLE_BASE>/flash_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='<ORACLE_BASE>'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on separate physical
# devices
control_files = (ora_control1, ora_control2)
compatible ='11.2.0'


SQL> create pfile from spfile;


File created.

[oracle@ocpdba dbs]$ cat initorcl.ora
orcl.__db_cache_size=331350016
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=343932928
orcl.__sga_target=507510784
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=159383552
orcl.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/flash_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4039114752
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.log_archive_dest_1='location=/u01/app/oracle/oradata/arch1'
*.log_archive_format='%t_%s_%r.arc'
*.memory_target=848297984
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'

SQL> show parameter log_archive_format

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_format                   string      %t_%s_%r.arc

                   

log_archive_format 을 잘 못 바꾸어 DB가 올라가지 않는것을 Demo로 보여주셨습니다.

11g 버전 이후부터는 

SQL> create pfile from memory;

를 써서 pfile을 생성할 수 있습니다.

 

=======================================    2    =====================================

[oracle@ocpdba dbs]$ cd /u01/app/oracle/oradata/orcl/
[oracle@ocpdba orcl]$ ls
control01.ctl  redo01.log  redo03.log    system01.dbf  undotbs01.dbf
example01.dbf  redo02.log  sysaux01.dbf  temp01.dbf    users01.dbf

 

확인을 하였고 Failinf은 없는것을 확인할 수 있습니다. 깨진부분이 있으면 추가적인 message와 함께 깨진 것을 확인할 수 있습니다.

깨졌으면 Total Pages Marked Corrupt   : (0을 초과하는 값) 으로 확인할 수 있습니다.

 

5장 5-1 실습은 시간관계상 설명만 하고 넘어간다고 하셨습니다.

실습 5-2) 실습페이지 13

log switch를 실습상황을 위해 일으킵니다.

SQL> alter system switch logfile;

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> /

System altered.

SQL> CREATE TABLE scott.abc
  2  TABLESPACE users
  3  as
  4  SELECT * FROM scott.emp;

Table created.

table을 생성한 이유는복구 후 table이 있으면 복구가 잘 된것을 확인할 수 있습니다.


SQL> INSERT INTO scott.abc SELECT * FROM scott.abc;

14 rows created.

복구가 끝나고 확인을 하기위해 행을 추가해 줍니다.

SQL> SELECT count(*) FROM scott.abc;

  COUNT(*)
----------
        28

SQL> shutdown immediate
ORA-01097: cannot shutdown while in a transaction - commit or rollback first

실습 5-2의 4번을 진행하는데 DB가 내려가지 않는 문제가 발생했습니다.

1번의 e항목을 확인 해 보았습니다.


SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/oradata/arch1
Oldest online log sequence     17
Next log sequence to archive   19
Current log sequence           19


SQL> SELECT f.file_name
  2  FROM dba_tables t, dba_data_files f
  3  WHERE table_name ='abc' and t.tablespace_name = f.tablespace_name;

no rows selected

 

실습 5-2를 진행하다가 무언가 잘못 된 것 같은데 것잡을 수 없게 되었습니다.

 

======================================    3     ======================================

 

실습 16쪽의 5-3실습을 진행하였지만 문제가 있어 진행을 할 수가 없었습니다. DB를 복구한 후 추후에 해볼 수 있도록 해야겠습니다.

 

 

문제의 원인을 차근히 읽고 복사를 하여 획일화를 시켰습니다.

그 후 다시 DB를 올리니까 아까와는 달리 올라가면서 또 복구가 필요하다는 message를 확인할 수 있었습니다.

 

 

역시 또 Error가 났습니다.... 음....

 

SQL> alter system set control_files=
  2  '/u01/app/oracle/oradata/orcl/control01.ctl',
  3  '/u01/app/oracle/oradata/orcl/control02.ctl' scope=spfile;

System altered.
위의 내용을 진행하였고 강사님께서 추가로 cold/hot backup을 새로 해야한다고 알려주셨습니다.

 

=================================    4   ============================================

강의를 마치고 질문 및 개인 추가학습 부분입니다. 우선 어제 실습중에 놓친 부분이 있어서 오늘과같은 참사가 벌어졌습니다. 아래에는 오늘 교육 간 작업했던 접속기의 모든 내용을 캡쳐하였습니다.

위의 그림은 오늘 교육 시 SQL을 사용하기 위해 접속한 접속기의 화면을 통으로 캡쳐 한 것입니다.

'강의노트' 카테고리의 다른 글

[DB] DB백업과복구 5일차  (0) 2016.02.19
[DB] DB백업과복구 4일차  (0) 2016.02.18
[DB] DB백업과복구 2일차  (0) 2016.02.16
[DB] DB백업과복구 1일차  (0) 2016.02.15
[DB] DB 성능관리와 튜닝 5일차  (0) 2016.02.05

오늘은 개인 노트북을 챙겨서 수업을 들을 준비를 하고 왔는데 웬열...?

DB Statrup이 안됩니다.

ORA-00845: MEMORY_TARGET not supported on this system
이라는 메시지와 함께 DB가 올라가지 않습니다.

http://www.dblancer.com/2013/08/oracle-ora-00845-memorytarget-not.html

위의 사이트와 같이 해당 Error문을 검색하여 해결책을 찾았는데 문제가 발생한 원인이 기억이 났습니다. VM ware이미지의 Memory를 설정할 때  4G를 추천하였지만 제가 512MB로 설정을 하였기 때문에 발생 한 것으로 추정하고 있습니다.

VM ware안의 운영체제(저의 경우는 리눅스입니다.)를 일시정지 말고 완전  종료시키고 VM설정을 변경한 후 다시 시작하여 DB를 올리니 올라갔습니다.

 

SQL> SELECT count(*) FROM scott.emp;

  COUNT(*)
----------
        14

scott의 emp table을 모두 지우고 비정상적인 종료 후 다시 시작하여 인스턴스 복구가 일어나는 것을 확인할 예정입니다.

SQL> DELETE FROM scott.emp;

SQL> SELECT count(*) FROM scott.emp;

다시확인

SQL> shutdown abort

//DB를 비 정상적으로 종료하는 명령입니다. 정전과 같은 효과를 줄 수 있습니다.

commit을 하지 않는 내용은 자동으로 롤백이 되기 때문에 아래를 다시 조회 해 보면 확인을 할 수 있습니다.

SQL> SELECT count(*) FROM scott.emp;

 

SQL> show parameter recovery_p

 

하나가 조회됩니다. rollforward작업을 도와주는? 개념이라고 설명해주셨습니다.

 

이번엔 rollback관련하여 조회를 해 보겠습니다.


SQL> show parameter FAST_START

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
fast_start_io_target                 integer     0
fast_start_mttr_target               integer     0
fast_start_parallel_rollback         string      LOW

해당 파라미터를 바꾸면 병렬처리하여 속도를 높일 수 있습니다. (책 36apge참고)

 

SQL> alter system set FAST_START_MTTR_TARGET=300;

 

 

DATABASE의 Archive mode와 No Archive mode가 있습니다. 두가지 차이는

 

Archive mode를 변경하는 것을 해 보겠습니다. 해당내용은 책의 41페이지에 설명되어있습니다.

실습 3장 5번!

SQL> show parameter log_archive_format

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_format                   string      %t_%s_%r.dbf

log_archive_format을 조회하였습니다.

%t : thread number

%s : redo log number

%r : reset log ID???????

불안정 복구를 하고나면 reset log ID가 변경됩니다.

확장자명이 DBF인데 이걸써도 되고 다른걸 써도 됨. 이 확장자는 데이터파일의 확장자와 같으므로 변경하는것을 추천 해 주셨습니다.

SQL> alter system set log_archive_format='%t_%s_%r.arc'
  2  scope=spfile;

System altered.
위의 명령을 통해 변경을 하였습니다. 동적으로 변경이 되지 않는 파라미터이기 때문에 DB를 다시 내렸다 올려야 적용이 됩니다.


SQL> desc v$database_incarnation
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 INCARNATION#                                       NUMBER
 RESETLOGS_CHANGE#                                  NUMBER
 RESETLOGS_TIME                                     DATE
 PRIOR_RESETLOGS_CHANGE#                            NUMBER
 PRIOR_RESETLOGS_TIME                               DATE
 STATUS                                             VARCHAR2(7)
 RESETLOGS_ID                                       NUMBER
 PRIOR_INCARNATION#                                 NUMBER
 FLASHBACK_DATABASE_ALLOWED                         VARCHAR2(26)

Reset Log ID에 대한 질문을 했더니 위의 V$뷰를 조회 해 보라고 하셨고 조회를 해 보니 위와 같이 tab이 밪지 않아서 아래에 다시 화면을 캡쳐하였습니다.

 

또한 쉬는시간에 수업 처음 발견했던 문제에 대해 질문을 하였는데 솔직히 잘 이해가 가지 않는 답변을 받았습니다. Max memory target을 변경하여서도 DB를 올릴 수 있다고 하셨습니다.

 

===================================    2    =========================================

 

아까 내용을 다시 정리 해 주신다고 하셨습니다.

 

위의 화면은 v$log를 조회한 화면으로 블럭 씌운 부분을 보면 아까 log_archive_format에서 설정하는 것들을 확인할 수 있습니다.

SQL> show parameter log_archive

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_config                   string
log_archive_dest                     string
log_archive_dest_1                   string
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
log_archive_dest_16                  string
log_archive_dest_17                  string
log_archive_dest_18                  string
log_archive_dest_19                  string
log_archive_dest_2                   string
log_archive_dest_20                  string
log_archive_dest_21                  string
log_archive_dest_22                  string
log_archive_dest_23                  string
log_archive_dest_24                  string
log_archive_dest_25                  string
log_archive_dest_26                  string
log_archive_dest_27                  string
log_archive_dest_28                  string
log_archive_dest_29                  string
log_archive_dest_3                   string
log_archive_dest_30                  string
log_archive_dest_31                  string
log_archive_dest_4                   string
log_archive_dest_5                   string
log_archive_dest_6                   string
log_archive_dest_7                   string
log_archive_dest_8                   string
log_archive_dest_9                   string
log_archive_dest_state_1             string      enable
log_archive_dest_state_10            string      enable
log_archive_dest_state_11            string      enable
log_archive_dest_state_12            string      enable
log_archive_dest_state_13            string      enable
log_archive_dest_state_14            string      enable
log_archive_dest_state_15            string      enable
log_archive_dest_state_16            string      enable
log_archive_dest_state_17            string      enable
log_archive_dest_state_18            string      enable
log_archive_dest_state_19            string      enable
log_archive_dest_state_2             string      enable
log_archive_dest_state_20            string      enable
log_archive_dest_state_21            string      enable
log_archive_dest_state_22            string      enable
log_archive_dest_state_23            string      enable
log_archive_dest_state_24            string      enable
log_archive_dest_state_25            string      enable
log_archive_dest_state_26            string      enable
log_archive_dest_state_27            string      enable
log_archive_dest_state_28            string      enable
log_archive_dest_state_29            string      enable
log_archive_dest_state_3             string      enable
log_archive_dest_state_30            string      enable
log_archive_dest_state_31            string      enable
log_archive_dest_state_4             string      enable
log_archive_dest_state_5             string      enable
log_archive_dest_state_6             string      enable
log_archive_dest_state_7             string      enable
log_archive_dest_state_8             string      enable
log_archive_dest_state_9             string      enable
log_archive_duplex_dest              string
log_archive_format                   string      %t_%s_%r.dbf
log_archive_local_first              boolean     TRUE
log_archive_max_processes            integer     4
log_archive_min_succeed_dest         integer     1
log_archive_start                    boolean     FALSE
log_archive_trace                    integer     0

많이 나오네요..

log_archive_dest는 경로명을 바로 지정할 수 있습니다.

그리고 바로 위에 보이는 log_archive_format은 아직 변경된 것이 적용되지 않은 것도 확인할 수 있습니다.

log_archive_duplex_dest는 이중으로 복사할 경로명을 정할 수 있습니다.

log_archive_dest_31.. 31까지 있는데 31개가 필요하지도 않고 보통은 1개만 있으면 되지만 2개 그 이상을 사용해야 하는 경우는 스텐바이 DB즉, 재난이 발생할 경우에 대비하는 DB라고 생각하시면 될 것 같습니다. HW적인 복사본을 다른 물리적 위치에서 사용할 수 있게 현재 DB를 그대로 복사하여 스텐바이 DB를 만듭니다.

스텐바이 DB는 Redo archive를 받아 계속 복구를 하는 개념으로 동작을 시켜 동기화를 시키고 원본 DB가 손상이 될 경우 connect을 스텐바이DB로 바꾸어 사용하는 개념입니다. 물론 제난복구 이외에도 사용할 수 있습니다. 즉 31번까지 31개까지 스텐바이 DB를 사용할 수 있습니다. 국내사례는 여러곳으로 보내는 경우가 없지만 외국의 경우에는 여러곳으로 보내는 구축을 한 경우도 있습니다.

log_archive_dest_state_29            string      enable
enable이 되있는곳만 사용이 가능하다고 보시면 됩니다.

 

플레시 리커버리 에어리어를 없에야 한다고 하셨습니다.

SQL> show parameter db_recovery

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      /u01/app/oracle/flash_recovery
                                                 _area
db_recovery_file_dest_size           big integer 3852M

위의 항목이 플레시 리커버리 에어리어(fast recovery area)라고 합니다. 위의 위치에 backup이나 archive가 생깁니다.

 

3장 실습 1번


SQL> alter system set log_archive_dest_1=
  2  "location=/u01/app/oracle/oradata/arch1";

SQL> show parameter log_archive_dest_1

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_1                   string      location=/u01/app/oracle/orada
                                                 ta/arch1
log_archive_dest_10                  string
log_archive_dest_11                  string
log_archive_dest_12                  string
log_archive_dest_13                  string
log_archive_dest_14                  string
log_archive_dest_15                  string
log_archive_dest_16                  string
log_archive_dest_17                  string
log_archive_dest_18                  string
log_archive_dest_19                  string

log_archive_dest_1이 설정되어 있는것을 확인하였습니다.

SQL> shutdown immediate

Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> SQL>
SQL> startup mount
ORACLE instance started.

Total System Global Area  849530880 bytes
Fixed Size                  1339824 bytes
Variable Size             511708752 bytes
Database Buffers          331350016 bytes
Redo Buffers                5132288 bytes
Database mounted.

3장 실습 5번)

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/oradata/arch1
Oldest online log sequence     4
Current log sequence           6

3장 실습 6번 (실습 6페이지)

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/oradata/arch1
Oldest online log sequence     4
Next log sequence to archive   6
Current log sequence           6

SQL PLUS에서 host명령어를 쓸 수 있습니다. host 또는 ! 기호를 명령의 앞에 사용하면 됩니다.


SQL> !ps -ef | grep arc
oracle    9994     1  0 20:26 ?        00:00:00 ora_arc0_orcl
oracle    9996     1  0 20:26 ?        00:00:00 ora_arc1_orcl
oracle    9998     1  0 20:26 ?        00:00:00 ora_arc2_orcl
oracle   10000     1  0 20:26 ?        00:00:00 ora_arc3_orcl
oracle   10206  9396  0 20:28 pts/3    00:00:00 /bin/bash -c ps -ef | grep arc
oracle   10208 10206  0 20:28 pts/3    00:00:00 grep arc


SQL> alter system switch logfile;

System altered.

위의 문장을 한번 더 수행하고 아카이브 로그파일이 잘 생겼나 확인하면

 

flash_recovery_area/에 생성된 것 확인을 못하였습니다.

SQL> alter system set
  2  log_archive_dest_1='';

System altered.

 

위의 화면은 아카이브 행 이라는 것입니다. 더이상 아카이브를 할 수 없을 경우에 발생하는 현상으로 이런 상황에서는 log archive dest를 지정해주면 됩니다. 그러면 지정된 위치에 아카이빙이 진행됩니다.

 

 

다른 창에서 경로를 새로 지정해 주고

alter system archive log all;
 

이 명령은 수동으로 처리를 해주는 것입니다. 아카이브 데스티네이션이 가득차서 풀이나면 보통 당황해서 아카이브로그파일을 지우는 경우가 있는데 그러면 행이 풀려서 DB가 복구가 되지 않고 DB가 죽어버리면 골치아픈 일이 생깁니다.

그것을 그 전에 사용하던 파일을 지웠기 때문에 복구를 하더라도 불안정 복구를 할 수 밖에 없게 됩니다. 따라서 그럴 경우에는 위와 같이 디스크 공간이 있는 쪽으로 경로를 바꾸어 주고 그 후에도 안풀리면 위의 명령을 수행하면 됩니다. 실습 과정에서도 해결되는 것을 확인하였습니다.

위의 실습에서 검정바탕에 흰 글씨의 접속기는 행이 걸린 창 외에 다른 창에서 작업을 하여 행을 풀었던 작업을 수행 한 창입니다.

 

위의 화면은 Archive log를 해당 경로에 가서 확인을 해 본 화면입니다.

SQL> show parameter log_archive
를 해 보면 아래의 내용을 확인할 수 있습니다.

log_archive_max_processes            integer     4

 

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/oradata/arch1
Oldest online log sequence     9
Next log sequence to archive   11
Current log sequence           11

위의 경우를 보면 가장 오래된게 9번 현재가 11번 따라서 9, 10 , 11 3개의 아카이브가 있는 것을 확인할 수 있습니다.

SQL> alter system archive log current;

System altered.

위의 명령은 자동으로 log switch가 일어나는 것을 확인할 수 있습니다.

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/app/oracle/oradata/arch1
Oldest online log sequence     10
Next log sequence to archive   12
Current log sequence           12

바뀌었습니다.

alter system archive log current; // 이거는 현재 것을 수동으로 아카이빙 하는 것이고

(어차피 로그 스위치 일으키는 것과 같지만 메커니즘은 다릅니다.)

alter system archive log all; // 이거는 모든 아카이브 로그 파일을 수동으로 아카이빙 하는 것입니다.

 

====================================     3     =======================================

책의 49페이지에 나와있는 여러 V$뷰를 조회해보았습니다.

 

SQL> select * from v$log_history;

     RECID      STAMP    THREAD#  SEQUENCE# FIRST_CHANGE# FIRST_TIM NEXT_CHANGE#
---------- ---------- ---------- ---------- ------------- --------- ------------
RESETLOGS_CHANGE# RESETLOGS
----------------- ---------
         1  838128337          1          1        754488 29-JAN-14       789562
           754488 29-JAN-14

         2  838128346          1          2        789562 29-JAN-14       792901
           754488 29-JAN-14

         3  838129605          1          3        792901 29-JAN-14       821270
           754488 29-JAN-14

         4  838133422          1          4        821270 29-JAN-14       841850
           754488 29-JAN-14

         5  903987470          1          5        841850 29-JAN-14       867857
           754488 29-JAN-14

         6  903990643          1          6        867857 16-FEB-16       871820
           754488 29-JAN-14

         7  903990698          1          7        871820 16-FEB-16       871847
           754488 29-JAN-14

         8  903990903          1          8        871847 16-FEB-16       871937
           754488 29-JAN-14

         9  903990906          1          9        871937 16-FEB-16       871941
           754488 29-JAN-14

        10  903991260          1         10        871941 16-FEB-16       872164
           754488 29-JAN-14

        11  903991883          1         11        872164 16-FEB-16       872883
           754488 29-JAN-14


11 rows selected.

 

 

 

책 실습 7페이지의 3장 실습 10번을 진행하겠습니다.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
DB를 정상적으로 종료하였습니다.

 

[oracle@ocpdba oradata]$ cp orcl/* coldbackup/

복사가 완료 되면


SQL> startup

DB를 시작합니다.

 

SQL> desc dba_data_files
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FILE_NAME                                          VARCHAR2(513)
 FILE_ID                                            NUMBER
 TABLESPACE_NAME                                    VARCHAR2(30)
 BYTES                                              NUMBER
 BLOCKS                                             NUMBER
 STATUS                                             VARCHAR2(9)
 RELATIVE_FNO                                       NUMBER
 AUTOEXTENSIBLE                                     VARCHAR2(3)
 MAXBYTES                                           NUMBER
 MAXBLOCKS                                          NUMBER
 INCREMENT_BY                                       NUMBER
 USER_BYTES                                         NUMBER
 USER_BLOCKS                                        NUMBER
 ONLINE_STATUS                                      VARCHAR2(7)

SQL> SELECT FILE_NAME, TABLESPACE_NAME FROM dba_data_files;

FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
/u01/app/oracle/oradata/orcl/users01.dbf
USERS

/u01/app/oracle/oradata/orcl/undotbs01.dbf
UNDOTBS1

/u01/app/oracle/oradata/orcl/sysaux01.dbf
SYSAUX

/u01/app/oracle/oradata/orcl/system01.dbf
SYSTEM

/u01/app/oracle/oradata/orcl/example01.dbf
EXAMPLE

 

파일 ID까지 추가로 조회하였습니다. FILE_ID를 기억하면 파일 이름을 입력하지 않고도 접속 및 관리를 할 수 있습니다.

[oracle@ocpdba oradata]$ oh
[oracle@ocpdba db_1]$ cd dbs
[oracle@ocpdba dbs]$ pwd
/u01/app/oracle/product/11.2.0/db_1/dbs
[oracle@ocpdba dbs]$
[oracle@ocpdba dbs]$ ls
hc_DBUA0.dat  init.ora  orapworcl      peshm_orcl_0
hc_orcl.dat   lkORCL    peshm_DBUA0_0  spfileorcl.ora

OH는 Oracle home으로 이동하도록 환경변수를 설정해 두셨다고 하셨습니다.

spfileorcl.ora : 실습 DB의 parameter file

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /u01/app/oracle/product/11.2.0
                                                 /db_1/dbs/spfileorcl.ora

위의 명령으로 확인할 수 있습니다.

SQL> SELECT * FROM V$BACKUP;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
         1 NOT ACTIVE                  0
         2 NOT ACTIVE                  0
         3 NOT ACTIVE                  0
         4 NOT ACTIVE                  0
         5 NOT ACTIVE                  0
번호만 보이는데 위의 table과 조인을 하여 볼 수도 있습니다.

SQL> alter tablespace system begin backup;

Tablespace altered.

SQL> SELECT * FROM V$BACKUP;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
         1 ACTIVE                 875689 16-FEB-16
         2 NOT ACTIVE                  0
         3 NOT ACTIVE                  0
         4 NOT ACTIVE                  0
         5 NOT ACTIVE                  0

begin backup하자 활성화되었습니다.

SQL> alter tablespace system end backup;

Tablespace altered.

SQL> SELECT * FROM V$BACKUP;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
         1 NOT ACTIVE             875689 16-FEB-16
         2 NOT ACTIVE                  0
         3 NOT ACTIVE                  0
         4 NOT ACTIVE                  0
         5 NOT ACTIVE                  0

backup과 복구는 어렵지 않지만 위의 경우도 begin backup을 한 후 end backup을 하지 않아서 장애가 발생하는 경우도 있습니다.


SQL> alter tablespace system begin backup;

Tablespace altered.

SQL> shutdown immediate
ORA-01149: cannot shutdown - file 1 has online backup set
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'

DB가 종료되지도 않습니다. 이 경우 강제로 종료해버리면 나중에 DB가 올라오지도 않는 문제가 발생할 수 있습니다.

SQL> alter database begin backup;

Database altered.

SQL> SELECT * FROM V$BACKUP;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
         1 ACTIVE                 875849 16-FEB-16
         2 ACTIVE                 875849 16-FEB-16
         3 ACTIVE                 875849 16-FEB-16
         4 ACTIVE                 875849 16-FEB-16
         5 ACTIVE                 875849 16-FEB-16

SQL> alter database end backup;

Database altered.

SQL> SELECT * FROM V$BACKUP;

     FILE# STATUS                CHANGE# TIME
---------- ------------------ ---------- ---------
         1 NOT ACTIVE             875849 16-FEB-16
         2 NOT ACTIVE             875849 16-FEB-16
         3 NOT ACTIVE             875849 16-FEB-16
         4 NOT ACTIVE             875849 16-FEB-16
         5 NOT ACTIVE             875849 16-FEB-16

DB를 통으로 backup을 할 수 있는경우를 준비 해 보았습니다. 내일 강의시간에 backup을 진행할 예정입니다.

'강의노트' 카테고리의 다른 글

[DB] DB백업과복구 4일차  (0) 2016.02.18
[DB] DB백업과복구 3일차  (0) 2016.02.17
[DB] DB백업과복구 1일차  (0) 2016.02.15
[DB] DB 성능관리와 튜닝 5일차  (0) 2016.02.05
[DB] DB 성능관리와 튜닝 4일차  (0) 2016.02.04

+ Recent posts