Jan 29, 2016

OracleService on window hold system01.dbf file after drop pluggable database

เจอเหตุการณ์แปลกๆ ไม่แน่ใจนะว่า bug หรือป่าวลองหาข้อมูลใน oracle support ยังไม่เจอบทความเกี่ยวกับเรื่องนี้ คือ OracleService<InstanceName> บน window ยังใช้งาน system01.dbf  หลังจากที่สั่ง Drop pluggable database ไปแล้วเรียบร้อย

C:\Users\Administrator\Desktop>sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Fri Jan 29 15:16:34 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 Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions

SQL> select name,open_mode from v$pdbs;

NAME                           OPEN_MODE
------------------------------ ----------
PDB$SEED                       READ ONLY
PDBTEST                          READ WRITE

SQL> ALTER PLUGGABLE DATABASE PDBTEST CLOSE IMMEDIATE;

Pluggable database altered.

SQL> DROP PLUGGABLE DATABASE PDBTEST INCLUDING DATAFILES;

Pluggable database dropped.

SQL>

ปรากฎว่าเหลือไฟล์อยู่ตัวนึงคือ SYSTEM01.DBF และพอไปลบ Manual จึงเจอว่ามันยังใช้งานอยู่


แก้ไขโดย

ผมยังไม่ทราบ solution ที่ดีกว่านี้นะ workaround คือ stop - start instance ครับ


SQL> shutdown immediate
SQL> startup

หลังจากนั้นก็ไปลบไฟล์แบบ manual ครับ หายละ อิอิ

มีอะไรที่ผมเข้าใจผิดแจ้งด้วยนะครับ
Young Oracle DBA Thailand ..

Jan 28, 2016

ORA-65114: space usage in container is too high

Error : ORA-65114: space usage in container is too high

วันนี้ทดสอบสร้าง และ Import Database ด้วย impdp ดังนี้

CREATE PLUGGABLE DATABASE PDBTEST
  ADMIN USER PDBADMIN IDENTIFIED BY password
  ROLES = (dba)
  DEFAULT TABLESPACE USERS
    DATAFILE 'E:\oracle\oradata\PDBTEST\users01.dbf' SIZE 50M AUTOEXTEND ON
  FILE_NAME_CONVERT=('E:\oracle\oradata\pdbseed\','E:\oracle\oradata\PDBTEST\')
  PATH_PREFIX = 'E:\oracle\oradata\PDBTEST\'
  STORAGE (MAXSIZE 2G);

แต่ในระหว่างการ import data นั้นเจอ ORA-65114: space usage in container is too high

*ใช้วิธีการ Import ปกติ

วิธีแก้ไข

C:\Users\Administrator>sqlplus / as sysdba

SQL*Plus: Release 12.1.0.2.0 Production on Thu Jan 28 16:53:06 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 Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> alter session set container=PDBTEST;

Session altered.

SQL> ALTER PLUGGABLE DATABASE STORAGE UNLIMITED;

Pluggable database altered.

SQL>

เกิดจากการ limit STORAGE MAXSIZE ไว้ที่ 2G หรือเราจะแก้ไขเป็นตาม size ที่เราต้องการก็ได้ เช่น

ALTER PLUGGABLE DATABASE STORAGE (MAXSIZE 5G);
ALTER PLUGGABLE DATABASE STORAGE (MAXSIZE 10G);


มีอะไรที่ผมเข้าใจผิดแจ้งด้วยนะครับ
Young Oracle DBA Thailand ..

Jan 27, 2016

ORA-39087: directory name DATA_DUMP_DIR is invalid [Oracle Database 12c]

เจอ Error ORA-39087: directory name DATA_DUMP_DIR is invalid บน Oracle Database 12c ระหว่างที่ import datapump เข้า pdb ครับ

ใช้คำสั่ง import data pump แบบปกติ
impdp \"sys@pdb as sysdba\" dumpfile=DATA_DUMP_DIR:<dumpfile> logfile=DATA_DUMP_DIR:<logfile> schemas=<schema_name>

ปรากฎว่าเจอ error ORA-39087: directory name DATA_DUMP_DIR is invalid



Import: Release 12.1.0.2.0 - Production on Fri Jan 29 16:58:09 2016

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.
Password:

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit
Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing opt
ions
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-39087: directory name DATA_DUMP_DIR is invalid



เราก็ลองเข้า sqlplus และ select * from dba_directories; ดู

SQL> select * from dba_directories where DIRECTORY_NAME='DATA_PUMP_DIR';

OWNER                                                                        
--------------------------------------------------------------------------------
DIRECTORY_NAME                                                                
--------------------------------------------------------------------------------
DIRECTORY_PATH                                                                
--------------------------------------------------------------------------------
ORIGIN_CON_ID                                                                
-------------                                                                
SYS                                                                          
DATA_PUMP_DIR                                                                
E:\oracle\data_pump_file                                                      
            1                                                                

กำละ (= ="

วิธีแก้ไขปัญหา
Command> sqlplus / as sysdba
SQL> alter session set container=pdb;
SQL> CREATE DIRECTORY PDB_DUMP_DIR AS 'E:\oracle\data_pump_file';

Command> impdp \"sys@pdb as sysdba\" dumpfile=DATA_DUMP_DIR:<dumpfile> logfile=DATA_DUMP_DIR:<logfile> schemas=<schema_name>

เนื่องจาก 12c แบ่ง directory โดยแยก directory ของ container และ pluggable จากการ select * from dba_directories ภายใน pdb ได้ข้อมูลตามภาพด้านล่าง



มีอะไรที่ผมเข้าใจผิดแจ้งด้วยนะครับ
Young Oracle DBA Thailand ..

Jan 26, 2016

ORA-02085: การเชื่อมโยงฐานข้อมูล DBLINK.DB_DOMAIN เชื่อมต่อกับ DATABASE

วันนี้จะ clone oracle 12c non-cdb มาที่ oracle database container จาก link นี้อะนะ => https://oracle-base.com/articles/12c/multitenant-clone-remote-pdb-or-non-cdb-12cr1

มี task ที่ต้องสร้าง database link เพื่อให้ container ใช้ dblink มา select data จาก non-cdb ได้ปรากฎว่าเจอ error

ORA-02085: การเชื่อมโยงฐานข้อมูล DBLINK.DB_DOMAIN เชื่อมต่อกับ DATABASE

ORA-02085: database link DBLINK.DOMAIN connects to DATABASE

ลองตรวจสอบค่า ทั้ง db_domain และ global_name

SELECT * FROM V$PARAMETER WHERE NAME LIKE '%global%' OR NAME LIKE '%domain%';

แก้ปัญหาดังนี้

ALTER SYSTEM SET GLOBAL_NAMES=FALSE SCOPE=BOTH;
อันนี้แก้ไขระดับ instance เลย

ALTER SESSION SET GLOBAL_NAMES=FALSE SCOPE=BOTH;
แก้ไขระดับ Session นั้นๆ ที่เข้ามาใน database source

รันที่ Source Database เพราะว่าการให้ GLOBAL_NAMES เป็น TRUE คือแสดงว่าเรากำลังใช้ database domain ลองศึกษาเพิ่มเติมได้จาก link => https://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_admin001.htm หรือใน oracle support ก็มีนะ (Doc ID 210630.1)

เราก็พยายามแก้ไขนะใช้เวลา 3 ชม พยายามหาทางให้สามารถ connect ด้วย dblink ได้ ปรากฎว่าติดที่ DBName และ GLOBAL_NAME เป็นชื่อเดียวกัน (= ="

มีอะไรที่ผมเข้าใจผิดแจ้งด้วยนะครับ
Young Oracle DBA Thailand ..

Jan 22, 2016

สำหรับผู้เริ่มต้นศึกษา Oracle Database ไฝ่ฝันจะเป็น DBA ในอนาคตอันใกล้

เข้ามาอ่านนี่อยากเป็น DBA ใช่ไหม ?

บอกไว้ก่อนนะถ้าเลือกเดินทางนี้แล้วก่อนจะเป็น DBA ได้จริงๆ ต้องใช้เวลาฝึกเยอะครับ คิดว่าฝึกเองอย่างน้อยก็ 1 ปี ยกเว้นมีคนชี้แนะแนวทาง 2 เดือนก็เป็นแล้ว ถ้าเราขยันจริงๆ

สิ่งที่ควรรู้
- Operating System Concept ภายใน OS มันทำงานยังไง และที่สำคัญคือพวกคำสั่งพื้นฐานใน Server Linux, Window, AIX, Solaris เลือกมาสักอันนึงแล้วลองเล่นดู เช่น Linux คำสั่ง ls , df , grep , aux , find , ps และอื่นๆ ที่ List มาให้ (เท่าที่นึกได้ตอนนี้อะนะ) ควรใช้ให้เป็นให้หมดนะครับ
- CPU, Memory, Disk (I/O) คืออะไรตอนมหาลัย ไม่รู้มีสอนไหมนะ แต่พวกนี้เวลาเกิดปัญหาระบบช้าแล้ว DBA มักโดนถามก่อน ถ้าเราไม่รู้มันคืออะไรนี่ลำบากเลย โดยทั่วไป CPU จะ share กันทั้ง OS ตัว Memory จะถูกกำหนดในแต่ละ Instance และ I/O กรณีอยู่ mount point เดียวกันก็ share resource กัน ใน oracle database เราสามารถกำหนด tablespace ให้อยู่หลาย mount point ได้เพื่อให้สามารถดึงข้อมูลได้ไวขึ้น
- Shell / Batch Script เราต้องมีความรู้ในการเขียน Shell และ Batch Script ทั้งคู่นะ พวก vi ใน linux นี่ต้องรู้เลย ใช้เยอะมากสำหรับการ monitor และการผูก Job ใน linux จะใช้ crontab กัน window ผมใช้ schedule job นะ
- Database Tool สำหรับผู้มาสายขี้เกียจหน่อยก็ใช้ Tool นะ เช่น Toad ตัวนี้สุดยอดเลยตั้งแต่ใช้งานมา คือแทบจะไม่ต้องจำ command เลยครับ แต่ถ้าเจอหัวหน้าพวกสาย command line เค้าจะบ่นเอานะ เพราะเวลาเราเจอปัญหาแล้วจำ command ไม่ได้จะทำช้า หรือบางเครื่องไม่มี Tool จะลำบาก แนะนำว่าใช้ Tool ให้ชีวิตง่ายขึ้น และอย่าลืมฝึก command line ไว้แก้ปัญหาเฉพาะหน้าด้วย
- Database Parameter ภายใน database จะมี parameter สำคัญที่ใช้ตอนติดตั้งอยู่เช่น SGA, PGA, Oracle SID, Oracle Home,Session, Process และอื่นๆ ถ้าจะให้ดีเราต้องศึกษา parameter แต่ละตัวก่อนติดตั้ง

สิ่งที่ควรทำพื้นฐาน
พิมพ์ดีดให้ได้ 35 คำ/นาที งง หละสิ ผมเป็น DBA นะครับ ! เหตุผลคือเวลาเราทำงานเพื่อความเป็น Professional ควรทำให้ได้นะ แล้ว User จะงงว่ามันพิมพ์อะไรของมัน
Install Oracle Database ลองติดตั้ง Oracle Database เลยผิดๆถูกๆ ชั่งมันก่อน กด Next ไป ให้เราคุ้นกับเมนูก่อน เริ่มยังไงหละ
  • ไป download software ก่อนเข้า www.oracle.com เลยแล้วหาดูนะเมนู download อะ
  • เลือก OS ที่จะลง Window, Linux ลองเครื่องตัวเองก่อนก็ได้
  • ณ ตอนนี้มี version 11g และ 12c ลอง 11g ก่อนก็ดี
  • กดติดตั้งแล้วค่อยกลับไปอ่านหัวข้อ Database Parameter
เยอะ .. ความขี้เกียจมาแล้ว .. บายจ้า เลิกงานละ เราตรงเวลาเสมอ


มีอะไรที่ผมเข้าใจผิดแจ้งด้วยนะครับ
Young Oracle DBA Thailand ..

Select data จาก view ไม่ได้ ทั้งที่มีสิทธิ

ปัญหาคือ select data จาก view ไม่ได้ ทั้งที่มีสิทธิ (ทำไมเกิดไรขึ้น ?)


เพิ่มสิทธิดู view จากการสั่งแบบนี้
CMD> SQLPLUS / AS SYSDBA
SQL> GRANT SELECT ON A.VIEW TO B;

ลอง select data ดูสิ
SQL> SELECT * FROM  A.VIEW;
ERROR at line 1:
ORA-01031: "insufficient privileges"

ไม่ได้ (= ="

แก้ปัญหาดังนี้

- ดูที่ A.VIEW ว่ามัน select table , view หรือ execute procedure , fuction ที่ schema อื่นอีกบ้างไหม คือถ้าใช่เราต้อง Grant แบบ "WITH GRANT OPTION" ที่ object ของ schema อื่นด้านใน A.View ทั้งหมดให้ A สามารถส่งสิทธินี้ให้ B ดูได้ด้วยแค่นั้นแหละ

ตัวอย่างนะ
GRANT SELECT ON C.TABLE TO A WITH GRANT OPTION;

มีอะไรที่ผมเข้าใจผิดแจ้งด้วยนะครับ
Young Oracle DBA Thailand ..