728x90

SQL 툴에서 SYS계정의 SYSDBA로 접속해야 한다.

SELECT * 
FROM SYS.X$DBGALERTEXT;

Alert log의 내용 결과를 나타내 주는 테이블이다.

Alert Log 확인

SELECT 
    HOST_ID, 
    HOST_ADDRESS,
    TO_CHAR(ORIGINATING_TIMESTAMP, 'YY/MM/DD(DY) HH24:MI:SS') AS "ALTERT_DATE",
    MESSAGE_TEXT
FROM  SYS.X$DBGALERTEXT
WHERE ORIGINATING_TIMESTAMP >= TRUNC(SYSDATE) -7
ORDER BY RECORD_ID;

날짜 포맷을 연월일 요일 시분초로 변경한 쿼리문이다. TRUNC는 어떤 식으로 사용돼 나면 아래와 같은 쿼리로 많이 사용한다.

-- 시간 확인
ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';

SELECT SYSDATE FROM DUAL
UNION ALL
SELECT SYSDATE -1 FROM DUAL
UNION ALL
SELECT TRUNC(SYSDATE) -1 FROM DUAL;

WHERE ORIGINATING_TIMESTAMP >= TRUNC(SYSDATE)은 오늘 00시부터 모든 Alert log가 다 나오게 된다.

SELECT 
    '<html><font color=orange><b>'||HOST_ID||'</font></html>' AS "HOST_ID",
    '<html><bgcolor=blue><font color=white>'  ||HOST_ADDRESS  ||'</font></html>' AS "HOST_ADDRESS",
    '<html><bgcolor=yellow><font color=black>'||TO_CHAR(ORIGINATING_TIMESTAMP, 'YY/MM/DD(DY) HH24:MI:SS') AS "ALTERT_DATE",
    '<html><bgcolor=red><font color=white>'   || MESSAGE_TEXT ||'</font></html>' AS "ALTERLOG"
FROM  SYS.X$DBGALERTEXT
--WHERE ORIGINATING_TIMESTAMP >= SYSDATE  - INTERVAL '10' MINUTE
--WHERE ORIGINATING_TIMESTAMP >= SYSDATE  - INTERVAL '30' MINUTE
--WHERE ORIGINATING_TIMESTAMP >= SYSDATE  - INTERVAL '1' HOUR
WHERE ORIGINATING_TIMESTAMP >= TRUNC(SYSDATE) -20
AND   MESSAGE_TEXT LIKE '%ORA-%'
ORDER BY RECORD_ID;

SQL 디벨로퍼에서는 html code를 작성하면 안에 있는 데이터에 대한 색상을 표현할 수 있다.

Alert log 관리 꿀팁

adrci(Automatic Diagnostic Repository)로 디비 진단할 때 많이 사용하는 명령어이다.

adrci

오라클 계정에서 adrci를 입력한다.

adrci 설정 확인

show homes

Diagnostic 위치가 나온다.

adrci Home Path 변경

set HOMEPATH diag/rdbms/str/STR
-- Alert Log 삭제(분) (30*24*60) 30일 
purge -age 43200 -type ALERT

-- Alert Log 삭제(분) (60*24*60) 60일  
purge -age 86400 -type ALERT

-- Alert Log 삭제(분) (90*24*60) 90일 
purge -age 129600 -type ALERT

원하는 보관 주기에 맞춰서 사용하면 된다. 이렇게 해야 X$DBGALERTEXT fixed 테이블에 데이터를 줄일 수 있는 꿀팁이다.

참고

https://www.youtube.com/watch?v=q5J9Z5fKeFE 

 

728x90
728x90

테이블 데이터 복구 프로세스

원본 테이블은 새로운 데이터가 계속 들어올 수 있기 때문에 백업 테이블을 이용해 복구해야 된다.

데이터 복구를 위해 백업 테이블을 만드는 방법(CTAS)

CREATE TABLE SYS.TEST_221122_0709
AS
SELECT * FROM SYS.TEST
AS OF TIMESTAMP TO_TIMESTAMP('2022/11/22 07:09', 'YYYY/MM/DD HH24:MI');

TEST 테이블 만들고 10분 정도 지나고 복구 TEST 해야 잘 된다.

전체 테이블 복구

CREATE TABLE SYS.TEST 
(
  ENAME       VARCHAR2(20 BYTE), 
	MOB_NUMBER  VARCHAR2(20 BYTE)
) 
TABLESPACE SYSTEM;

INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일일','010-0000-0001');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일이','010-0000-0002');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일삼','010-0000-0003');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일사','010-0000-0004');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일오','010-0000-0005');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일육','010-0000-0006');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일칠','010-0000-0007');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일팔','010-0000-0008');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일구','010-0000-0009');
INSERT INTO SYS.TEST (ENAME,MOB_NUMBER) VALUES('김일십','010-0000-0010');
COMMIT;

SYS.TEST 테이블을 만들고 테스트 데이터를 INSERT 한 후 COMMIT 한다.

DELETE FROM SYS.TEST;
COMMIT;

SYS.TEST 테이블의 데이터를 지우고 COMMIT 한다.

-- TEST_221122_0709 테이블 5분 전 데이터 테이블 생성
CREATE TABLE SYS.TEST_221122_0709
AS 
SELECT * 
FROM SYS.TEST 
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '5' MINUTE);

CTAS를 이용해 5분 전의 데이터 테이블을 생성한다.

SELECT * FROM SYS.TEST_221122_0709;

SYS.TEST_221122_0709 테이블을 조회하면 테이블에 5분 전 데이터가 삽입이 된 것을 볼 수 있다.

SELECT /*insert*/ * FROM SYS.TEST_221122_0709;

위의 SQL문을 입력하면 INSERT문이 자동으로 만들어진다. 테이블 이름을 SYS.TEST_221122_0709에서 SYS.TEST로 변경 후 INSERT문을 실행시키고 COMMIT을 하면 데이터 복구가 잘 수행되었다.

CREATE TABLE SYS.TEST_221122_0709
AS 
SELECT * 
FROM SYS.TEST 
AS OF TIMESTAMP TO_TIMESTAMP('2022/11/22 07:09','YYYY/MM/DD HH24:MI');

위의 SQL문은 내가 원하는 정확한 시점으로 데이터를 복구하는 쿼리문이다.

일부 삭제된 데이터 복구

위와 동일하게 진행하면 된다.

UNDO 파라미터

undo_retention은 읽기 일관성을 위한 데이터 보유 기간을 설정하는 것이다. 디폴드 값은 900으로 15분이다. 보통 12시간 43200, 24시간 86400 적용하는 편이다.

파라미터 변경

alter system set undo_retention=86400 scope=spfile;

위의 SQL문으로 파라미터를 변경 후 DB를 내렸다 다시 올려주면 적용된다.

undo_retention을 유지하려면 꼭 UNDO 테이블 스페이스의 데이터 파일도 같이 늘려주어야 한다.

UNDO 데이터 파일 만들기

ALTER TABLESPACE UNDOTBS1 
ADD DATAFILE '/oracle/app/oracle/oradata/DB이름/undotbs02.dbf'
SIZE 1024M;

UNDO 데이터 파일 크기 변경

ALTER TABLESPACE DATAFILE '/oracle/app/oracle/oradata/DB이름/undotbs02.dbf'
RESIZE 2048M;

업계에서 보통 undo_retention은 24시간에서 UNDO 테이블 스페이스 공간은 200에서 300기가로 적용한다.

UNDO 상태 정보

SELECT 
    TABLESPACE_NAME, 
    STATUS, 
    ROUND(SUM(BYTES/1024/1024)) AS "SIZE(MB)"
FROM DBA_UNDO_EXTENTS
GROUP BY TABLESPACE_NAME, STATUS
ORDER BY 1,2;

UNDO 상태는 active, unexpired, expired가 있다. UNDO 공간에 문제가 발생할 때 자주 사용하는 쿼리이므로 알고 있으면 좋다.

UNDO 상태 정보(UNDO 전체 크기)

SELECT 
    TABLESPACE_NAME,
    FILE_NAME,
    BYTES/1024/1024 "SIZE(MB)"
FROM DBA_DATA_FILES
WHERE TABLESPACE_NAME = 'UNDOTBS1'
ORDER BY 1, 2;

UNDO 사용량이 높은 SQL

SELECT 
    MAXQUERYID AS "SQL_ID", 
    SUM((ACTIVEBLKS*8)/1024) AS "ACTIVE_BLOCK", 
    MAX((UNEXPIREDBLKS*8)/1024)  
FROM V$UNDOSTAT
WHERE MAXQUERYID IS NOT NULL
GROUP BY MAXQUERYID
ORDER BY 2 DESC;

SQL TEXT 분석

SELECT 
    SQL_ID, 
    PARSING_SCHEMA_NAME, 
    SERVICE, 
    SQL_FULLTEXT
FROM V$SQL
WHERE SQL_ID = '위의 undo 사용량 높은 SQL_ID값';

시간 계산 꿀팁

ALTER SESSION SET NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS';

-- +시간 계산하기
SELECT '현재시간' AS "시간구분",SYSDATE FROM DUAL
UNION ALL
SELECT '+1초', SYSDATE+(INTERVAL '1' SECOND) FROM DUAL
UNION ALL
SELECT '+1분', SYSDATE+(INTERVAL '1' MINUTE) FROM DUAL
UNION ALL
SELECT '+1시간', SYSDATE+(INTERVAL '1' HOUR) FROM DUAL
UNION ALL
SELECT '+1일', SYSDATE+(INTERVAL '1' DAY) FROM DUAL
UNION ALL
SELECT '+1개월', SYSDATE+(INTERVAL '1' MONTH) FROM DUAL;

-- -시간 계산하기
SELECT '현재시간' AS "시간구분",SYSDATE FROM DUAL
UNION ALL
SELECT '-1초', SYSDATE-(INTERVAL '1' SECOND) FROM DUAL
UNION ALL
SELECT '-1분', SYSDATE-(INTERVAL '1' MINUTE) FROM DUAL
UNION ALL
SELECT '-1시간', SYSDATE-(INTERVAL '1' HOUR) FROM DUAL
UNION ALL
SELECT '-1일', SYSDATE-(INTERVAL '1' DAY) FROM DUAL
UNION ALL
SELECT '-1개월', SYSDATE-(INTERVAL '1' MONTH) FROM DUAL;

실무에서 많이 쓰인다고 한다 잘 알아두도록 하자.

참고

https://www.youtube.com/watch?v=uGoxhq9jZeA&list=PLKaW9UT2TL3Lpqrh_lJ8PHyHpR7NgdrPP&index=7 

 

728x90
728x90

Listener 정보

기본 포트 1521을 사용한다.

Listener 기본 옵션

lsnrctl start 
lsnrctl stop
lsnrctl reload
lsnrctl status

reload는 재시작, status는 상태 정보를 볼 때 많이 사용한다.

더 많은 옵션을 보고 싶을 때는 아래의 명령어로 확인할 수 있다.

lsnrctl help

오라클과 리스너가 등록되는데 시간이 좀 걸린다. 꿀 팁으로 sqlplus에서 아래의 명령어를 입력하면 바로 등록이 된다.

alter system register;
728x90
728x90

sqlplus sysdba 계정으로 로그인

sqlplus / as sysdba
sqlplus /nolog
sys / as sysdba

오라클 시작 단계

startup nomount
select status from v$instance;

nomount는 파라미터 파일 오라클에서는 sp 파일이라 부르는데 이걸 읽어서 오라클 메모리로 올리는 단계이다.

alter database mount;

mount는 오라클의 컨트롤 파일을 이용해 물리적인 파일들을 연결하는 단계이다.

alter database open;

오라클 시작

startup
startup force

force는 빠른 속도로 shutdown abort를 하고 한 번에 startup까지 가능하다. 사고가 터졌을 때 많이 사용하는 명령어이다.

오라클 종료

shutdown [normal]

normal은 DB에 접속된 세션이 종료될 때까지 대기하고 진행 중인 트렌젝션이 있다면 끝날 때까지 기다린다.

shutdown transactional

transactional DB에 접속된 세션을 종료하고 진행중인 트렌젝션이 있다면 끝날 때까지 기다린다.

normal과 transactional의 차이는 normal은 세션이 종료될 때까지 대기하고 transactional은 접속된 세션을 종료시킨다.

shutdown abort

데이터베이스를 강제로 종료시킨다.

shutdown immediate

가장 많이 사용하는 명령어이다. 디비에 연결된 세션, 트렌젝션을 모두 종료한다.

728x90
728x90

ARCHIVE란?

아카이브는 오라클 디비의 데이터가 저장되는 스토리지의 물리적인 디스크가 깨지거나 고장 나는 문제가 발생했을 때 디비 전체 백업이 되어있다면 내가 원하는 시간으로 복구할 수 있는 걸 의미한다. 중요 시스템이라면 아카이브 로그가 꼭 필요하다. 리두 로그가 스위치 할 때 아카이브 로그 모드로 운영한다면 아카이브 로그가 파일 형태로 만들어지고 저장된다.

ARCHIVE Mode

ARCHIVELOG Mode

: B2C, OLTP

NOARCHIVELOG Mode

: B2B, OLAP, DW, 개발 DB

아카이브 로그 모드는 대용량의 빠른 스토리지가 필요하고 추가로 백업 서버가 있어야 운영하기 수월하다.

ARCHIVE 관리

1일 2일 3일 4일 5일 6일 7일
23G 21G 15G 19G 80G 100G 10G

평균 약 38G여서 50G로 만들어야지라고 생각하면 큰일난다. 최대 크기의 20 ~ 30%로 설정한다. 약 120G ~ 130G

아카이브 로그 모드에서 생성된 아카이브 로그 파일은 하루가 지나면 백업 서버를 사용해서 아카이브 로그 백업 관리를 하는 게 가장 좋다.

ARCHIVELOG 파라미터

log_archive_dest는 아카이브 로그 파일이 저장되는 위치이고

log_archive_format는 아카이브 로그 파일의 이름을 설정할 수 있다.

fast_start_mttr_target는 데이터베이스의 인스턴스를 복구할 때 소유되는 시간을 제어할 수 있다. Default 값은 0이고 보통 300초로 설정한다.

파라미터 파일(spfile) 백업

cd /opt/oracle/oradata/dbconfig/XE
cp spfileXE.ora spfileXE.ora_20221118

-- 예전에 만들 백업 파라미터는 backup_parameter 폴더(디렉터리)로 이동
mv spfileXE.ora_20221118 backup_parameter

spfileXE.ora 파일은 중요한 파일이므로 작업 전에 꼭 백업을 해놓고 작업을 해야한다.

Archivelog 디렉터리 생성

cd /
mkdir /ARC_STR
chown oracle.dba /ARC_STR

Archive Log 파라미터 변경

ALTER SYSTEM SET log_archive_dest='/ARC_STR' SCOPE=SPFILE;
ALTER SYSTEM SET log_archive_format='ARCH_STR_%r_%t_%s.ARC' SCOPE=SPFILE;
ALTER SYSTEM SET FAST_START_MTTR_TARGET=300 SCOPE=SPFILE;

/ARC_STR 경로에 ARCH_STR_%r_%t_%s.ARC으로 파일을 저장한다. 또한 FAST_START_MTTR_TARGET 300으로 변경한다.

Archivelog Mode 변경

-- 현재 Archivelog Mode 확인
archive log list;

shutdown immediate; 
startup mount; 
select status from v$instance;
alter database archivelog; 
alter database open;
select status from v$instance;
archive log list;

show parameter log_archive_dest
show parameter log_archive_format
show parameter FAST_START_MTTR_TARGET

-- Redo(리두) 스위치로 아카이브 로그 파일 생성
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

Linux Shell을 이용한 Archivelog File 자동 삭제 스크립트

cd /home/oracle
mkdir /home/oracle/oraclelog
cd /home/oracle/scripts

vi rman_del_arch.sh
#!/bin/bash
export ORACLE_HOME=/oracle/app/oracle/product/19.0.0.0/db_1
export ORACLE_SID=STR
export PATH=$ORACLE_HOME/bin:$PATH
export DATE=`date +%Y%m%d`
export HOSTNAME=`hostname`

rman log=/home/oracle/oraclelog/${HOSTNAME}_del_arch_${DATE}.log << EOF
connect target /
DELETE noprompt ARCHIVELOG ALL COMPLETED BEFORE 'sysdate -1';
CROSSCHECK ARCHIVELOG ALL;
DELETE EXPIRED ARCHIVELOG ALL;
exit
EOF

-- shell 스크립트 권한 변경
chmod 755 rman_del_arch.sh

--crontab 추가
crontab -e
00 05 * * * /home/oracle/scripts/rman_del_arch.sh

crontab에 등록한다. 매일매일 새벽 5시가 되면 저 Shell이 실행된다.

NOArchivelog Mode 변경

shutdown immediate; 
startup mount; 
select status from v$instance;
alter database noarchivelog; 
alter database open;
select status from v$instance;

참고

https://www.youtube.com/watch?v=DpjiQhd5kNg&list=PLKaW9UT2TL3Lpqrh_lJ8PHyHpR7NgdrPP&index=6 

 

728x90
728x90

REDO란?

리두는 DB에 변경되는 모든 이력을 저장, 서버가 다운되었을 때 복구할 수 있는 파일, DB 복구, 인스턴스 복구, Fast Commit(데이터 블록을 기록하는 방식이 랜덤이 아니라 어펜드 방식을 사용하기 때문에 빠르게 커밋한다.)

REDO 파일 위치

/oracle/app/oracle/oradata/DB이름

내 로컬 경로

/opt/oracle/oradata/XE

REDO 관리

리두 로그 파일은 최소 두개가 필요하고 오라클 기본 설치하면 3개의 리두 로그 파일이 생성된다. 리두 로그 파일은 redo01.log, redo02.log, redo03.log 스위치 하면서 재사용한다. 이걸 Round-Robin 방식이라고 한다. 디비 백그라운드 프로세스인 LGWR가 리두에 저장되는 시점은 대표적으로 4가지가 있다.

  1. 3초에 한번
  2. 리두 로그 버퍼의 3분의 1이 되었거나 1MB가 넘었을 때
  3. 사용자에 의한 커밋 또는 롤백을 수행했을 때
  4. DBWR, LGWR에게 쓰기를 요청했을 때

디비의 트렌젝션이 많고 데이터 변경량도 많을 때 리두 로그 사이즈가 너무 작으면 CPU 사용량이 증가하고 DBWR, ARCn의 사용량이 증가한다. 리두 로그 사이즈를 적절하게 적용하면 CPU 사용량이 감소하고 디스크 I/O 향상된다. 오라클이 권고하는 리두 로그의 스위치는 20분에 한번 정도 발생하는 것이고 업계에서는 보통 10분에서 20분 사이에 한번 발생하는 것으로 추천한다.

REDO 추가

ALTER DATABASE ADD LOGFILE GROUP 4
(
'/파일위치/REDO4_1.LOG',
'/파일위치/REDO4_1.LOG'
) SIZE XXMB;

같은 그룹의 여러개의 리두 로그를 만든다면 물리적으로 서로 다른 디스크에 저장하는 것을 권고한다. 그래야 한쪽 디스크에 문제가 생겨도 안전하게 복원할 수 있다. 사이즈는 디비를 분석해서 규모가 있다면 1GB나 그 이상 10분에서 20분 사이에 발생하는지를 판단해서 사이즈 조정을 계속한다.

REDO 삭제

ALTER DATABASE DROP LOGFILE GROUP 1;

REDO 상태 확인

SELECT      
      A.GROUP#
    , A.STATUS
    , B.MEMBER
    , A.BYTES/1024/1024 AS "SIZE(MB)"
FROM 
      V$LOG A
    , V$LOGFILE B
WHERE A.GROUP# = B.GROUP#
ORDER BY 1;

리두 로그 그룹 삭제할 때 제일 중요한건 리두 로그 상태가 INACTIVE 상태 이어야 한다. 그냥 삭제하면 큰일 난다.

REDO LOG 변경 정보 전체 조회

SELECT
    TO_CHAR(FIRST_TIME,'YYYY/MM/DD HH24'), 
    COUNT(*)
FROM V$LOG_HISTORY
GROUP BY TO_CHAR(FIRST_TIME,'YYYY/MM/DD HH24')
ORDER BY 1;

REDO LOG 변경 정보 시간, 분 단위로 분석

-- 2022/11/13 ~ 2022/11/18 기간 조회
-- 추가로 일자를 변경하려면 TO_DATE(년월일)을 바꿔주세요.
-- 예) 2022년 7월 20일 부터 2022년 7월 21일 조회
--       WHERE FIRST_TIME >= TO_DATE('20221113') 
--       AND   FIRST_TIME  <   TO_DATE('20221118') 
SELECT
    TO_CHAR(FIRST_TIME,'HH24:MI'), 
    COUNT(*)
FROM V$LOG_HISTORY
WHERE FIRST_TIME >= TO_DATE('20221113')
AND   FIRST_TIME <  TO_DATE('20221118')
GROUP BY TO_CHAR(FIRST_TIME,'HH24:MI')
ORDER BY 1;

최근 10일 동안 REDO LOG 변경 정보 조회

SELECT
    DECODE(TO_CHAR(FIRST_TIME,'HH24'),NULL,'TOTAL',TO_CHAR(FIRST_TIME,'HH24')) AS "REDO_TIME",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE)-10 AND FIRST_TIME < TRUNC(SYSDATE) -9 THEN 1 ELSE 0 END) AS "TODAY-10",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -9 AND FIRST_TIME < TRUNC(SYSDATE) -8 THEN 1 ELSE 0 END) AS "TODAY-9",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -8 AND FIRST_TIME < TRUNC(SYSDATE) -7 THEN 1 ELSE 0 END) AS "TODAY-8",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -7 AND FIRST_TIME < TRUNC(SYSDATE) -6 THEN 1 ELSE 0 END) AS "TODAY-7",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -6 AND FIRST_TIME < TRUNC(SYSDATE) -5 THEN 1 ELSE 0 END) AS "TODAY-6",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -5 AND FIRST_TIME < TRUNC(SYSDATE) -4 THEN 1 ELSE 0 END) AS "TODAY-5",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -4 AND FIRST_TIME < TRUNC(SYSDATE) -3 THEN 1 ELSE 0 END) AS "TODAY-4",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -3 AND FIRST_TIME < TRUNC(SYSDATE) -2 THEN 1 ELSE 0 END) AS "TODAY-3",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -2 AND FIRST_TIME < TRUNC(SYSDATE) -1 THEN 1 ELSE 0 END) AS "TODAY-2",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE) -1 AND FIRST_TIME < TRUNC(SYSDATE) -0 THEN 1 ELSE 0 END) AS "TODAY-1",
    SUM(CASE WHEN FIRST_TIME >= TRUNC(SYSDATE)    AND FIRST_TIME < TRUNC(SYSDATE) +1 THEN 1 ELSE 0 END) AS "TODAY",
    SUM(DECODE(TO_CHAR(FIRST_TIME,'HH24'),NULL,0,1)) AS "SUM"
FROM V$LOG_HISTORY
WHERE FIRST_TIME >= TRUNC(SYSDATE) - 10
GROUP BY ROLLUP(TO_CHAR(FIRST_TIME,'HH24'))
ORDER BY 1;

디스크 사용량을 보는 명령어

df -h

REDO 그룹 4 추가

ALTER DATABASE 
ADD LOGFILE GROUP 4 
(
 '/opt/oracle/oradata/XE/REDO4_1.LOG',
 '/opt/oracle/oradata/XE/REDO4_2.LOG'
) SIZE 500M;

리두 로그를 만들 때 소문자가 아닌 대문자로 만드는 이유는 SqlPlus에서 drop으로 삭제해도 실제 파일은 남아있기 때문에 소문자 대문자를 구분해서 혹시 모를 사고를 방지하기 위해서이다.

초기 설정된 REDO 로그 삭제

-- (REDO 로그 스위치하면서 INACTIVE 상태에서 DROP 명령어 실행)
alter system switch logfile

ALTER DATABASE DROP LOGFILE GROUP 1;
ALTER DATABASE DROP LOGFILE GROUP 2;
ALTER DATABASE DROP LOGFILE GROUP 3;

REDO 로그 파일 삭제

/***************************************************************************
  REDO 로그 파일 삭제
   초기 설정된 REDO 로그 그룹 1,2,3 삭제
   리눅스에서 작업한다. (oracle 계정 확인)
***************************************************************************/

cd /opt/oracle/oradata/DB이름
cd $ORACLE_BASE/oradata/DB이름

rm /opt/oracle/oradata/XE/redo01.log
rm /opt/oracle/oradata/XE/redo02.log
rm /opt/oracle/oradata/XE/redo03.log

참고

https://www.youtube.com/watch?v=LmeAv9B_y5I&list=PLKaW9UT2TL3Lpqrh_lJ8PHyHpR7NgdrPP&index=5 

 

728x90

+ Recent posts