갑자기 디비 접속이 안 된다고 난리이다.

처음보는 에러이고 리스너 문제도 아니고 디비가 꺼진 것도 아니다.

검색 결과 아카이브모드로 오라클이 운영 중일 때 생기는 에러!! (일반적 설치시 비아카이브 모드)

SYS계정으로 쿼리를 날려보자 만약 sys로 접속이 된다면.. 

select * from v$recovery_file_dest


 
Name : 백업파일 위치 
space_limit : 백업저장공간 (기본 4G)
space_used : 사용공간

중요한 것은 사용공간이 백업저장공간을 가득 채울 때 나타난다. 

용량 추가 백업저장공간(SPACE_LIMIT)를 10기가로 늘려준다.

alter system set db_recovery_file_dest_size = 10G;


용량추가로 잠시 살아 날 수 있다.^^

만약 SYS계정으로 접속이 불가능하다면...

검색해보면 RMAN을 이용해서 지우라고 하는데 사용법이 엄청 낯설다.. 이게 무슨 개소리야. . 

RMAN으로 접속 오라클 계정으로 접속하자. 

>su - oracle
>rman target /

expired 된 파일들을 지우는 명령 

RMAN>DELETE OBSOLETE;

하지만 난 만료된 파일이 없다.... 쩝.. 

백업 파일의 위치에 가서 지난 날짜에 대해서 백업파일을 지워주면 된다.

위치 ~~ /flash_recovery_area/~~/archivelog  밑에 날짜별로 쌓여있다.

지난 날짜를 지우고 접속이 되는지 확인해 보았다.

접속이 안된다면 아마도 물리적공간을 지웠지만 논리적으로 남아 있어 접속 불가...

RMAN 사용법을 잘 모른다. 하지만 RMAN으로 접속

RMAN>list copy;  
백업 파일 리스트가 나온다.

RMAN>DELETE NOPROMPT EXPIRED COPY; 
물리적으로 존재하지 않는 논리적 파일들을 정리해준다. 

다시 접속하고 용량을 확인해보자 항상 위기 탈출만.. ㅋㅋㅋㅋ

 




 
테이블과컬럼 
    
SELECT A.TABLE_NAME
           , A.COLUMN_NAME
           , A.DATA_TYPE
           , A.DATA_LENGTH
           , A.DATA_DEFAULT
           , A.NULLABLE
           , B.COMMENTS
FROM ALL_TAB_COLUMNS A
LEFT OUTER JOIN ALL_COL_COMMENTS B
ON A.TABLE_NAME = B.TABLE_NAME
AND A.COLUMN_NAME = B.COLUMN_NAME
WHERE A.OWNER = 'SWING';

인덱스보기               
              
 SELECT a.table_name, a.index_name, uniqueness, column_name
  FROM all_indexes a, all_ind_columns b
 WHERE a.table_name = b.table_name
   AND a.index_name = b.index_name
   AND a.OWNER = 'SWING'
ORDER BY a.table_name, b.column_position;

PK보기

SELECT a.table_name, a.constraint_name, b.column_name
  FROM all_constraints a, ALL_CONS_COLUMNS b
 WHERE a.constraint_name = b.constraint_name
   AND a.constraint_type = 'P'
  AND a.OWNER = 'SWING'



sys 계정으로 들어가서 느린 쿼리를 골라 낸다.

SELECT * FROM(
SELECT ROUND(ELAPSED_TIME/EXECUTIONS/1000000,3) AS ELAPSED_TIME
          , LAST_ACTIVE_TIME
          , SQL_TEXT
  FROM V$SQL
WHERE parsing_schema_name = 'SWING'
  AND LAST_ACTIVE_TIME >= TO_DATE('20110706', 'YYYYMMDD')
)
 WHERE ELAPSED_TIME > 5
 order by LAST_ACTIVE_TIME desc;

전체적으로 통계를 보고 느린 쿼리만 집중 튜닝한다. 아마 운영 중에나 가능할 것 같다.

SELECT
           COUNT(*)  AS SQL개수
          , COUNT(DISTINCT SUBSTR(SQL_TEXT, 1 , 100)) AS SQL유니크개수
          , SUM(EXECUTIONS)  AS 수행횟수
          , ROUND(AVG(ELAPSED_TIME/EXECUTIONS/ 1000000), 2) AS 평균수행시간
          , COUNT(CASE WHEN ELAPSED_TIME/EXECUTIONS/1000000 >= 10 THEN 1 END) AS 악성10초이상쿼리
          , ROUND(MAX(ELAPSED_TIME/EXECUTIONS/1000000), 2) AS 최대소요시간
  FROM V$SQL
  WHERE PARSING_SCHEMA_NAME = 'SWING'
  AND LAST_ACTIVE_TIME >= TO_DATE('20110706', 'YYYYMMDD')





>su - oracle
>sqlplus '/as sysdba'
SQL> startup

SQL>shutdown immediate


lsnrctl start 리스너명(명이 있을때).
lsnrctl stop 리스너명(명이 있을때).



+ Recent posts