วันศุกร์ที่ 16 พฤษภาคม พ.ศ. 2557

เรียน 12c multitenant - จะเกิดอะไรขึ้นถ้า Connect PDB และสร้าง UNDO tablespace

อย่างที่เราพอทราบกันดีว่าฐานข้อมูลออราเคิล 12c multitenant (เมื่อเราสร้างฐานข้อมูลแบบ CDB) เราจะใช้ UNDO ร่วมกัน และหากต้องการสร้าง UNDO tablespace ขณะที่เรา connect อยู่ PDB (ไม่ใช่ CDB$ROOT) จะเกิดอะไรขึ้น....
ทดสอบ
SQL>   select name, cdb from v$database;
NAME      CDB
--------- ---
CDB       YES
SQL> select * from v$version;
BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0
PL/SQL Release 12.1.0.1.0 - Production                                                    0
CORE    12.1.0.1.0      Production                                                                0
TNS for Linux: Version 12.1.0.1.0 - Production                                            0
NLSRTL Version 12.1.0.1.0 - Production                                                    0
SQL> show user;
USER is "SYS"
SQL>
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT

SQL> alter session set container=PDB1;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDB1
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/cdb/pdb1/system01.dbf
/u01/app/oracle/oradata/cdb/pdb1/sysaux01.dbf
SQL> create undo tablespace undotbs1 datafile '/u01/app/oracle/oradata/cdb/pdb1/undo01.dbf'; 
Tablespace created.
SQL> select tablespace_name from dba_tablespaces;
TABLESPACE_NAME
------------------------------
SYSTEM
SYSAUX
TEMP
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/cdb/pdb1/system01.dbf
/u01/app/oracle/oradata/cdb/pdb1/sysaux01.dbf 
SQL> !ls -l /u01/app/oracle/oradata/cdb/pdb1/
total 963292
-rw-r-----. 1 oracle oinstall  20979712 Apr  8 12:01 pdb1_temp01.dbf
-rw-r-----. 1 oracle oinstall 713039872 Apr  9 20:06 sysaux01.dbf
-rw-r-----. 1 oracle oinstall 272637952 Apr  9 20:06 system01.dbf
SQL>
สรุปก็คือ คำสั่งไม่เกิด Error ใดๆ แต่ UNDO tablespace และ database file จะไม่ถูกสร้าง... 

วันพฤหัสบดีที่ 15 พฤษภาคม พ.ศ. 2557

เรียน 12c กับ DDL Log file

บนฐานข้อมูลออราเคิล 12c เราจะพบฟีเจอร์ที่เรียกว่า DDL log file จริงๆ แล้วเราจะพบบน 11.2 เช่นกัน
แต่สิ่งที่ต่างเราจะพบโฟลเดอร์ใหม่ $ADR_HOME/log/ddl เมื่อเราเซตค่า enable_ddl_logging เป็น true แล้วเรา ddl
- CREATE TABLE
- CREATE INDEX
- CREATE USER
- DROP USER
- ETC
เราจะพบ log.xml ที่ $ADR_HOME/log/ddl และสามารถใช้ adrci ในการอ่าน log file
ตัวอย่าง
[oracle@linux01 ddl]$ pwd
/u01/app/oracle/diag/rdbms/orcl17/orcl17/log/ddl
[oracle@linux01 ddl]$
[oracle@linux01 ddl]$ sqlplus  / as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Sat Apr 19 06:53:50 2014
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL> show parameter enable_ddl_logging
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
enable_ddl_logging                   boolean     FALSE
SQL> ALTER SYSTEM SET enable_ddl_logging=TRUE;
System altered.
SQL> conn demo
Enter password:
Connected.
SQL> create table C as select * from tab;
Table created.
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
[oracle@linux01 ddl]$
[oracle@linux01 ddl]$ ls log.xml
log.xml

[oracle@linux01 ddl]$ ls ../ddl_orcl17.log
../ddl_orcl17.log 
[oracle@linux01 ddl]$ cat log.xml
<msg time='2014-04-19T06:54:28.950+07:00' org_id='oracle' comp_id='rdbms'
 msg_id='opiexe:4181:2946163730' type='UNKNOWN' group='diag_adl'
 level='16' host_id='linux01' host_addr='192.168.111.60'
 version='1'>
 <txt>create table C as select * from tab
 </txt>
</msg>
[oracle@linux01 ddl]$
[oracle@linux01 ddl]$ adrci
ADRCI: Release 12.1.0.1.0 - Production on Sat Apr 19 06:58:17 2014
Copyright (c) 1982, 2013, Oracle and/or its affiliates.  All rights reserved.
ADR base = "/u01/app/oracle"
adrci> show home
ADR Homes:
diag/rdbms/orcl17/orcl17
adrci> SHOW LOG;
ADR Home = /u01/app/oracle/diag/rdbms/orcl17/orcl17:
*************************************************************************
Output the results to file: /tmp/utsout_24419_14020_1.ado
2014-04-19 06:54:28.950000 +07:00
create table C as select * from tab
หมายเหตุ ENABLE_DDL_LOGGING  เราต้องใช้ "Change Management Pack" license เมื่อเซตค่า TRUE

วันจันทร์ที่ 12 พฤษภาคม พ.ศ. 2557

ทำไมต้องศึกษาออราเคิล Statspack

บ่อยครั้งที่ผมจะบอกเพื่อนที่ทำงานกับผลิตภัณฑ์ที่เกี่ยวกับฐานข้อมูลออราเคิล และไม่เชี่ยวชาญนักในฐานข้อมูลออราเคิล เมื่อมีปัญหาให้สร้างรายงานจาก AWR แล้วส่งมาให้ผมช่วยในการวิเคราะห์ วันนี้เพื่อนผมที่ใช้ Oracle Standard Edition 11G ส่งปัญหา WARNING: Since the DB Time is less than one second, there was minimal foreground activity in the snapshot period. Some of the percentage values will be invalid. ผมจึงแนะนำเพื่อนให้ติดตั้ง Oracle Statspack
ข้อดีในการใช้ Statspack อาจไม่ใช่แค่เพราะไม่เสียค่าใช้จ่ายในการใช้งาน แต่อาจเพราะว่า เราใช้ Oracle Standard One หรือ Standard Edition นั่นเป็นเหตุที่ต้องติดตั้งใช้งาน Oracle Statspack

ผมเลยเริ่มเขียนบทความ ออราเคิล (Oracle) Statspack (ติดตั้งและใช้งานเบื้องต้น)

อย่างไรก็ดีสิ่งที่สำคัญเราควรสามารถวิเคราะห์รายงานที่เกิดจาก Statspack หรือ AWR ได้

ตัวอย่างการติดตั้ง
SQL> connect / as sysdba
SQL> CREATE TABLESPACE PERFSTAT_TS DATAFILE '/u01/app/oracle/oradata/orcl/perfstat_ts01.dbf' size 50M autoextend on maxsize unlimited;
SQL> define default_tablespace='PERFSTAT_TS'
SQL> define temporary_tablespace='TEMP'
SQL> define perfstat_password='password'
SQL> @?/rdbms/admin/spcreate.sql
SQL> undefine perfstat_password
SQL> @?/rdbms/admin/spauto.sql
ตัวอย่างสร้าง Report
SQL> connect perfstat/password
SQL> define begin_snap=9
SQL> define end_snap=10
SQL> define report_name=report_name.txt
SQL> @?/rdbms/admin/spreport.sql

วันพุธที่ 19 มีนาคม พ.ศ. 2557

ติดตั้ง Oracle Database บน CentOS?

บางครั้งในมุมมองของคนทำงานไอทีอาจถามว่าเราติดตั้ง Oracle Database บน CentOS ได้หรือไม่? ผมต้องขอบอกเลยว่าได้แน่นอน แต่อย่างไรนั้นผมไม่ขอกล่าวในบทความนี้ สิ่งที่สำคัญคือ ผมควรติดตั้ง Oracle Database บน CentOS สำหรับ Production หรือไม่?
CentOS เป็นระบบปฏิบัติการ Linux ที่เป็น open source community ดังนั้นเราจะไม่เสียค่าใช้จ่ายเรื่อง License เมื่อนำมาใช้กับระบบ แต่สิ่งที่เราควรคำนึงอย่างยิ่ง CentOS นั้น certify กับ Oracle Database หรือไม่? เราสามารถเข้าไปตรวจสอบได้ที่ http://support.oracle.com จากนั้นเลือก "Certifications" (ในกรณีนี้ผม ขอใช้ Oracle Database 12.1.0.1 บน Linux 64bits)
หลังจากการค้นหาก็พบว่า CentOS ไม่ certify ในการติดตั้ง Oracle Database 12.1 นั่นหมายถึง Oracle ไม่รับรองการติดตั้ง Oracle Database 12.1 บนระบบปฏิบัติการ CentOS ดังนั้นเราไม่ควรติดตั้งในกรณีแบบนี้บน Production เพราะเมื่อเกิดปัญหาอะไรก็ตาม หลังการติดตั้งและใช้งาน Oracle จะไม่สามารถช่วยเหลือได้ 
12.1
OS versions and minimum levels: 
Oracle Linux 6.x
Red Hat compatible Kernel
Update 2 or higher - Oracle Unbreakable Enterprise Kernel (UEK R2) 2.6.39-100.5.1 or higher
Update 4 or higher - Oracle Unbreakable Enterprise Kernel (UEK R3) 3.8.13-16 or higher
Oracle Linux 5 Update 6
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 5 Update 6
SLES 11 SP2: 3.0.13-0.27 or later
See Oracle Database Installation Guide 12c Release 1 (12.1) for Linux, Chapter 3.7.1 for supported kernels and package information for all the above Linux versions
ผมขอแนะนำให้เช็ค Certification Information for Oracle Database on Linux x86-64 (Doc ID 1304727.1)

ในมุมมองของผมเราควรใช้ Oracle Linux หากท่านมี Account บน Oracle Technology Network สามารถดาวน์โหลดได้ที่ https://edelivery.oracle.com/linux จากนั้นเมื่อใช้งานบนระบบจริง เราก็ดำเนินการในการซื้อ Support.





วันพุธที่ 12 กุมภาพันธ์ พ.ศ. 2557

ปัญหา ORA-00108

My friend asked me to check about error in alert log file - "dispatcher 'D000' encountered error getting listening address". After checked, I found.
Wed Feb 12 09:46:27 2014
dispatcher 'D000' encountered error getting listening address
Wed Feb 12 09:46:27 2014
found dead dispatcher 'D000', pid = (17, 154)
I checked trace file about d000 processed.
Trace file /u01/app/oracle/diag/rdbms/prod/PROD/trace/PROD_d000_31988.trc
Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1
System name:    Linux
Node name:      linux-host
Release:        2.6.39-400.21.1.el6uek.x86_64
Version:        #1 SMP Thu Apr 4 03:49:00 PDT 2013
Machine:        x86_64
Instance name: PROD
Redo thread mounted by this instance: 1
Oracle process number: 17
Unix process pid: 31988, image: oracle@linux-host (D000)


*** 2014-02-12 09:57:35.577
*** CLIENT ID:() 2014-02-12 09:57:35.577
*** SERVICE NAME:() 2014-02-12 09:57:35.577
*** MODULE NAME:() 2014-02-12 09:57:35.577
*** ACTION NAME:() 2014-02-12 09:57:35.577

network error encountered getting listening address:
  NS Primary Error: TNS-12533: TNS:illegal ADDRESS parameters
  NS Secondary Error: TNS-12560: TNS:protocol adapter error
  NT Generic Error: TNS-00503: Illegal ADDRESS parameters
OPIRIP: Uncaught error 108. Error stack:
ORA-00108: failed to set up dispatcher to accept connection asynchronously

(END)
I tried to find out... but no idea... So, checked /etc/hosts
[oracle@linux-host trace]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

[oracle@linux-host trace]$ vi /etc/hosts
[oracle@linux-host trace]$ cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

172.30.6.10     linux-host
Issue was fixed!  Oh! no... I found out on Oracle Support & Internet, but not get solution, but issue was about hostname. - -"

วันศุกร์ที่ 31 มกราคม พ.ศ. 2557

เรามาทดสอบ APEX 5.0 EA1 กันเถอะ

ผมได้อ่าน Twitter และพบ Oracle Application Express 5.0 Early Adopter 1 now available ผมคิดว่าเป็นจุดที่น่าสนใจ สำหรับผู้ที่สนใจใน Oracle APEX ที่จะ Request Workspace เพื่อการทดสอบ (ควรใช้ Email ที่ใช้ login OTN ได้) apexea.oracle.com

หลังจากการ "Request Workspace" เรียบร้อยแล้ว เราจะ Login ด้วย OTN user.
จากนั้นเลือก Workspace ที่เราสร้างไว้
หลังจากนั้นได้เวลาทดสอบ ^________________^

Oracle Application Express 5.0 Early Adopter 1 Feature Descriptions