windows 에서는 oracle 이 thread 방식으로 구동되기 때문에  작업관리자 등으로 process 를 살펴볼려고 해도 ORACLE.EXE 하나만 보여서 정확한 정보

 

를 파악할수 없는  경우가 많다. 떠 있으면 그냥 아 살아있네 하는 정도.?

 

services.msc 를 실행하여 개별 서비스 상태를 살펴볼수도 있지만 간혹 맛탱이가 가 있는 경우가 있어서 믿음이 가지 않는다.

 

유닉스의 ps -ef |grep ora_ 처럼 비스무리하게  process 를 자세하게 살펴볼수 있는데 윈도우즈의 sc 명령어를 활용하는 방법이다.

 

1. C:\Windows\System32>sc query state= all | findstr SERVICE_NAME | findstr Oracle


SERVICE_NAME: OracleDBConsoleorcl
SERVICE_NAME: OracleJobSchedulerORCL
SERVICE_NAME: OracleJobSchedulerXXX
SERVICE_NAME: OracleMTSRecoveryService
SERVICE_NAME: OracleOraDb11g_home1ClrAgent
SERVICE_NAME: OracleOraDb11g_home1TNSListener
SERVICE_NAME: OracleOraDb11g_home2ClrAgent
SERVICE_NAME: OracleOraDb11g_home2TNSListener
SERVICE_NAME: OracleServiceORCL
SERVICE_NAME: OracleServiceXXX
SERVICE_NAME: OracleVssWriterORCL
SERVICE_NAME: OracleVssWriterXXX

 

2. C:\Windows\System32>sc query OracleServiceORCL

 

SERVICE_NAME: OracleServiceORCL
        종류               : 10  WIN32_OWN_PROCESS
        상태              : 1  STOPPED
        WIN32_EXIT_CODE    : 1077  (0x435)
        SERVICE_EXIT_CODE  : 0  (0x0)
        검사점         : 0x0
        WAIT_HINT          : 0x0

 

3. C:\Windows\System32>sc qc OracleServiceORCL


[SC] QueryServiceConfig 성공

SERVICE_NAME: OracleServiceORCL
        종류               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 3   DEMAND_START
        ERROR_CONTROL      : 1   NORMAL
        BINARY_PATH_NAME   : f:\app\oracle\product\11.2.0\dbhome\bin\ORACLE.EXE ORCL
        LOAD_ORDER_GROUP   :
        태그                : 0
        DISPLAY_NAME       : OracleServiceORCL
        종속성       :
        SERVICE_START_NAME : LocalSystem

Posted by pat98

12c Real-Time SQL Monitoring 조회

 

dbms_sql_monitor package 이용

 

(전제조건 : Tuning Pack 사용이 가능하여야 함)

 

- REAL TIME SQL 조회

 

set trimspool on
set trim on
set pagesize 0
set linesize 32767
set long 1000000
set longchunksize 1000000
spool sqlmon_active.html
select dbms_sql_monitor.report_sql_monitor(type=>'active')
from dual;
spool off

 

- 특정 SQL_ID 로 조회

 

set trimspool on
set trim on
set pagesize 0
set linesize 32767
set long 1000000
set longchunksize 1000000
spool sqlmon_active.html
select dbms_sql_monitor.report_sql_monitor(
sql_id=>' 1n482vfrxw014', type=>'active')
from dual;
spool off

Posted by pat98

 

RAC 11.2.0.4 에서 12.1.0.2 로 수동 업그레이드 후 이상증상 발견..

 

database 가 수동으로 startup 시에는 잘 올라가나 resource 확인시에는 Instance shutdown 으로 인지 못함..

 

현재 환경을 확인하기 위해 명령어 치면 아래와 같은 메세지..

 

[RAC1]oracle@rac1:/home/oracle# srvctl config database -d RAC


PRCD-1229 : An attempt to access configuration of database RAC was rejected because its version 11.2.0.4.0 differs from the program version 12.1.0.2.0. Instead run the program from /u01/app/oracle/product/11.2.0.4/dbhome_1.

 

헐..확인 명령어 자체가 안 먹다니...짜증 유발...구글신 호출 !!

 

 

ocrdump 를 수행해 보거나,

 

crsctl stat res -p 로 ora.rac.db 의 환경변수를 확인해 보면 아직 ORACLE_HOME 이 ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1 로

OLD_HOME 을 가리키고 있음.

 

Solution :

----------------------------------------------------------------------------------------------------------------------------

srvctl upgrade database -d RAC -o /u01/app/oracle/product/12.1.0.2/dbhome_1

 

해당명령어로 ORACLE_HOME 을 upgrade 후 해결..

 

Posted by pat98

보통 11g 이전 버전의 클라이언트에서 12c 붙으려고 하면 해당 에러를 볼수 있다 한다.

 

 

ORA-28040: No matching authentication protocol error
ORA-03134: Connections to this server version are no longer supported error.

ORA-1017

 

기존에 있던 SQLNET.ALLOWED_LOGON_VERSION 값은 12c 에서 쓰지 않음.

 

설정 예)

 

1. Single 경우 $ORACLE_HOME/network/admin/sqlnet.ora 편집

   RAC 일 경우 $GI_HOME/network/admin/sqlnet.ora 편집


  테스트 해보니 RAC 환경인 경우에도  $ORACLE_HOME/network/admin/sqlnet.ora 를 편집해 주어야 함.


===================================================================================================
SQLNET.ALLOWED_LOGON_VERSION_SERVER=10

SQLNET.ALLOWED_LOGON_VERSION_CLIENT=10
===================================================================================================

 

2. listener 재시작 후 접속 확인

 

 

여기서 값은 사용하는 버전별로 8,9,10,11,12,12a(12.1.0.2 이상) authentication protocol 을 줄수 있다.

 

SQLNET.ALLOWED_LOGON_VERSION_CLIENT 은 해당 서버가 dblink 등을 사용하여 다른 서버에 붙을 때 사용한다.

 

default 값은 11임.

Posted by pat98

 

             - ASM 디스크의 상태 확인 / 설명

 

               SQL>select group_number as "GRP#", name, mount_status as "MOUNT", header_status as "HEADER", mode_status as "MODE", state, free_mb from v$asm_disk where header_status='MEMBER' order by group_number, name;

 

1) MOUNT_STATUS: GROUP MOUNT에 관련된 인스턴스별 디스크의 상태 정보

 

⊙  MISSING:  ASM 메타데이터에는 디스크가 ASM diskgroup의 일부로 표기되어 있으나, 실제로는 스토리지 시스템 내에 표기된 이름의 디스크가 존재 하지 않는 상태

⊙  CLOSED: 스토리지상에 디스크는 존재하나 ASM에서 디스크로의 ACCESS가 불가한 상태

⊙  OPENED: 스토리지상에 디스크가 존재하고 ASM에서 디스크로의 ACCESS 되고 있는 상태로 현재 데이터베이스 인스턴스가 사용중인 DISKGROUP에 속한 디스크

⊙  CACHED: 스토리지상에 디스크가 존재하고 ASM에서 ACCESS 되고 있는 상태로, 마운트된 DISKGROUP에 속한 디스크

⊙  IGNORED: 시스템상에 디스크가 존재하나, ASM으로부터 무시되고 있는 상태

  CLOSING: 종료중인 디스크

 

2) HEADER_STATUS: DISCOVERY에 의해 보여지는 인스턴스별 디스크의 상태 정보

 

  UNKNOWN: ASM 디스크 헤더가 읽혀진 적이 없음

⊙  CANDIDATE: 디스크가 아직 DISKGROUP의 멤버가 아니며, ALTER DISKGROUP 문으로 DISKGROUP에 추가될 수 있음

  INCOMPATIBLE: 디스크 헤더의 버전이 ASM 소프트웨어 버전과 호환되지 않음

  PROVISIONED: 디스크가 아직 DISKGROUP의 멤버가 아니며, ALTER DISKGROUP 문으로 DISKGROUP에 추가될 수 있음. CANDIDATE 상태와는 다르며, 관리자가 ASM에 적합한 디스크로 만들기 위해 플랫폼에 기반한 특정 액션이 가해짐

  MEMBER: 현재 존재하는 DISKGROUP의 일원임

  FORMER: 디스크가 한때 DISKGROUP의 멤버였다가, 해당 DISKGROUP에서 완전히 DROP

  CONFLICT: 충돌이 발생해 ASM 디스크에 마운트 되지 못함

  FOREIGN: ASM이 아닌 다른 오라클 제품에 의해 생성된 데이터를 포함하고 있는 디스크. ( datafile, logfile, ocr disk)

 

3) MODE: 디스크에 어떤 종류의 I/O 요청이 허용되고 있는가에 대한 전반적인 상태

 

 ONLINE: 디스크가 ONLINE 이며 정상적으로 동작함

OFFLINE: 디스크가 OFFLINE이며 정상적으로 ACCESS 되지 않음

 

4) STATE: DISKGROUP에 대한 DISK의 전반적인 상태

 

  UNKNOWN: 알려지지 않음 (대게 아직 mount 되지 않은 경우의 디스크)

  NORMAL: 디스크가 온라인이고 정상적으로 동작함

  ADDING: 디스크가 디스크그룹에 추가됨

  DROPPING: 디스크가 수동으로 OFFLINE이 되었고, 데이터를 DISKGROUP내의 다른 디스크로 옮기기 위해 rebalance가 실행 될 것이다.

  HUNG: DROP될 디스크로부터 데이터를 relocate할 공간이 불충분하여 drop 오퍼레이션을 수행할 수 없는 상태

  FORCING: 디스크가 데이터를 offload 하지 않고 DISKGROUP으로부터 제거되고 있는 상태. 데이터는 redundant 카피로부터 recover 된다

  DROPPED: 디스크가 DISKGROUP으로부터 완전하게 제거된 상태

 ⊙

Posted by pat98

Install of Clusterware fails while running root.sh on OL7 - ohasd fails to start (문서 ID 1959008.1)

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

 

linux 7 에서 ohasd process 기동실패로 GI 설치 실패시, (Oracle linux 뿐만 아니라 RHEL 도 해당됨)

 

rootcrs.log/roothas.log 에 ohasd/crsd start 실패 메세지 나타남.

 

(Bug 18370031  - RC SCRIPTS (/ETC/RC.D/RC.* , /ETC/INIT.D/* ) ON OL7 FOR CLUSTERWARE)

- 11.2.0.4 or 12.1.0.1 해당됨

 


방법은 2가지임. 


A) Patch 18370031 미리 적용


B) 수동으로 ohasd service 생성


아직 systemd daeomon 을 제어할 방법이 없기 때문에 root.sh 실행전 해줘야 하는 작업임.


수동으로 생성방법

 

1. root 유저로

 

cd /etc/systemd/system/
touch ohasd.service


2. ohas.service 화일 편집

 

[Unit]
Description=Oracle High Availability Services
After=syslog.target

[Service]
ExecStart=/etc/init.d/init.ohasd run >/dev/null 2>&1 Type=simple
Restart=always

[Install]
WantedBy=multi-user.target

 

3. root 유저로

 

systemctl daemon-reload
systemctl enable ohasd.service
systemctl start ohasd.service


(원본 MOS 문서에 오타가 있으므로 수정할것)

 

4. root.sh 실행 끝.

Posted by pat98

확인사항..

 

12c 에서도 Database 인스턴스 버전과 ASM 인스턴스 버전이 다름.

Database 는 SE, ASM 은 EE 를 사용

 

- Database 인스턴스 버전

[oracle:/home/oracle]#ss

SQL*Plus: Release 12.1.0.2.0 Production on Wed Apr 27 09:46:07 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

 

 

- ASM 인스턴스 버전

[oracle:/home/oracle]#. oraenv
ORACLE_SID = [ORA01] ? +ASM1
The Oracle base has been changed from /oracle to /oragrid/gridbase
[oracle:/home/oracle]#sqlplus "/as sysasm"

SQL*Plus: Release 12.1.0.2.0 Production on Wed Apr 27 09:43:47 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

Posted by pat98

8i, 9i, 10g, 11g 오라클 column 갯수의 제한은  1000개임.

 

https://docs.oracle.com/cd/B28359_01/server.111/b28320/limits003.htm#i288032

 

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

Logical Database Limits

 

Item Type of Limit Limit Value
GROUP BY clause Maximum length The GROUP BY expression and all of the nondistinct aggregate functions (for example, SUM, AVG) must fit within a single database block.
Indexes Maximum per table Unlimited
Indexes Total size of indexed column 75% of the database block size minus some overhead
Columns Per table 1000 columns maximum
Columns Per index (or clustered index) 32 columns maximum
Columns Per bitmapped index 30 columns maximum
Constraints Maximum per column Unlimited
Subqueries Maximum levels of subqueries in a SQL statement Unlimited in the FROM clause of the top-level query

255 subqueries in the WHERE clause

Partitions Maximum length of linear partitioning key 4 KB - overhead
Partitions Maximum number of columns in partition key 16 columns
Partitions Maximum number of partitions allowed per table or index 1024K - 1
Rows Maximum number per table Unlimited
Stored Packages Maximum size PL/SQL and Developer/2000 may have limits on the size of stored procedures they can call. The limits typically range from 2000 to 3000 lines of code.

See Also: Your PL/SQL or Developer/2000 documentation for details

Trigger Cascade Limit Maximum value Operating system-dependent, typically 32
Users and Roles Maximum 2,147,483,638
Tables Maximum per clustered table 32 tables
Tables Maximum per database Unlimited

Posted by pat98


AWR 성능 data를 내 서버에서 export 해서 타 서버로 import 방법

-------------------------------------------------------------

1. pump로 사전에 미리 디렉토리 생성

 

SQL> create or replace directory AWR_PUMP as '/home/oracle';

 

2. awrext.sql 실행 (SYS로 접속해야 함)

 

SQL> @?/rdbms/admin/awrextr.sql

 

 - database id를 입력
 - display될 snapshot id의 기간을 일단위로 입력
 - export받을 begin snapshot id와 end snapshot id 입력
 - export받는 데이터 파일이 생성될 oracle directory명 입력
 - export받을 file명(기본으로 dmp 확장자가 붙으니 file명만 입력)

 

3. FTP로 dmp 화일을 pump에서 지정했던 디렉토리로 전송해서 sourec 에서 import

 

4. awrload.sql 실행

 

SQL>@?/rdbms/admin/awrload.sql

 

이때 export 받은 DBID와 동일한 장비에서는 import 가 되지 않으므로 다른 DBID 를 지정해 주어야 한다.
(다른 서버에서 해야된다.자기 장비에서는 안된다는 말씀,해보면 에러난다.)

 

5. 다른 DBID를 지정하기 위해서 awrinput.sql 수행

 

SQL>@?/rdbms/admin/awrinput.sql


SQL>@?/rdbms/admin/awrload.sql

 

 - export 파일을 복사한 Oracle directory명 입력
 - export file명 입력 (입력받은 file명에 기본으로 dmp 확장자가 붙으니 확장자를 제외한 file명만 입력)
 - import할 동안 사용될 임시 user명을 입력 (이 user는 import가 완료되면 자동으로 삭제되니 기본값을 사용)
 - 임시 user가 사용할 default tablespace 입력(변경 가능하나 기본값을 사용)
 - 임시 user가 사용할 임시 tablespace 입력(변경 가능하나 기본값을 사용)

 import가 진행되며 Data는 AWR 테이블인 WRH$ 테이블에 import 데이터를 migration 하게된다. 이후 import시 사용한 임시 user는 cascade 옵션으로 자동 삭제된다.

 

6. 새롭게 적재된 Data 를 간단히 조회만 해서 보고자 할 경우

 

SQL> select dbid,instance_number as inst_id, db_name, instance_name as inst_name from dba_hist_database_instance;

 

SQL> select * dba_hist_snapshot where dbid='2200200976' -- 보고싶은 snapshot id 범위 확인

 

아래 쿼리로 AWR report 생성

 

SPOOL AWR_TEST.HTML
SET LINESIZE 200 PAGES 0
select output from table (dbms_workload_repository.awr_report_html(
'2200200976',   -- DBID
'1',            -- Instance #
'14',           -- begin Snapshut ID
'16',           -- End Snapshut ID
0 )             -- Report option (0: Default / 8: Including ADDM Information (as a Advice)

);

 

Posted by pat98

- Trigger 를 이용해서 특정 인스턴스만 접속 못하게 하는 방법

---------------------------------------------------------------------

2개의 서비스가 있다고 가정하자..

 

TEST1, TEST2

---------------------------------------------------------------------

sqlplus / as sysdba

 create or replace trigger ban_test1 after logon on database
  declare
  v_sid number;
  v_isdba varchar2(10);
  v_SERVICE_NAME varchar2(48);
  begin
  execute immediate
  'select distinct sid from sys.v_$mystat' into v_sid;
  execute immediate
  'select SERVICE_NAME from sys.v_$session where sid = :b1' into v_SERVICE_NAME using v_sid;
  select sys_context('userenv','ISDBA') into v_isdba from dual;
  if upper(V_SERVICE_NAME) = 'TEST1' and v_isdba = 'FALSE' then
  raise_application_error
  (-20001,'TEST1 Access users restricted',true);
  end if;
  end;
  /
 

---------------------------------------------------------------------

sqlplus scott/tiger@TEST1
ERROR:
ORA-00604: error occurred at recursive SQL level 1
ORA-20001: TEST1 Access users restricted
ORA-06512: at line 12

--------------------------------------------------------------------- 

sqlplus scott/tiger@test2

works fine.

Posted by pat98

01-25 18:32
Flag Counter
Yesterday
Today
Total

글 보관함

최근에 올라온 글

달력

 « |  » 2025.1
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

최근에 달린 댓글