+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

본인 혼자 공부하는 거니.... 태클은 말아주세요~~~ㅠ.ㅠ


*** Oracle Study Local VM Info
 - ver : Oracle 11.2.0.1
 - IP : 10.1.1.100
 - Port : 1521
 - sys / test
 - system / manager
 
 
oracle]$ sqlplus '/as sysdba'
SQL> startup
SQL> shutdown immediate

oracle]$ lsnrctl start
oracle]$ lsnrctl stop 

*** sys / system 계정 접속 불가시 확인 방법
oracle]$ sqlplus /nolog
SQL> conn sys/vmadmin as sysdba;


*** SQL 터미널 세팅
set pages 0
set long 40000
set line 500

*** 현재의 커널 매개변수
# ipcs -l

 

*** Oracle TableSpace 정보확인
Orange > 해당서버 접속 > TableSpace 탭 부붙에서 상세 정보 확인 가능

 

*** Ora-01017 에러시 확인 및 조치
** Lisner 정보와 "tnsname.ora" 파일과 비교 확인

$ lsnrctl status 로 확인되는 lisner 파일 정보 <-> Client 상의 '$ORACLE_HOME/network/admin/tnsname.ora' 파일의 정보

 

** Lisner Logfile Size (4기가 이상인 경우 발생가능)
$ lsnrctl status 명령어로 로그파일 경로 확인

** 오라클 환경에서 대소문자 구분을 없애주어야 로그인이 쉬워짐(11g 부터 대소문자 구분이 되고 있음)
SQL> show parameter sec_case;                                             ## 해당 명령어로 확인시 'TRUE' 값이면 대소문자 구분
SQL> alter system set sec_case_sensitive_logon=false;                 ## 해당 명령어로 변경

 

** Orange V4 이하에서 불가
-- ​오라클 11g는 비밀번호 대소문자를 구분하게 설정되어 있으나 오렌지 프로그램에서는 비밀번호를 모두 대문자로 변환한 뒤 로그인 시도한다.

 

 

--======================================================================================
--#. 
--======================================================================================

--======================================================================================
--#. 현재 접속한 DB 호스트 정보와 Client 정보 확인
--======================================================================================
SELECT
    UTL_INADDR.GET_HOST_ADDRESS AS DB_HOST_IP,
    UTL_INADDR.GET_HOST_NAME AS DB_NAME,
    sys_context('USERENV', 'IP_ADDRESS') AS CLIENT_IP,
    sys_context('USERENV', 'SESSION_USER') AS DB_USER,
    sys_context('USERENV', 'TERMINAL') AS TERMINAL,
    sys_context('USERENV', 'HOST') AS CLIENT_PCNAME,
    sys_context('USERENV', 'OS_USER') AS CLIENT_USERNAME,
    sys_context('USERENV', 'isDBA') ADMIN_MODE
FROM DUAL;

--======================================================================================
--#. 현재 열린 SESSION 정보확인
--======================================================================================
SELECT * FROM v$resource_limit WHERE resource_name in ('processes', 'sessions', 'transactions');


--======================================================================================
--#. 현재 접속한 사용자의 자신 권한 확인
--======================================================================================
select * from session_privs;


--======================================================================================
--#. Oracle Archive Mode Check
--======================================================================================
SELECT ARCHIVER FROM v$instance;

 

 

--======================================================================================
--#. Oracle 사용자 관련
--======================================================================================
--## ORACLE 전체 사용자 조회
SELECT USERNAME, PASSWORD FROM DBA_USERS;
SELECT * FROM ALL_USERS;

SELECT * FROM ALL_USERS
WHERE USERNAME = 'eaimgr'
;

SELECT * FROM DBA_USERS WHERE USERNAME = 'cello';


--## ORACLE 사용자 비밀번호 변경
ALTER USER <&USER> IDENTIFIED BY <&PASSWORD>;

ALTER USER SYSTEM IDENTIFIED BY MANAGER;
ALTER USER SYSTEM IDENTIFIED BY vmadmin;

--## ORACLE 사용자 비밀번호 변경 후 확인
CONN <&USER>/<&PASSWORD>

--## ORACLE 사용자 Blocked 확인
SELECT username,account_status,lock_date FROM dba_users;

--## ORACLE 사용자 Blocked 상태 해제
ALTER USER <&USER> ACCOUNT UNLOCK;

--## ORACLE 사용자 Blocked 상태로 전환
ALTER USER <&USER> ACCOUNT LOCK;

--## ORACLE User 생성 (스키마 생성)
CREATE USER <&USER>
IDENTIFIED by <&PASSWORD>
default TABLESAPCE <&TBS_Name>;

CREATE USER EAIMGR IDENTIFIED BY EAIMGR;

CREATE USER cello IDENTIFIED BY cello;

--## 사용자 생성 후 최소 아래의 권한이 필요.
GRANT CREATE SESSION TO <&USER>;
GRANT CREATE table TO <&USER>;
GRANT UNLIMITED TABLESPACE TO <&USER>;
--## 만약 추가 요청이 오는 경우 아래와 같이 필요한 권한을 추가한다.
GRANT CREATE SEQUENCE TO <&USER>;
GRANT CREATE PROCEDURE TO <&USER>;
GRANT CREATE VIEW TO <&USER>;

 

 

--======================================================================================
--#. Oracle Table 관련
--======================================================================================
--## USER 의 테이블 정보 확인 (파티션 타입)
SELECT
    A.SEGMENT_NAME,
SUM(A.BYTES)/1024 AS SIZE_KB,
    SUM(A.BYTES)/1024/1024 AS SIZE_MB,
SUM(A.BYTES)/1024/1024/1024 AS SIZE_GB
FROM DBA_SEGMENTS A, DBA_TABLES B
WHERE A.SEGMENT_NAME = B.TABLE_NAME
AND A.SEGMENT_TYPE IN ('TABLE','TABLE PARTITION')
AND A.OWNER = '&USER'
GROUP BY A.SEGMENT_NAME
;

 

*** Oracle Partition Table 관련
** 전체 파티션 테이블 조회
SELECT * FROM ALL_TAB_PARTITIONS;

SELECT * FROM ALL_TAB_PARTITIONS
WHERE TABLE_NAME = 'TBL_TFP_PLAN'
;

SELECT * FROM CELLOPL.TBL_TPP_PLAN
PARTITION (PFNL20190701P001A)
;

** 전체 파티션 테이블의 키 칼럼 조회
SELECT * FROM ALL_PART_KEY_COLUMNS

 

--## Oracle Table 용량확인 

select owner,segment_name,segment_type,sum(bytes)/1024/1024 as MB
from dba_segments
where owner='사용자'
and segment_name='테이블명'
GROUP BY owner,segment_name,segment_type;


select 
        table_name, 
        num_rows,
        num_rows * avg_row_len, 
        round((num_rows * avg_row_len/1024),2) "SIZE(Kb)", 
        round((num_rows * avg_row_len/1024/1024),2) "SIZE(Mb)", 
        round((num_rows * avg_row_len/1024/1024/1024),2) "SIZE(Gb)",
        last_analyzed
from user_tables

where table_name like 'TS%'
;

 

--======================================================================================
--#. Oracle TableSpace 관련
--======================================================================================
--## TableSpace 전체 조회 
SELECT * FROM DBA_TABLESPACES;

--## TableSpace 전체에서 특정 테이블스페이스명 조회 
SELECT * FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME = '&TBS_Name';

--## Table_Name and TableSpace_Name 을 비교해서 볼때
SELECT * FROM DBA_TABLES
WHERE TABLESPACE_NAME='&TBS_Name';

--## TableSpace 별 용량조회
SELECT SUBSTR (a.tablespace_name, 1, 30) tablespace,
ROUND (SUM (a.total1) / 1024 / 1024, 1) "Total_MB",
ROUND (SUM (a.total1) / 1024 / 1024, 1) - ROUND (SUM (a.sum1) / 1024 / 1024, 1) "Used_MB",
ROUND (SUM (a.sum1) / 1024 / 1024, 1) "Free_MB",
ROUND (
(ROUND (SUM (a.total1) / 1024 / 1024, 1) - ROUND (SUM (a.sum1) / 1024 / 1024, 1))
            / ROUND (SUM (a.total1) / 1024 / 1024, 1) * 100, 2
) "Used%"
FROM (
SELECT tablespace_name,
0 total1,
SUM (bytes) sum1,
MAX (bytes) MAXB,
COUNT (bytes) cnt
FROM dba_free_space
GROUP BY tablespace_name
UNION
SELECT tablespace_name,
SUM (bytes) total1,
0,
0,
0
FROM dba_data_files
GROUP BY tablespace_name) a
GROUP BY a.tablespace_name
ORDER BY tablespace;


--## TABLESPACE_NAME 별로 용량조회
SELECT  SUBSTR(A.TABLESPACE_NAME,1,30) TABLESPACE,
              ROUND(SUM(A.TOTAL1)/1024/1024,1) "TOTALMB",
              ROUND(SUM(A.TOTAL1)/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024,1) "USEDMB",
              ROUND(SUM(A.SUM1)/1024/1024,1) "FREEMB",
              ROUND((ROUND(SUM(A.TOTAL1)/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024,1))

              /ROUND(SUM(A.TOTAL1)/1024/1024,1)*100,2) "USED%"
  FROM
             (SELECT  TABLESPACE_NAME,0 TOTAL1,SUM(BYTES) SUM1,MAX(BYTES) MAXB,

                            COUNT(BYTES) CNT
                 FROM  DBA_FREE_SPACE
               GROUP  BY TABLESPACE_NAME
              UNION
              SELECT  TABLESPACE_NAME,SUM(BYTES) TOTAL1,0,0,0
                 FROM  DBA_DATA_FILES
               GROUP  BY TABLESPACE_NAME) A
GROUP BY A.TABLESPACE_NAME
ORDER BY TABLESPACE;


--## 전체 합처리
SELECT  ROUND(SUM(A.TOTAL1)/1024/1024/1024,1) "TOTALGB",
              ROUND(SUM(A.TOTAL1)/1024/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024/1024,1) "USEDGB",
              ROUND(SUM(A.SUM1)/1024/1024/1024,1) "FREEGB",
              ROUND((ROUND(SUM(A.TOTAL1)/1024/1024,1)-ROUND(SUM(A.SUM1)/1024/1024,1))

              /ROUND(SUM(A.TOTAL1)/1024/1024,1)*100,2) "USED%"
  FROM
             (SELECT  TABLESPACE_NAME,0 TOTAL1,SUM(BYTES) SUM1,MAX(BYTES) MAXB,

                            COUNT(BYTES) CNT
                 FROM  DBA_FREE_SPACE
               GROUP BY TABLESPACE_NAME
              UNION
              SELECT  TABLESPACE_NAME,SUM(BYTES) TOTAL1,0,0,0
                 FROM  DBA_DATA_FILES
               GROUP BY TABLESPACE_NAME) A



--### 80% 이상 테이블 스페이스 정보 출력하기
COLUMN Tablespace        format a25 heading 'Tablespace Name'
COLUMN autoextensible         format a11              heading 'AutoExtend'
COLUMN files_in_tablespace    format 999             heading 'Files'
COLUMN total_tablespace_space format 99999999 heading 'TotalSpace'
COLUMN total_used_space       format 99999999 heading 'UsedSpace'
COLUMN total_tablespace_free_space format 99999999 heading 'FreeSpace'
COLUMN total_used_pct              format 9999      heading '%Used'
COLUMN total_free_pct              format 9999     heading '%Free'
COLUMN max_size_of_tablespace      format 99999999 heading 'ExtendUpto'
COLUMN total_auto_used_pct         format 999.99      heading 'Max%Used'
COLUMN total_auto_free_pct         format 999.99      heading 'Max%Free'
WITH tbs_auto AS
     (SELECT DISTINCT tablespace_name, autoextensible
                 FROM dba_data_files
                WHERE autoextensible = 'YES'),
     files AS
     (SELECT   tablespace_name, COUNT (*) tbs_files,
               SUM (BYTES/1024/1024) total_tbs_bytes
          FROM dba_data_files
      GROUP BY tablespace_name),
     fragments AS
     (SELECT   tablespace_name, COUNT (*) tbs_fragments,
               SUM (BYTES)/1024/1024 total_tbs_free_bytes,
               MAX (BYTES)/1024/1024 max_free_chunk_bytes
          FROM dba_free_space
      GROUP BY tablespace_name),
     AUTOEXTEND AS
     (SELECT   tablespace_name, SUM (size_to_grow) total_growth_tbs
          FROM (SELECT   tablespace_name, SUM (maxbytes)/1024/1024 size_to_grow
                    FROM dba_data_files
                   WHERE autoextensible = 'YES'
                GROUP BY tablespace_name
                UNION
                SELECT   tablespace_name, SUM (BYTES)/1024/1024 size_to_grow
                    FROM dba_data_files
                   WHERE autoextensible = 'NO'
                GROUP BY tablespace_name)
      GROUP BY tablespace_name)
SELECT c.instance_name,a.tablespace_name Tablespace,
       CASE tbs_auto.autoextensible
          WHEN 'YES'
             THEN 'YES'
          ELSE 'NO'
       END AS autoextensible,
       files.tbs_files files_in_tablespace,
       files.total_tbs_bytes total_tablespace_space,
       (files.total_tbs_bytes - fragments.total_tbs_free_bytes
       ) total_used_space,
       fragments.total_tbs_free_bytes total_tablespace_free_space,
       round((  (  (files.total_tbs_bytes - fragments.total_tbs_free_bytes)
           / files.total_tbs_bytes
          )
        * 100
       )) total_used_pct,
       round(((fragments.total_tbs_free_bytes / files.total_tbs_bytes) * 100
       )) total_free_pct
  FROM dba_tablespaces a,v$instance c , files, fragments, AUTOEXTEND, tbs_auto
WHERE a.tablespace_name = files.tablespace_name
   AND a.tablespace_name = fragments.tablespace_name
   AND a.tablespace_name = AUTOEXTEND.tablespace_name
   AND a.tablespace_name = tbs_auto.tablespace_name(+)
and (((files.total_tbs_bytes - fragments.total_tbs_free_bytes)/ files.total_tbs_bytes))* 100 > 80
order by total_free_pct;

 

--## Oracle TableSpace 생성 (신규 생성시)
CREATE TABLESPACE <&TABLESPACE_NAME>
DATAFILE '<&데이타파일명>' SIZE 10G AUTOEXTEND OFF
LOGGING
DEFAULT STORAGE ( 
                  MAXEXTENTS  UNLIMITED
                )
EXTENT MANAGEMENT DICTIONARY
BLOCKSIZE 8K
FLASHBACK ON

 

 

--## Oracle TableSpace 기존 테이블스페이스에 추가
 SQL> ALTER TABLESPACE &TBS_Name ADD DATAFILE '&데이타파일명' SIZE XXXm;

--<< ex >>
-- ALTER TABLESPACE UNDOTBS1 ADD DATAFILE '/sysdata/undotbs02.dbf' SIZE 30G;

 

 

--## Oracle TableSpace 기존 테이블스페이스에서 데이터 파일 삭제
 SQL> ALTER TABLESPACE &TBS_Name DROP DATAFILE '&데이타파일명';

--<< ex >> 
-- ALTER TABLESPACE UNDOTBS1 DROP DATAFILE '/sysdata/undotbs02.dbf';

 

--## Oracle 테이블 스페이스 및 데이타 파일별 용량확인 
SELECT    A.TABLESPACE_NAME "테이블스페이스명",
          A.FILE_NAME "파일경로",
            A.BYTES/1024/1024                              "총크기(MB)",
            (A.BYTES - B.FREE)/1024/1024                   "사용공간(MB)",
            B.FREE/1024/1024                               "여유 공간(MB)",
            TO_CHAR( (B.FREE / A.BYTES * 100) , '999.99')||'%' "여유공간",
          A.ONLINE_STATUS
      FROM
       (
         SELECT FILE_ID,
                TABLESPACE_NAME,
                FILE_NAME,
                SUBSTR(FILE_NAME,1,200) FILE_NM,
                SUM(BYTES) BYTES,
                ONLINE_STATUS
           FROM DBA_DATA_FILES
         GROUP BY FILE_ID,TABLESPACE_NAME,FILE_NAME,SUBSTR(FILE_NAME,1,200),ONLINE_STATUS
       ) A,
       (
         SELECT TABLESPACE_NAME,
                FILE_ID,
                SUM(NVL(BYTES,0)) FREE
           FROM DBA_FREE_SPACE
        GROUP BY TABLESPACE_NAME,FILE_ID
       ) B
      WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME
         AND A.FILE_ID = B.FILE_ID;


--## Oracle 테이블 스페이스별 용량확인
select   substr(a.tablespace_name,1,30) tablespace,
         round(sum(a.total1)/1024/1024,1) "TotalMB",
         round(sum(a.total1)/1024/1024,1)-round(sum(a.sum1)/1024/1024,1) "UsedMB",
         round(sum(a.sum1)/1024/1024,1) "FreeMB",
         round((round(sum(a.total1)/1024/1024,1)-round(sum(a.sum1)/1024/1024,1))/round(sum(a.total1)/1024/1024,1)*100,2) "Used%"
from
         (select   tablespace_name,0 total1,sum(bytes) sum1,max(bytes) MAXB,count(bytes) cnt
          from     dba_free_space
          group by tablespace_name
          union
          select   tablespace_name,sum(bytes) total1,0,0,0
          from     dba_data_files
          group by tablespace_name) a
group by a.tablespace_name
order by tablespace;

 

 

--======================================================================================
--#. Oracle DB Link
--======================================================================================
--## Oracle DB Link 정보확인
-- Orange > 해당서버 접속 > DB Link 탭 부붙에서 상세 정보 확인 가능

SELECT * FROM DBA_DB_LINKS;

SELECT * FROM DBA_DB_LINKS WHERE DB_LINK = 'DL_CELLOTOVMTRUST';

--## Oracle DB-Link 사용 가능 여부 확인
-- SQL> SELECT COUNT(*) FROM TABLE_NAME@DB_LINK;

SELECT COUNT(*) FROM tab @DL_VMTRUST_ERP;

 

 

--## Oracle DB Link 생성
--/* SQL>
[[ 공용방식 ]]
CREATE PUBLIC DATABASE LINK DL_VMAMTOVMPROD
 CONNECT TO apps
 IDENTIFIED BY apps
 USING 'VMPROD';

[[ 일반방식 ]]
CREATE DATABASE LINK <LINK_NAME>
CONNECT TO <연결하고자 하는 user> IDENTIFIED BY <연결하고자 하는 user password>
USING '<TNS정의명>';

 

[[ 공용방식 + NETWORK Type ]]
CREATE PUBLIC DATABASE LINK <LINK_NAME>
 CONNECT TO <연결하고자 하는 user>
 IDENTIFIED BY <연결하고자 하는 user password>
  USING '(DESCRIPTION =  
                (ADDRESS_LIST =  
                  (ADDRESS = (PROTOCOL = TCP)(HOST=127.0.0.1)(PORT = 1521))  
                )  
                (CONNECT_DATA =  
                  (SERVICE_NAME = ORCL)  
                )  
              )'
;

*/--

 


--## Oracle DB Link 확인
-- SQL> SELECT * FROM <테이블이름>@<NEW_TEST_LINK>

SELECT * FROM All_USERS@DL_VMSCMTETOVMES


--## Oracle DB Link 확인 (DB id 값과 이름 출력)
-- SQL> select DBID, NAME from v$database@<NEW_TEST_LINK>

select DBID, NAME from v$database@DL_CELLOTOMES;

 

--## Oracle DB Link 삭제
-- SQL> DROP DATABASE LINK <DB LINK NAME>

 

DROP DATABASE LINK DL_VMAMTOVMPROD;

 

 


--======================================================================================
--#. SYSAUX 테이블 스페이스 관리
--======================================================================================
*** 어떤 OWNER 가 얼마만큼 크기를 사용하는지 체크
SELECT occupant_name, space_usage_kbytes/1024 "Size_MB"
FROM v$sysaux_occupants
ORDER BY space_usage_kbytes;

*** SYSAUX tablespace에 어떤 segment가 가장 많은 공간을 차지하는지
SELECT owner, segment_name, segment_type, bytes/1024/1024 "Size_MB"
FROM dba_segments
WHERE tablespace_name = 'SYSAUX'
ORDER BY bytes DESC;


*** 통계정보를 보관하는 주기를 확인
SELECT dbms_stats.get_stats_history_retention from dual;

** 통계정보 보관주기 변경 ('( )'안에 원하는 날짜만큼 숫자를 입력)
SELECT dbms_stats.get_stats_history_retention(10); --10일로 보관주기 변경


--======================================================================================
--#. 트리거 조회하기
--======================================================================================

SELECT * FROM ALL_TRIGGERS;

 

 

-======================================================================================
--#. Oracle Lock
--======================================================================================
***

Oracle Lock 조회 (Kill 하기 위해 KILL_TASK 를 확인)
SELECT A.SID
     , A.SERIAL#
     , object_name
     , A.SID || ', ' || A.SERIAL# AS KILL_TASK
  FROM V$SESSION A
 INNER JOIN V$LOCK B
    ON A.SID = B.SID
 INNER JOIN DBA_OBJECTS C
    ON B.ID1 = C.OBJECT_ID
 WHERE B.TYPE  = 'TM'
 ;

 

*** Oracle Lock Session KILL
-- SQL> ALTER SYSTEM KILL SESSION '<KILL_TASK 번호>'

 

ALTER SYSTEM KILL SESSION '388, 223';

 

-====================================================================================== 
--#. Oracle DataPump 
--====================================================================================== 
*** 덤프 작업시 참조할 것
** 덤프작업시 모니터링
SELECT
A.OPNAME, /* Job 이름과 같음 */
A.TARGET_DESC, /* 작업의 종류 */
A.SOFAR, /* 현재 수행한 용량 // 단위:Mb */
A.TOTALWORK, /* 총 수행하여야 할 용량 // 단위:Mb */
(SOFAR/TOTALWORK*100) PER
FROM
v$SESSION_LONGOPS A
;

 

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*** Oracle 'Grant' 권한 조회
SELECT * FROM USER_TAB_PRIVS_MADE;   => 사용자가 부여한 권한
SELECT * FROM USER_TAB_PRIVS_RECD;   => 사용자에게 부여된 권한
select * from dba_sys_privs where grantee='CELLOPL'



+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*** Oracle 통계정보 갱신
-- 해당 스키마에 해당하는 테이블과 테이블 스페이스 조회
SELECT OWNER, TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES WHERE OWNER = '스키마명';

-- 해당 스키마에 해당하는 테이블의 통계정보 조회
SELECT TABLE_NAME, NUM_ROWS, CHAIN_CNT, BLOCKS, EMPTY_BLOCKS, AVG_SPACE, AVG_ROW_LEN FROM DBA_TABLES WHERE OWNER = '스키마명';

-- 해당 스키마에 해당하는 인덱스의 통계정보 조회
SELECT TABLE_NAME, INDEX_NAME, STATUS, NUM_ROWS, LEAF_BLOCKS, BLEVEL FROM DBA_INDEXES WHERE OWNER = '스키마명';

-- 테이블의 통계정보 갱신
EXEC DBMS_STATS.GATHER_TABLE_STATS('스키마명', '테이블명');

-- 스키마안의 모든 세그먼트에 대한 통계정보 갱신
EXEC DBMS_STATS.GATHER_SCHEMA_STATS('스키마명');

-- DBMS_STATS 패키지로 갱신되지 않는 테이블 통계 정보 갱신(쿼리 생성)
SELECT 'ANALYZE TABLE 스키마명.' || TABLE_NAME || ' COMPUTE STATISTICS;' FROM DBA_TABLES WHERE OWNER = '스키마명';

 

*** Oracle Archive log 사용량 확인(GV$ARCHIVED_LOG)
 + DB Version : Oracle 11.2.0.2
 + OS Version : AIX 6.1

 + Oracle Archive log 사용량 및 갯수 확인
  - DATE Format : YY/MM/DD (DY)
  - 시간 단위 분석 : (TO_CHAR(NEXT_TIME,'YY/MM/DD(DY) HH24')
  - 4Node RAC 기준으로 Script 작성
  - Archive log Size 확인(GB) : ROUND(SUM(DISTINCT BLOCKS*BLOCK_SIZE)/1024/1024/1024,2)
  - 최근 10일 전부터 분석 : NEXT_TIME >= TRUNC(SYSDATE) -10
  
SELECT
TO_CHAR(NEXT_TIME,'YY/MM/DD(DY) HH24') "NEXT_TIME"
, COUNT(DISTINCT NAME) "TOTAL_ARC_COUNT"
, ROUND(SUM(DISTINCT BLOCKS*BLOCK_SIZE)/1024/1024/1024,2) "TOTAL_SIZE_GB"
, SUM(CASE WHEN INST_ID = 1 AND THREAD# = 1 THEN 1 ELSE 0 END) "RAC1"
, SUM(CASE WHEN INST_ID = 2 AND THREAD# = 2 THEN 1 ELSE 0 END) "RAC2"
, SUM(CASE WHEN INST_ID = 3 AND THREAD# = 3 THEN 1 ELSE 0 END) "RAC3"
, SUM(CASE WHEN INST_ID = 4 AND THREAD# = 4 THEN 1 ELSE 0 END) "RAC4"
FROM GV$ARCHIVED_LOG
WHERE NEXT_TIME >= TRUNC(SYSDATE) -10
GROUP BY TO_CHAR(NEXT_TIME,'YY/MM/DD(DY) HH24')
ORDER BY 1;

 

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*** Oracle Backup 상태 확인
select * from v$backup;

*** Oracle Backup 상태 수정(END backup)
alter database end backup;

*** Oracle Log 관련 초기화
alter database open resetlogs;

*** Oracle 동작상태 확인
SELECT status FROM v$instance;

RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;

RECOVER DATABASE USING BACKUP CONTROLFILE;

AND

윈도우를 사용하다보면 검색이나 특정 사이트를 자주 방문하고 즐겨찾기로 등록하여 사용하는 사이트 등..

여러 사이트 주소가 캐시라는 이름하에 저장되어집니다.


다만, 사용중 해당 사이트의 IP 주소가 변경되어 접속이 안되는 경우가 가끔 있지요...

"페이지를 찾을 수 없습니다" 라는 요상한 형태로 출력되면서 말이죠 ....


이런 경우 DNS 캐시를 삭제하여 해결할 수 있는데요.. 아래의 방법을 따라 진행해보세요.


아래의 키보드 조합(Windows + R) 을 눌러 "실행" 대화창을 띄워주세요.

그러면 아래 스크린샷 처럼 실행 대화창이 출력됩니다. (Windows 버전별로 디자인은 조금 다를 수 있습니다.)


대화창에서 "cmd" 라고 입력하시면 아래와 같이 DOS 대화창이 출력되는데.. 'ipconfig /flushdns' 라고 입력해주세요.

 

위처럼 진행해주시고 나면 정상적으로 사이트가 이용되어지게 되는데.. 위처럼 진행 후에도 사이트가 접속이 안되면.....ㅠㅠ

그 사이트는 문제가 있다고 보시면 되겠습니다...(제 권한을 넘어서는 ㅋㅋ)


혹시라도 위 작업이 귀찮으시면 아래의 배치 파일을 다운로드 하시고 그냥 더블클릭하시면 되겠습니다;;; (귀차니즘을 배려한 >_<)

DNS Cache Quick Remove.bat


AND

x86osx.com 에서 헝겊냥이님이 제작, 북린님이 패치 완료한 버전.


패치완료시 바이오스 버전은 1.03.03 이며, 그래픽 프레임 버퍼 크기가 32M -> 64M 로 전환됨.


B0303_fb_64m.zip


바이오스 펌웨어 업그레이드시 사용할 프로그램은 아래것을 참조하세요.

AND

+++++++++++++++ PostgreSQL 설치하기 +++++++++++++++

※ 현재 글은 PostgreSQL 9.4 버전을 기준으로 작성되었습니다. 이용에 혼동이 없으시기 바랍니다.


1. 설치 소스가 있는 경우

 - 해당 설치 파일을 이용하여 RPM 또는 Tar 설치를 진행합니다.


2. 설치 소스가 없는 경우

* 아래 사이트에서 PostgreSQL 버전 및 Architec 별 정보를 검색 후 "pgdg-????.noarch.rpm" 파일을 다운

-- http://yum.postgresql.org/


* 다운로드한 "pgdg-????.noarch.rpm" 파일을 rpm 을 이용하여 설치하고난 뒤

-- # yum install 을 이용하여 postgresql 을 다운로드 가능함.



3. 버전별로 설치 방법이 조금 다르기 때문에 관련 버전별 정리합니다.


[CentOS 6.X 의 경우]

* 설치가 완료된 후 아래와 같이 해당 서비스를 활성화 시켜주어야 함.

-- # chkconfig --level 345 postgresql-9.4 on


* 서비스가 활성화 되고 나면 아래와 같이 DataBase 영역을 추가함.

-- # cd /usr/pgsql-9.4/bin/initdb /pgsql/data


* 추가한 DataBase 내 "pg_hba.conf, postgresql.conf" 파일을 수정하여 환경을 설정.


* 서비스 등록된 파일내 DataBase 영역을 수정하여야 정상동작하므로 아래와 같이 수정함.

-- # vi /etc/init.d/postgresql-9.4

==========================================================================================

#PGDATA=/var/lib/pgsql/9.4/data

PGDATA=/SOCPLUS/pgsql/data

==========================================================================================


* 모든 작업이 완료되고 나면 아래와 같이 서비스를 동작

-- # service postgresql-9.4 start || # /etc/rc.d/init.d/postgresql-9.4 start




[CentOS 7.X 의 경우]

* 설치가 완료된 후 아래와 같이 해당 서비스를 활성화 시켜주어야 함.

-- # systemctl enable postgresql-9.4


* 서비스가 활성화 되고 나면 아래와 같이 DataBase 영역을 추가함.

-- # cd /usr/pgsql-9.4/bin/initdb /pgsql/data


* 추가한 DataBase 내 "pg_hba.conf, postgresql.conf" 파일을 수정하여 환경을 설정.


* 서비스 등록된 파일내 DataBase 영역을 수정하여야 정상동작하므로 아래와 같이 수정함.

-- # vi /usr/lib/systemd/system/postgresql-9.4.service

==========================================================================================

# Location of database directory

#Environment=PGDATA=/var/lib/pgsql/9.4/data/

Environment=PGDATA=/pgsql/data

==========================================================================================


* 모든 작업이 완료되고 나면 아래와 같이 서비스를 동작

-- # systemctl start postgresql-9.4

'Databases > PostgreSQL' 카테고리의 다른 글

PostgreSQL 'root' 계정 초기화하기.  (0) 2014.06.20
AND

iSCSI설정하기

Linux/Tip & Tech 2016. 7. 11. 17:44

==================================================================================================

※ 해당 내용의 경우 VMware를 이용한 로컬 네트웍 상에서 작업을 하는 내용을 안내하여 드립니당~!

[ 시스템 설정을 위한 내용 ]

설치된 Base Windows  : Windows 7 Pro
설치된 CentOS Server  : CentOS 6.8
설치된 VMware Program : VM workstation 11.0.0

==================================================================================================


-- iSCSI Target 설정 --


1. iSCSI 를 이용하기 위해 패키지 설치

  - 패키지명 : scsi-target-utils


2. 패키지 설치 완료 후 서비스 자동화 및 데몬 실행

  - # chkconfig --list | grep tgt

  - # chkconfig --level 345 tgtd on

  - # /etc/rc.d/init.d/tgtd restart


3. iSCSI target 으로 설정하기

CMD : tgtadm

Info : --lld

       --mode

       --op

       --tid

       --targetname


 a. iSCSI 설정 확인하기

  - # tgtadm --lld iscsi --mode target --op show


 b. 신규 Target 설정

  - # tgtadm --lld iscsi --mode target --op new --tid 1 --targetname nas0.net2free.net:disk1


 c. 신규 Target 내 디스크(LUN) 할당

  - # tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 -b /dev/sda


 d. 신규 Target 내 권한 설정

  - # tgtadm --lld iscsi --mode target --op bind --tid 1 -I ALL       (전체 허용)

  - # tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address 10.1.1.0/24    (네트웍 대역폭 허용)





DDOS_Check_All.zip


AND

Apache Tomcat의 로그파일인 catalina.out 파일의 경우는 순환되는 설정이 없이 기동 후 삭제되지 않고

계속 기록만 되어지므로 용량이 계속 늘어나게 되고 검색이 어렵거나 늦어지는 경우도 발생하게 됩니다.


대표적인 오류 사항으로는 Tomcat 프로세스가 돌고 있는 상황에서 catalina.out 파일을 rm 삭제시

'df' 명령을 이용하여 파일시스템 사용량에서는 줄어들지 않는 사항이 발생한다.


해당 사항은 톰캣의 PID 를 'lsof' 로 확인시 (Deleted) 라는 항목으로 서비스 종료시 처리가 된다는 사항을

확인 할 수 있으며, 위와 같은 경우 '/dev/null' 을 이용한 Null Copy 를 진행하는 것을 권장합니다.



이러한 현상을 개선하기 위한 방법으로 편리하게 설정할 수 있는 방법을 2가지로 정리해보겠습니다.



1. Tomcat 설정파일(catalina.sh)을 수정하여 설정 - 'root' 권한 이용 불가능


 -> %CATALINA_HOME%bin/catalina.sh 수정 (두 항목 모두 수정할 것)

    => touch "$CATALINA_BASE"/logs/catalina.out 를 삭제 또는 주석 처리

    => "$CATALINA_BASE"/logs/catalina.out2>&1 & 를 다음과 같이 수정

        | /usr/sbin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d 86400 540 &

           =================================================

             * 86400     : 일단위로 로테이션(초단위 설정)

             * 540        : 영국 표준시와 한국시간과의 시간차

           =================================================




2. /etc/logrotate.d 디렉터리내 Tomcat 로그 주기 설정 - 'root 권한 이용 가능


 -> # cd /etc/logrotate.d

 -> # vi ./tomcat

================================================================

/var/local/tomcat/logs/catalina.out {    =>톰캣의 로그가 기록될 경로로 지정

 copytruncate # 백업본을 생성하면 원본의 내용을 지우는 형태

 daily # '일'단위 파일 생성

 rotate 30 # 보관주기는 30일 단위

 compress # 'rotate' 내 로그파일은 압축보관(gzip)

 missingok # 로그파일이 생성되지 않는 경우 오류처리 하지 않음

 notifempty # 로그로 기록할 내용이 없을때 신규로그파일 생성 않함

#size 100M # 로그파일의 용량제한

}

================================================================



추가적으로 파일 자체를 생성하지 않도록 강제적인 설정이 있으나 권장하지는 않는 방법이지만

디스크 용량이 너무 적은 경우이거나 개인 테스트 용도로 작업하실 사항이 있으시다면

아래와 같이 '/etc/profile' 내용에 첨가하여 설정도 가능합니다.


 -> # vi /etc/profile

================================================================

export CATALINA_OUT="/dev/null"

================================================================



AND

==================================================================================================

※ 해당 내용의 경우 VMware를 이용한 로컬 네트웍 상에서 작업을 하는 내용을 안내하여 드립니당~!

[ 시스템 설정을 위한 내용 ]

설치된 Base Windows  : Windows 7 Pro
설치된 CentOS Server  : CentOS 6.5
설치된 VMware Program : VM workstation 10.0.0

==================================================================================================

가상화 기반(VMware 와 같은) DHCP 환경의 리눅스 서버에서 자주 발생되는 현상으로

/etc/resolv.conf 파일을 수정하고 저장한뒤 서버 리부팅이나 network restart시

resolv.conf 파일의 내용이 초기화 되는 현상이 확인됩니다.


이 내용은 버그 및 오류가 아니라는 부분은 분명히 언급하고 지나가야 될 듯합니다.

/etc/resolv.conf 파일 상단에 보면 아래와 같은 주석 문구가 있는데 이 내용은


; generated by /sbin/dhclient-script


DHCP를 이용하여 IP를 자동으로 할당 받을 때 '/sbin/dhclient-script' 명령에 의해

/etc/resolv.conf 파일이 재생성되게 되어있다는 뜻으로 해석됩니다.


따라서 오류가 아니므로 그대로 사용하셔도 무방하나 /etc/resolv.conf 파일이 자주

재생성되면 귀찮아 질 수 있고, 실 운영서버에서는 치명적인 오류가 될 수 있으므로

이를 방지하기위해 /sbin/dhclient-script 파일 내용에서 'make_resolv_conf’함수를

호출하는 부분이나 함수부분을 찾아 주석 처리해주면 됩니다.


# vi /sbin/dhclient-script


     97번 행에서 정의된 'make_resolv_conf()' 함수 부분을 조정하셔도 되고

     아래와 같이 ip설정을 맞추기 위한 부분의 함수에서 'make_resolv_conf()' 함수 호출 부분을 주석처리 해주셔도 됩니다.


====================================================================================================================

    309 dhconfig() {

....

    464     if [ -n "${new_host_name}" ] && need_hostname; then

    465         hostname ${new_host_name}

    466     fi

    467

    468     #make_resolv_conf

    469

    470     if [ -n "${DHCP_TIME_OFFSET_SETS_TIMEZONE}" ] &&

    471        [[ "${DHCP_TIME_OFFSET_SETS_TIMEZONE}" = [yY1]* ]]; then

    472         if [ -n "${new_time_offset}" ]; then

    473             # DHCP option "time-offset" is requested by default and should be

    474             # handled.  The geographical zone abbreviation cannot be determined

    475             # from the GMT offset, but the $ZONEINFO/Etc/GMT$offset file can be

    476             # used - note: this disables DST.

    477             ((z=new_time_offset/3600))

    478             ((hoursWest=$(printf '%+d' $z)))


====================================================================================================================

    538 dh6config() {

    539     case "${reason}" in

    540         BOUND6)

    541             if [ -z "${new_ip6_address}" ] &&

    542                [ -z "${new_ip6_prefixlen}" ]; then

    543                 exit_with_hooks 2

    544             fi

    545

    546             add_ipv6_addr_with_DAD

    547

    548             #make_resolv_conf

    549             ;;

    550

    551         RENEW6|REBIND6)

    552             if [ -n "${new_ip6_prefixlen}" ] &&

    553                [ -n "${new_ip6_address}" ] &&

    554                [  ! "${new_ip6_address}" = "${old_ip6_address}" ]; then

    555                 add_ipv6_addr_with_DAD

    556             fi

    557

    558             if [ ! "${new_dhcp6_name_servers}" = "${old_dhcp6_name_servers}" ] ||

    559                [ ! "${new_dhcp6_domain_search}" = "${old_dhcp6_domain_search}" ]; then

    560                 make_resolv_conf

    561             fi

    562             ;;

    563



AND

버전 1.3.8 입니다.


OpenCapture_v1.3.8.zip


AND

포터블 버전으로 사용하기 편합니당

 

CCleaner.zip


AND

이유없이 디스크 유틸이 튀거나 '/var' 경로가 Full 이 자주 되는 경우, 디스크 성능에 영향을 받게 되는 경우 등

Cron 에 의한 스케쥴이 상당 수 영향을 미칠 수 있으므로 꼭 확인하세요.


리눅스 설치 시 기본적으로 등록되는 두 가지 크론 스케쥴이 있을 수 있으니 꼭 확인하시길!!

Default Cron Jobs (CentOS 6.X 버전의 경우)
OS 설정에 따라 다르겠지만, CentOS를 설치하게 되면 다음과 같이 배치 작업이 등록이 되어 있습니다.

$ cat /etc/anacrontab

# /etc/anacrontab: configuration file for anacron

.. 중 략 ..

#period in days delay in minutes job-identifier command 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly $ cat /etc/crontab

.. 중 략 ..

# For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed

위처럼 'anacrontab, crontab' 에 의해서 시스템에 기본 적용된 스크립트들에 의한 스케쥴링 작업이 진행되게 되며,

이에 따라 '/etc/cron.XXXXX' 의 경로에 있는 내용이 동작하게 됩니다.


해당 스케쥴에 따라서 기본 스케쥴링으로 아래의 두 항목이 동작하게 되는데, 이 때 데이터베이스의 트랜잭션 로그

혹은 데이터 파일 쪽 디스크에 영향을 줄 수 있습니다.

/etc/cron.XXXXX/mlocate.cron /etc/cron.XXXXX/makewhatis.cron

1. mlocate
- 정의 : 파일 검색을 빠르게 검색하기 위해, 파일에 대한 색인 정보를 모아 데이터베이스를 만드는 역할
mloate.cron에 포함된 내용은 아래와 같습니다.

$ cat /etc/cron.daily/mlocate.cron
 
#!/bin/sh
nodevs=$(< /proc/filesystems awk '$1 == "nodev" && $2 != "zfs" { print $2 }')
renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"

또한 이와 관련된 설정은 /etc/updatedb.conf 에 위치합니다.

$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS = "yes"
PRUNEFS = "9p afs anon_inodefs auto autofs ...... sysfs tmpfs ubifs udf usbfs"
PRUNENAMES = ".git .hg .svn"
PRUNEPATHS = "/afs /media /net /sfs /tmp ...... /var/tmp"

각 항목을 확인해보면

 * PRUNE_BIND_MOUNTS : '0, no, 1, yes' 중에서 사용가능하며 0=no, 1=yes 의 의미이기도함. 마운트된 경로를 탐색할 것인지 설정

 * PRUNEFS : 'updatedb' 가 탐색하지 않을 파일시스템 타입을 정의

 * PRUNENAMES : 'updatedb' 가 탐색하지 않을 파일명(확장자로도 이해할 수 있음)을 정의

 * PRUNEPATHS : 'updatedb' 가 탐색하지 않을 경로명을 정의


2. makewhatis
- 정의 : man에 관련된 내용을 신규 생성 또는 업데이트하며, '/var/cache/man/whatis' 파일이 없거나 '/usr/sbin/makewhatis' 파일이
 더 최신이라면 전체를 새로작성하며, 그외의 경우 증분으로 작성합니다.

## 일단위 크론잡
$ cat /etc/cron.daily/makewhatis.cron
#!/bin/bash
LOCKFILE=/var/lock/makewhatis.lock
.. 중략 ..
if [ ! -f /var/cache/man/whatis ] ||
   find /usr/sbin/makewhatis -newer /var/cache/man/whatis |grep -q .
then
        makewhatis -w
else
        makewhatis -U -w
fi
exit 0
'LOCKFILE' 항목에 따라 man 셋팅파일이 정의됨


AND