메뉴 건너뛰기

Korea Oracle User Group

Install/Configuration

ORA-32000 : Spfile 수정이 불가능.

우뽕 2020.01.23 15:40 조회 수 : 328

Install, patch, 트러블 슈팅 으로 구분 등으로 분류 하겠습니다.

 

ORA-32000: write to SPFILE requested but SPFILE is not modifiable

--> SPFILE 수정 불가능 하면서 완전 당황 그 차체를 만들어 봅니다.

 

이런경우가 발생 할 수 있을까 ??

네 있네요..

특히 RAC 인경우...  패치와 연관 있었습니다.

 

 

ORA-32000 not able to modify the rdbms spfile which is there in ASM (문서 ID 1498307.1)

CRS-6706: Oracle Clusterware Release patch level ('nnn') does not match Software patch level ('mmm') (문서 ID 1639285.1)

--> 첨부파일 참고

 

About Oracle ASM Rolling Patches: 

https://docs.oracle.com/database/121/OSTMG/GUID-CF124D9F-FF28-4B71-B179-640F1258E98A.htm#OSTMG95330

--> 12cR1 이상 부터 보이는듯 합니다.

 

 

실질적으로 ASM DISK GROUP 확인 결과 SPFILE 존재 함..

바로 의심을 해야 할 부분및 점검 내용은 아래와 같습니다.

 

 발생될수 있는 이슈 : 1) spfile 수정 불가 , 2) ASM DISKGROUP 추가 삭제시 오류발생 소지 있음.   

 발생 원인 : 1) 패치가 잘못 되어 롤백을 했으나 제대로 롤백이 되지 않을때 발새 될 수 있음.

          2) 양쪽 노드 패치가 다른 경우 발생 할수 있습니다. ( 즉 RAC 인 경우 : 1번노드는  4월 CPU, 7월 CPU 모두 적용 , 2번 노드는 7월달만 적용 된경우 )

    -> 전 실질적으로 이 경우 문제 발생 후 조치 완료.

 

 

명령어를 나열 해 봅니다.

 

RAC 기준입니다.

 

1) 패치 점검  

opatch lsinventory | grep Patch

 

맨아래에...

 

 

 

Patch level status of Cluster nodes :

 

 Patching Level                  Nodes

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

 3696455212                       db1  ---->> 서로 다른 패치 레벨

 3705364692                       db2  ---->> 서로 다른 패치 레벨

 

 ---> 위의 패치 레벨은 반드시 동일 하게 되어야 하는데 번호가 다릅니다.

 

/-- **

 정상인 경우는 아래와 같습니다. 

 

 Patch level status of Cluster nodes :

 

 Patching Level                  Nodes

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

 3705364692                       db1,db2

 

 

-- **/

 

2)SYS_CONTEXT 확인 방법 

 

SELECT SYS_CONTEXT('SYS_CLUSTER_PROPERTIES', 'CLUSTER_STATE') FROM DUAL; 

 

SYS_CONTEXT('SYS_CLUSTER_PROPERTIES','CLUSTER_STATE')

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

In Rolling Patch

-->>> In Rolling Patch 상태 인것을 확인 함. (정상 : Normal )

 

 

3) 노드 패치 점검

 

[+ASM1]root@db1:/oracle/12.1.0/grid/crs/install> kfod op=patches

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

List of Patches

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

19769480

20299023

20831110

21359755

21436941

21948354

22291127

23054246

23054327

23054341

[+ASM1]root@db1:/oracle/12.1.0/grid/crs/install> kfod op=patchlvl

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

Current Patch level

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

3696455212  --> *****

[+ASM1]root@db1:/oracle/12.1.0/grid/crs/install> 

 

 

[+ASM2]root@db2:/oracle/12.1.0/grid/crs/install> kfod op=patches

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

List of Patches

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

19769480

20299023

20831110

21359755

21436941

21948354

22291127

22502518 -> *******

22502555 -> *******

23054246

23054327

23054341

[+ASM2]root@db2:/oracle/12.1.0/grid/crs/install> kfod op=patchlvl

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

Current Patch level

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

3705364692  --> *****

[+ASM2]root@db2:/oracle/12.1.0/grid/crs/install> 

 

 

4) 패치 이력 조회

 

[+ASM1]grid@db1:/oracle/12.1.0/grid/cfgtoollogs/opatch> pwd

/oracle/12.1.0/grid/cfgtoollogs/opatch

[+ASM1]grid@db1:/oracle/12.1.0/grid/cfgtoollogs/opatch> 

 

[root@db1 opatch]# egrep "Patching Level" *.log

 

~~~ 쭉 펼쳐 지면서 뭔가 나오겠네요.... ( 안 지웠으면.. )

 

-- history 조회도 해 봅니다. 

egrep "apply " opatch_history.txt

 

 

 

조치방법

 

1안 ) - 조치 불가 했음

 

/u01/grid/app/product/12/crs/install] ./rootcrs.sh -patch

 

양쪽 노드 모두 동일 하게 수행 하면 내렸다 올림.

 

확인 방법.

 

crsctl query crs activeversion -f 

 

 

crsctl stop rollingpatch

--> NORMAL 아닌 경우 즉 (=ROLLING PATCH )적용 여부 검토

 

grid db 상에서 확인.

 

SELECT SYS_CONTEXT('SYS_CLUSTER_PROPERTIES', 'CLUSTER_STATE') FROM DUAL;

 

--> Normal 이 아닌경우 즉(=In Rolling Patch) 적용 여부 검토 

 

ALTER SYSTEM STOP ROLLING PATCH;

 

 

2안 ) - 조치 완료 후 정상 

 

위에서  보시면 1번 NODE가 최신 레벨이 아닌것으로 판단이 되어서 무조건 1번도느들 맟추는 작업을 진행 해야 합니다.

전 노드 패치 이력등을 꼼꼼히 살펴야 합니다. 

 

필요시 패치롤백 도 진행 해야 하기도 합니다.

예로 ) 2번노드에서 4월달 패치 완료 -> 7월달 패치 완료 순으로 되어 있다면..

1번노드에서는 4월달 패치가 없고 7월달 패치만 존재 하게 되면 

7월달 패치 롤백 후 4월달 패치 적용 -> 7월달 패치 적용 순으로 하시면 됩니다.

 

 

정상적으로 처리 후 확인 방법은 아래와 같습니다.

[+ASM1]grid@db1:/oralog/pkg/160519> crsctl query crs activeversion -f

Oracle Clusterware active version on the cluster is [12.1.0.2.0]. The cluster upgrade state is [NORMAL]. The cluster active patch level is [3705364692].

[+ASM1]grid@db1:/oralog/pkg/160519> 

 

sqlplus /as sysdba

--

 

SQL> SELECT SYS_CONTEXT('SYS_CLUSTER_PROPERTIES', 'CLUSTER_STATE') FROM DUAL;

 

SYS_CONTEXT('SYS_CLUSTER_PROPERTIES','CLUSTER_STATE')

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

Normal

 

SQL> SELECT SYS_CONTEXT('SYS_CLUSTER_PROPERTIES', 'CURRENT_PATCHLVL') FROM DUAL;

 

SYS_CONTEXT('SYS_CLUSTER_PROPERTIES','CURRENT_PATCHLVL')

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

3705364692

 

SQL> 

 

 

 

근데 왜 이런 현상이 발생 되었을까요 ?

     1). 직접 패치 작업을 안 하고 누가 한것을 보기만 하고 점검 도 안 한 경우

     2)  패치 작업 중 실수로 특정 노드 작업을 빼 먹은 경우 

 

 

 

 

 

 

위로