วันจันทร์ที่ 29 เมษายน พ.ศ. 2556

อัพเกรด APEX 4.2.0 -> 4.2.2 ด้วย patch 16277995

วันนี้ได้อ่าน Oracle Application Express 4.2.2 now available ผมไม่แน่ใจว่าเพื่อนๆ ใช้ version ไหนกันแต่ถ้าเพื่อนๆ ต้องการใช้ APEX 4.2.2
- ถ้าใช้ APEX 4.2 หรือ 4.2.1 สามารถใช้ patch number 16277995 จาก support.oracle.com (ถ้าไม่มี user บน My Oracle Support ก็จบกัน... download APEX 4.2.2 เลยละกัน) 
- ถ้าใช้ APEX 4.1.1 หรือ ต่ำกว่านั้น  (including Oracle HTML DB release 1.5) ก็ต้อง download APEX 4.2.2
- ถ้าไม่เคยติดติดตั้งเลย ก็ download APEX 4.2.2
แต่ในบนความนี้ผมขอใช้ Patch: 16277995 ...Read!
SQL> select comp_id, version from dba_registry where comp_id='APEX';

COMP_ID                        VERSION
------------------------------ ------------------------------
APEX                           4.2.0.00.27
ผมใช้ Embed Gateway เลย stop มันสักหน่อย ต่อด้วยแบคอัพ APEX_040200 และ FLOWS_FILES

จากนั้นเรามาเริ่มกันเลยนะครับ :)
 $ ls -la p16277995_422_Generic.zip
-rw-r--r-- 1 oracle oinstall 73892800 Apr 29 17:43 p16277995_422_Generic.zip
$ unzip p16277995_422_Generic.zip
$ cd patch/
$ sqlplus /nolog

SQL*Plus: Release 11.2.0.3.0 Production on Mon Apr 29 18:00:21 2013

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

SQL> connect / as sysdba
Connected.
SQL> !ls -la apxpatch.sql
-rw-r--r-- 1 oracle oinstall 398 Feb 24 04:08 apxpatch.sql

SQL> @apxpatch.sql
.
.
.
...Database user "SYS", database schema "APEX_040200", user# "66" 18:38:49
...Compiled 0 out of 3001 objects considered, 0 failed compilation 18:38:51
...266 packages
...258 package bodies
...452 tables
...11 functions
...16 procedures
...3 sequences
...457 triggers
...1320 indexes
...208 views
...0 libraries
...6 types
...0 type bodies
...0 operators
...0 index types
...Begin key object existence check 18:38:51
...Completed key object existence check 18:38:51
...Setting DBMS Registry 18:38:51
...Setting DBMS Registry Complete 18:38:51
...Exiting validate 18:38:51

PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.

timing for: Complete Patch
Elapsed: 00:38:16.10

$ ls -l apxpatch.log
-rw-r--r-- 1 oracle oinstall 350361 Apr 29 18:39 apxpatch.log
เราสามารถตรวจสอบ error ได้ที่ไฟล์ apxpatch.log ต่อจากนั้นอัพเดท Images... เนื่องจากผมใช้  Embed Gateway เลยต้องใช้ apxldimg.sql script.
SQL> !ls apxldimg.sql
apxldimg.sql

SQL> @apxldimg.sql /tmp/patch
PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

. Loading images directory: /tmp/patch/images

Directory created.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

PL/SQL procedure successfully completed.

Commit complete.

Directory dropped.

timing for: Load Images
Elapsed: 00:05:25.74

และจากนั้นเช็คๆ และ start Embed Gateway.
SQL> select comp_id, version from dba_registry where comp_id='APEX';

COMP_ID                        VERSION
------------------------------ ------------------------------
APEX                           4.2.2.00.11

SQL> SELECT DBMS_XDB.GETHTTPPORT FROM DUAL;

GETHTTPPORT
-----------
          0

SQL> exec DBMS_XDB.SETHTTPPORT(8080);

PL/SQL procedure successfully completed.

SQL> SELECT DBMS_XDB.GETHTTPPORT FROM DUAL;

GETHTTPPORT
-----------
       8080
เรียบร้อยครับ...


วันเสาร์ที่ 27 เมษายน พ.ศ. 2556

_ALLOW_RESETLOGS_CORRUPTION คืออะไร?

ผมได้อ่านบทความ Opening the Door without the Keys ผมคิดว่าเป็นบนความที่น่าสนใจ และให้ไอเดียพอสมควร อย่างไรก็ตาม ผมจะกล่าวคร่่าวๆ เกี่ยวกับ "_ALLOW_RESETLOGS_CORRUPTION" พารามิเตอร์ (Undocument)

เมื่อเรา startup database ไม่ว่าจะเป็น RESETLOGS หรือ  NORESETLOGS  ขั้นตอนของ checkpoint จะต้องทำการเช็ค header ไฟล์ทั้งหมด ของ data files เพื่อให้แน่ใจว่าทุกๆ ไฟล์นั้นตรงกัน หรือสอดคล้องกัน (consistency) แต่หากเราเซต _ALLOW_RESETLOGS_CORRUPTION (TRUE) - สิ่งที่เกิดขึ้นคือ Header ของไฟล์จะไม่ถูกเช็คเมื่อเรา start database
มันนำมาซึ่งข้อมูลหาย และมีผลต่อความสมบูรณ์ของข้อมูล

ข้อดี - ในบางเหตุการณ์ เราสามารถ start database ถึงแม้ว่าbackup ที่มีนั้นไม่สมบูรณ์

ข้อเสีย - อย่างที่ทราบกันดีว่า ฐานข้อมูลจะไม่อยู่ในสภาพที่สอดคล้องกัน (inconsistency) เมื่อใช้พารามิเตอร์นี้ (เราอาจต้อง Export -> Create new database -> Import)