วันศุกร์ที่ 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