오라클 관리 admin
0206
데이터베이스를 운영단계에서는 아무때나 내릴 수 없으므로 정적 파라미터 변경은 최대한 db 설치 이후에 해야 합니다.
반드시 꼭 변경해야할 파라미터
어제 배운 것 중에 중요 내용 복습
질문1. ORACLE_HOME/dbs/ 밑에 initPROD.ora 와 spfilePROD.ora 가 같이 있는 상태에서
db를 내리고 startup 을 하면 어느 파라미터 파일을 읽을까요 ?
답 : spfilePROD.ora
에스피파일이 우선순위이다 !
질문2. ORACLE_HOME/dbs/ 밑에 spfilePROD.ora 와 spfileORCL.ora 가 같이있으면
둘 중 어떤 파라미터 파일을 우선적으로 읽을까요 ?
답: 다음과 같이 ORACLE_SID 환경 변수에 세팅되어져 있는 인스턴스 이름의 파라미터 파일을 읽는다.
[orcl:~]$ echo $ORACLE_SID
orcl
만약에 다른 인스턴스로 변경하고 싶다면 ?
정리하면 STARTUP 할 때 파라미터 파일을 읽는 순서
1순위 다음과 같이 pfile 을 지정해서 파라미터 파일을 선택하는 것 !
startup pfile=$ORACLE_HOME/dbs/initPROD.ora
2순위. spfile (spfilePROD.ora)
3순위. pfile (initPROD.ora)
모두 다 있으면 지정된게(1순위가) 올라감 !
실습
#1. PROD 인스턴스 환경으로 만들어 놓습니다.
$ . oraenv
#2. ORACLE_HOME/dbs 밑에 PROD 인스턴스 관련해서 파라미터 파일이 뭐가 있는지 조회합니다.
#3. 인스턴스를 내리고 다시 올려서 현재 인스턴스가 spfile 로 구성되었는지 pfile로 구성되었는지 확인하시오
문제1
startup spfile=$ORACLE_HOME/dbs/spfilejhs.ora
cd /u01/app/oracle/diag/rdbms
cd /u01/app/oracle/diag/rdbms/jhs
cd /u01/app/oracle/diag/rdbms/jhs2
cd /u01/app/oracle/diag/rdbms/orcl
cd /u01/app/oracle/diag/rdbms/prod
예제35 database 종료 모드 4가지 알고 있기
왜 dba 가 db 를 내리는지 ?
트랜잭션 : 모든 명령어가 정상적으로 수행 완료된 상태 또는 모든 명령어가 수행되지 않아 취소된 상태로 존재
현재 진행중인 트랜잭션 - 명령어를 작성중인 상황
세션 어떤 활동을 위한 시간이나 기간
오라클 데이터베이스에서 세션은 데이터베이스 접속을 시작으로 여러 데이터베이스에서 간련 작업을 수행 후
접속을 종료하기까지 전체 기간을 의미한다.
체크 포인트 메모리의 수정된 페이지와 트랜잭션 로그 정보를 디스크에 기록
예기치 않은 종료 후 복구 프로세스에서 복구를 시작하는 기준점.
2번 캡쳐 -
shutdown immediate

ocp 문제에 단골처럼 나온다고
커밋할 때 셧다운어볼트를 하면 로그라이터에 남아 있다구
셧다운 어볼트를 쓰는걸 주저할까봐
셧다운 인스턴스 리커버리 - 이거 알기 !!
startup force = shutdown abort + startup
crs_stat -t
리눅스 서버의 주요 응용프로그램 상태 확인
target, state 모두 ONLINE 이어야 한다.
PROD 는 클러스터에 등록이 안되어서 안보이는 중 !!

srvctl stop database -d jhs -o abort

crs_stop -all


회사에서는 이 디비를 끄고 리눅스 버춰박스를 꺼야함...
alert log file 을 em 으로 확인하기
automatic da
show incident

문제 adrci 를 실행하는 쉘 스크립트를 dba.sh 에 추가하시오

오라클에 문제가 있는지 진단을 하려면 14번을 누르세요
예제38 db의 성능 정보를 확인하려면 v$ 로 시작하는 뷰를 알아야해요

v$ 로 시작하는 dynamic performance view 를 활용하는 방법
악성 SQL 을 찾을 수 있게 해줍니다. (VSQLTEXT)
지금 현재 작업을 못하고 Waiting 하는 세션들을 조회할 수 있게 해줍니다.
( VSESSION_WAIT )
락(LOCK)이 발생했을 때 락 홀더와 waiter 를 찾을 수 있게 해줍니다
(V$LOCK)
대량 데이터를 update 할 때 취소해야할 데이터(undo) 가 얼마나 되는지
모니터링 할 수 있게 해준다. (V$UNDO_XXX)
*v$ 로 시작하는 다이나믹 퍼포먼스 뷰의 고려사항
이 뷰는 전부 sys 유저가 소유하고 있다.
startup 단계에 따라서 서로 다른 뷰를 사용할 수 있습니다.(ocp)
dynamic performace view 가 뭐가 있는지 조회하려면 v$fixed_table 을 보면 된다.
동적 데이터를 보여주기 때문에 계속 갱신된다
■ 실습1. nomount 단계에서 볼 수 있는 다이나믹 퍼포먼스 뷰
SQL> shutdown immediate
SQL> startup nomount
SQL> select count() from v$parameter; ---> 볼 수 있음
SQL> select count() from vcontrolfile; ---> 볼 수 없음

■ 실습2. mount 단계에서 볼 수 있는 다이나믹 퍼포먼스 뷰
SQL> alter database mount;
SQL> select count() from v$parameter; ---> 볼 수 있음
SQL> select count() from vcontrolfile; ---> 볼 수 있음
SQL> select count(*) from dba_tables; ---> 볼 수 없음.

■ 실습3. open 단계에서 볼 수 있는 다이나믹 퍼포먼스 뷰
SQL> alter database open;
SQL> select count() from v$parameter; ---> 볼 수 있음
SQL> select count() from vcontrolfile; ---> 볼 수 있음
SQL> select count(*) from dba_tables; ---> 볼 수 없음.

문제1. datafile 에 관련한 다이나믹 퍼포먼스 뷰를 알고싶은데 기억이 안날 때는 ?
답: select name from v$fixed_table
where name like '%DATAFILE%';
문제2. ALERT LOG 파일에 적히는 내용이 무엇입니까 ?
데이터베이스의 Alert File에는 다음과 같은 메시지가 시간 순으로 기록되어 있습니다.
• 시작 시 사용된 기본값이 아닌 초기화 파라미터 (non-defalut database parameters)
• 발생한 모든 내부 오류(ORA-600),
블록 손상 오류(ORA-1578) block corruption errors
deadlock 오류(ORA-60) deadlock errors
DDL 명령어로 ( CREATE, ALTER, DROP TRUNCATE, RENAME) DATABASE 및 TABLESPACE SQL 문
STARTUP, SHUTDOWN, ARCHIVE LOG 및 RECOVER와 같은 Enterprise Manager 또는 SQL*Plus문과 같은 관리 작업
• shared server 및 디스패처 프로세스의 기능과 관련된 일부 메시지 및 오류
• Materialized View의 자동 Refresh 중에 발생한 오류
스캇유져 시작했을때는 아님 !!!!!!!!!!!!!!!!!!!!
session logins and logouts 는 아님 !
문제3. trace file 에 적히는 내용이 무엇입니까 ?

각 서버 프로세스와 백그라운드 프로세스는 연관된 Trace file에 정보를 기록할 수 있습니다.
프로세스는 시스템 오류를 감지하면 오류에 대한 정보를 해당 Trace file로 덤프합니다.
시스템 오류가 발생하고 정보가 Trace file에 기록되면 관리자는 Oracle 지원 센터 서비스에
문의해야 합니다
[OCP 19c Workshop 2번] trace file 관련 문제
they can be written by server processes
they can be written by background processes

객체(object) 1. 테이블
2. 뷰
3. 인덱스
4. 시퀀스
5. 시너님
문제1. 데이터베이스에 만들어진 테이블이 몇개가 있는지 조회하려면 ?
select count(*) from dba_tables;


문제2. 데이터베이스 만들어진 인덱스가 몇개 있는지 조회
select count(*) from dba_indexes;
설명: user_xxx, all_xxx, dba_xxx 데이터 사전은 오라클에 의해서 만들어졌고 오라클에 의해서 관리됩니다.
문제3. emp 테이블에 database 에 존재하는지 확인하시오
select count(*)
from dba_tables
where table_name = 'EMP';
문제4. sal 컬럼이 어느 테이블에 존재하는지 확인하고 싶다면
cloumn 에 대한 딕셔너리를 알아야하는데 이걸 다 못외우니까 찾아봐야 합니다
select table_name
from dictionary
where table_name like'%COLUMN%';
SELECT TABLE_NAME
FROM DBA_TAB_COLUMNS
WHERE COLUMN_NAME ='SAL';
문제5. DATABASE 에 유져가 모두 몇개인지 조회하시오 !
select table_name
from dictionary
where table_name like'%USERS%';
select count(*)
from dba_users;

X$로 시작하는 테이블들이 데이터 사전 뷰의 원본 테이블 입니다.
SELECT *
FROM v%';
x$ 로 시작하는 테이블들을 직접 조회해서 볼 수는 있으나 어떤게 중요하고
어떤게 덜 중요한지 모르니까 오라클에서 x$ 시작하는 테이블을 가지고
user_xxx, all_xxx, dba_xxx 와 같은 데이터 딕셔너리 뷰를 생성해준것입니다.
SELECT *
FROM X$KQFTA ;
ocp 풀기 전에 정리
6장 ORACLE 네트워크 환경 구성

목표
• Enterprise Manager를 사용하여 다음 작업 수행
– 추가 리스너 생성
– Oracle Net 서비스 alias 생성
– Connect-time failover 구성
– Oracle Net 리스너 제어
• tnsping을 사용하여 Oracle Net 연결 테스트
• Shared Server를 사용하는 경우와 Dedicated Server를
사용하는 경우 식별
예제 40. 오라클에 접속하려면 오라클 NET 서비스를 알아야 해요
내 노트북 아이피 주소를 국민은행( 클라이언트의 서버) 의 sqlnet.ora 에 넣어줘야 할 수 있음
<Grid_home>/network/admin/listener.ora
./sqlnet.ora
4가지 정보 1. 호스트(아이피 주소) 2. 포트 3. 프로토콜 4. 서비스이름

Oracle Net 리스너는 자체 소프트웨어 설치 디렉토리인 <Grid_home>에서 시작됩니다.
ASM Instance에 연결 기능을 제공하려면 리스너를 이 소프트웨어 설치에서 실행해야 합니다.
이 리스너는 또한 기본적으로 동일 서버에 설치된 모든 데이터베이스 instance를 수신하는 데 사용됩니다.
실습
#1. GRID_HOME 디렉토리를 쉽게 찾아갈 수 있도록 환경변수를 만듭니다.
cd
vi .bash_profile
맨 아래에 다음의 내용을 추가
export GRID_HOME=/u01/app/oracle/product/11.2.0/grid
source .bash_profile
echo $GRID_HOME
스크린샷 삽입
#2. 서버에 listener.ora 를 찾으시오
cd $GRID_HOME
cd network
cd admin
[orcl:admin]$ ls
listener.ora listener.ora.bak.edydr1p0 samples shrept.lst sqlnet.ora
#3. 나의 리스터를 통해서 접속이 가능한지 확인을 합니다.
sqlplus scott/tiger@192.168.19.43:1521/orcl.us.oracle.com
그런데 위와 같이 기술해서 접속하면 너무 적을게 많으니까 tnsmanes.ora 에 4가지 정보를 기록하고 tns 별칭을 이용해서 접속한다

#4. tnsnames.ora 가 있는 곳으로 이동합니다.
cd $ORACLE_HOME/network/admin
$ ls
samples shrept.lst tnsnames.ora
그런데 만약 접속이 안된다면?
해당 아이피 주소로 ping 이 나가는지 확인한다
$ping 192.168.19.43
설명 : ping

$tnsping orcl777
설명 : ping 은 나가는데 tnsping 이 안나가면 tnsnames.ora 에 구성을 잘못한 것.
문제1 짝꿍의 4가지 정보를 받아서 나의 tnsnames.ora에 등록하시오
tns 별칭은 짝꿍의 영문이름_orcl 로 하시오
jyp_orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.19.45)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.us.oracle.com)
)
)
$ ping 192.168.19.45
$ tnsping 192.168.19.45
짝꿍 자리로 들어가지는지 확인

문제2. sqlnet.ora 에 짝 아이피 주소를 넣어서 허용된 아이피만 접속될 수 있도록 하시오
sqlplus scott/tiger@192.168.19.43:1521/orcl.us.oracle.com 이게 EZCONNECT 임
sqlnet.ora 의 내용
tcp.validnode_checking=yes
tcp.invited_nodes=(192.168.19.45)
tcp.exclude_nodes=(192.168.19.54)
TCP.NODELAY=yes
설명: (192.168.56.1,192.168.56.2) 는 접속되지만
(192.168.0.6) 는 접속이 안됩니다.

