วันอาทิตย์ที่ 22 ธันวาคม พ.ศ. 2556
Oracle SQL Developer 4.0 ใหม่ สำหรับ DBA
บทความครั้งที่แล้วผมได้พูดถึง Oracle SQL Developer 4.0 ใหม่! ถ้าผู้อ่านได้มีโอกาสได้ลองทดสอบ จะพบว่ามีหลายๆ อย่างที่น่าสนใจ และมีฟีเจอร์ใหม่สำหรับ DBA ผู้อ่านสามารถ ดูได้จาก YouTube นี้
หรือลองทดสอบด้วยตัวเอง -:)
วันพฤหัสบดีที่ 12 ธันวาคม พ.ศ. 2556
Oracle SQL Developer 4.0 ใหม่! เพิ่มประสิทธิภาพการใช้งานกับ Oracle Database 12c
วันนี้ผมได้อ่านบทความบท tweeter และ Marketwactch - ออราเคิลได้เปิดตัว Oracle SQL Developer 4.0 (4.0.0.13.80). เราสามารถ Download เพื่อมาทดสอบได้จาก OTN เว็บ. Oracle SQL Developer 4.0 ตัวใหม่นี้ได้แก้ปัญหาเกียวกับบักมากกว่า 500 ตัว เราสามารถอ่านได้ที่...
ผู้ใช้จะพบกับฟีเจอร์ใหม่ๆ อันได้แก่
Database Performance Monitoring
Find Database Object - Search
Command Line
Cart
Reports
UI Enhancements
Data Modeler 4.0
JDK 7 Support
อ้างอิง
http://www.marketwatch.com/story/oracle-sql-developer-40-enhances-support-for-oracle-database-12c-2013-12-12
http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html
ผู้ใช้จะพบกับฟีเจอร์ใหม่ๆ อันได้แก่
Database Performance Monitoring
Find Database Object - Search
Command Line
Cart
Reports
UI Enhancements
Data Modeler 4.0
JDK 7 Support
อ้างอิง
http://www.marketwatch.com/story/oracle-sql-developer-40-enhances-support-for-oracle-database-12c-2013-12-12
http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html
วันพฤหัสบดีที่ 3 ตุลาคม พ.ศ. 2556
ใช้ RDP ติดต่อ VirtualBox
บ่อยครั้งที่ผมใช้งาน Oracle Virtual Box นั้นใช้ Console. วันนี้มีโอกาสได้อ่านเกี่ยวกับ Remote display (VRDP support) เลยต้องลองใช้แล้วเอามาแชร์ดู ...ตามรูปเลย
ง่ายเชียว... อย่าลืมใช้ฟีเจอร์นี้ กันนะครับ
ง่ายเชียว... อย่าลืมใช้ฟีเจอร์นี้ กันนะครับ
วันพุธที่ 2 ตุลาคม พ.ศ. 2556
เริ่มต้นเรียนรู้ Oracle APEX ด้วย Oracle_Developer_Day.ova
หากผู้อ่านสนใจ ในการศึกษา Oracle APEX เราสามารถเริ่มต้นติดตั้ง และเรียนรู้ในการสร้าง workspace ได้มากมายจากอินเตอร์เน็ท Getting Started.
บทความนี้ผมแนะนำการติดตั้ง ova ไฟล์ จาก Oracle Developer Day
สิ่งแรกผู้ติดตั้งต้องมีคือ Oracle VM VirtualBox
หลังจากนั้นดาวน์โหลด Oracle_Developer_Day.ova ต่อด้วย Import
หลังจากนั้นเราสามารถเปลี่ยนค่าบางอย่าง เช่น Memory และ อื่นๆ ต่อด้วย start ...
หมายเหตุ พลาสเวิร์ด = "oracle"
เมื่อเรา remote เข้าไปไม่ว่าด้วย RDP หรือ ... เราจะทราบ IP Address ปัจจุบัน ต่อจากนั้นเช็คเกี่ยวกับ Oracle APEX -:)
เมื่อ login เราสามารถสร้าง Workspace เพื่อศึกษาต่อไป
บทความนี้ผมแนะนำการติดตั้ง ova ไฟล์ จาก Oracle Developer Day
สิ่งแรกผู้ติดตั้งต้องมีคือ Oracle VM VirtualBox
หลังจากนั้นดาวน์โหลด Oracle_Developer_Day.ova ต่อด้วย Import
หลังจากนั้นเราสามารถเปลี่ยนค่าบางอย่าง เช่น Memory และ อื่นๆ ต่อด้วย start ...
หมายเหตุ พลาสเวิร์ด = "oracle"
เมื่อเรา remote เข้าไปไม่ว่าด้วย RDP หรือ ... เราจะทราบ IP Address ปัจจุบัน ต่อจากนั้นเช็คเกี่ยวกับ Oracle APEX -:)
login as: oracleหลังจากนั้นเปิด Browser เพื่อติดต่อ APEX
oracle@192.168.111.15's password:
Last login: Wed Oct 2 19:34:34 2013 from 192.168.111.14
All passwords are oracle or noted if otherwise.
The SQL Developer and Data Modeler scripts are in the directory:
/home/oracle/Desktop/SQLDev_Tutorials/sqldev
To Reset the labs:
SQL Developer: /home/oracle/reset_sqldev
Application Express: /home/oracle/reset_apex
In-Memory Database Cache: /home/oracle/reset_imdbcache
XML Database: /home/oracle/reset_xmldb
Oracle Enterprise Manager
Start: emctl start dbconsole
Stop : emctl stop dbconsole
URL : https://127.0.0.1:1158/em
*** Please note that this appliance is for testing purposes only,
as such it is unsupported and should not be used as a production environment.
inet addr:192.168.111.15 Bcast:192.168.111.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
LD_LIBRARY_PATH set to /home/oracle/app/oracle/product/TimesTen/tt1122/lib:/home/oracle/app/oracle/product/TimesTen/tt1122/ttoracle_home/instantclient_11_2:/home/oracle/app/oracle/product/11.2.0/dbhome_2/lib
ANT_HOME set to /home/oracle/app/oracle/product/TimesTen/tt1122/3rdparty/ant
PATH set to /home/oracle/app/oracle/product/TimesTen/tt1122/bin:/home/oracle/app/oracle/product/TimesTen/tt1122/quickstart/sample_code/oci:/home/oracle/app/oracle/product/TimesTen/tt1122/quickstart/sample_code/odbc:/home/oracle/app/oracle/product/TimesTen/tt1122/quickstart/sample_code/odbc/xla:/home/oracle/app/oracle/product/TimesTen/tt1122/quickstart/sample_code/jdbc:/home/oracle/app/oracle/product/TimesTen/tt1122/quickstart/sample_code/odbc_drivermgr:/home/oracle/app/oracle/product/TimesTen/tt1122/quickstart/sample_code/proc:/home/oracle/app/oracle/product/TimesTen/tt1122/quickstart/sample_code/ttclasses:/home/oracle/app/oracle/product/TimesTen/tt1122/quickstart/sample_code/ttclasses/xla:/home/oracle/app/oracle/product/TimesTen/tt1122/ttoracle_home/instantclient_11_2:/home/oracle/app/oracle/product/TimesTen/tt1122/ttoracle_home/instantclient_11_2/sdk:/home/oracle/app/oracle/product/TimesTen/tt1122/3rdparty/ant/bin:/usr/java/latest/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin:/home/oracle/bin
CLASSPATH set to /home/oracle/app/oracle/product/TimesTen/tt1122/lib/ttjdbc6.jar:/home/oracle/app/oracle/product/TimesTen/tt1122/lib/orai18n.jar:/home/oracle/app/oracle/product/TimesTen/tt1122/lib/timestenjmsxla.jar:/home/oracle/app/oracle/product/TimesTen/tt1122/3rdparty/jms1.1/lib/jms.jar:.:/home/oracle/app/oracle/product/11.2.0/dbhome_2/ucp/lib/ucp.jar:/home/oracle/app/oracle/product/11.2.0/dbhome_2/jdbc/lib/ojdbc6.jar
TNS_ADMIN set to /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin
IP Address is:
inet addr:192.168.111.15 Bcast:192.168.111.255 Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
[oracle@localhost ~]$
[oracle@localhost ~]$
[oracle@localhost ~]$ ./apexlistener.sh status
+ . /etc/rc.d/init.d/functions
++ TEXTDOMAIN=initscripts
++ umask 022
++ PATH=/sbin:/usr/sbin:/bin:/usr/bin
++ export PATH
++ '[' -z '' ']'
++ COLUMNS=80
++ '[' -z '' ']'
+++ /sbin/consoletype
++ CONSOLETYPE=pty
++ '[' -f /etc/sysconfig/i18n -a -z '' ']'
++ . /etc/profile.d/lang.sh
+++ sourced=0
+++ for langfile in /etc/sysconfig/i18n '$HOME/.i18n'
+++ '[' -f /etc/sysconfig/i18n ']'
+++ . /etc/sysconfig/i18n
++++ LANG=en_US.UTF-8
++++ SYSFONT=latarcyrheb-sun16
+++ sourced=1
+++ for langfile in /etc/sysconfig/i18n '$HOME/.i18n'
+++ '[' -f /home/oracle/.i18n ']'
+++ '[' -n '' ']'
+++ '[' 1 = 1 ']'
+++ '[' -n en_US.UTF-8 ']'
+++ export LANG
+++ '[' -n '' ']'
+++ unset LC_ADDRESS
+++ '[' -n '' ']'
+++ unset LC_CTYPE
+++ '[' -n '' ']'
+++ unset LC_COLLATE
+++ '[' -n '' ']'
+++ unset LC_IDENTIFICATION
+++ '[' -n '' ']'
+++ unset LC_MEASUREMENT
+++ '[' -n '' ']'
+++ unset LC_MESSAGES
+++ '[' -n '' ']'
+++ unset LC_MONETARY
+++ '[' -n '' ']'
+++ unset LC_NAME
+++ '[' -n '' ']'
+++ unset LC_NUMERIC
+++ '[' -n '' ']'
+++ unset LC_PAPER
+++ '[' -n '' ']'
+++ unset LC_TELEPHONE
+++ '[' -n '' ']'
+++ unset LC_TIME
+++ '[' -n '' ']'
+++ unset LC_ALL
+++ '[' -n '' ']'
+++ unset LANGUAGE
+++ '[' -n '' ']'
+++ unset LINGUAS
+++ '[' -n '' ']'
+++ unset _XKB_CHARSET
+++ consoletype=pty
+++ '[' -z pty ']'
+++ '[' -n '' ']'
+++ '[' -n '' ']'
+++ '[' -n en_US.UTF-8 ']'
+++ case $LANG in
+++ '[' xterm = linux ']'
+++ unset SYSFONTACM SYSFONT
+++ unset sourced
+++ unset langfile
++ '[' -z '' ']'
++ '[' -f /etc/sysconfig/init ']'
++ . /etc/sysconfig/init
+++ BOOTUP=color
+++ GRAPHICAL=yes
+++ RES_COL=60
+++ MOVE_TO_COL='echo -en \033[60G'
+++ SETCOLOR_SUCCESS='echo -en \033[0;32m'
+++ SETCOLOR_FAILURE='echo -en \033[0;31m'
+++ SETCOLOR_WARNING='echo -en \033[0;33m'
+++ SETCOLOR_NORMAL='echo -en \033[0;39m'
+++ LOGLEVEL=3
+++ PROMPT=yes
+++ AUTOSWAP=no
++ '[' pty = serial ']'
++ '[' color '!=' verbose ']'
++ INITLOG_ARGS=-q
++ __sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
+ NAME='Oracle Application Express Listener'
+ JAVA_HOME=/usr/java/latest
+ JAVA=/usr/java/latest/bin/java
+ APEXWAR=/home/oracle/listener/apex.war
+ ORACLE_SID=orcl
+ ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
+ OPTIONS=' -Xmx1024m -Xms256m -jar /home/oracle/listener/apex.war standalone >/tmp/apexListener.log '
+ LOGFILE=/tmp/apex_listener.log
++ ps -ef
++ grep apex
++ grep -v apexlistener
++ grep -v grep
++ cut -c9-15
+ PID=' 2569 '
++ ps -ef
++ grep apex
++ grep -v apexlistener
++ grep -v grep
++ cut -c9-15
++ wc -l
+ RUNNING=1
+ case "$1" in
+ status
+ echo -n 'Status Oracle Application Express Listener: '
Status Oracle Application Express Listener: + '[' 1 -eq 1 ']'
+ echo APEX Listener running: 2569
APEX Listener running: 2569
+ ps -ef
+ grep 2569
oracle 2569 1 0 19:24 ? 00:00:04 /usr/java/latest/bin/java -Xmx1024m -Xms256m -jar /home/oracle/listener/apex.war standalone >/tmp/apexListener.log
oracle 3690 3673 0 19:43 pts/3 00:00:00 grep 2569
+ exit 0
[oracle@localhost ~]$ netstat -anp | grep 2569
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.)
tcp 0 0 :::8888 :::* LISTEN 2569/java
tcp 0 0 ::ffff:127.0.0.1:46995 ::ffff:127.0.0.1:1521 ESTABLISHED 2569/java
tcp 0 0 ::ffff:127.0.0.1:46994 ::ffff:127.0.0.1:1521 ESTABLISHED 2569/java
tcp 0 0 ::ffff:127.0.0.1:46993 ::ffff:127.0.0.1:1521 ESTABLISHED 2569/java
unix 2 [ ] STREAM CONNECTED 7717 2569/java
เมื่อ login เราสามารถสร้าง Workspace เพื่อศึกษาต่อไป
วันอังคารที่ 24 กันยายน พ.ศ. 2556
เรียนรู้ Oracle Multitenant Self-Service Provisioning - BETA
ออราเคิล "Multitenant Self-Service Provisioning" เป็นแอพิเคชั่นที่พัฒนาขึ้น เพื่อให้สามารถจัดการกับ Oracle Database 12c Multitenant ได้ง่ายมากขึ้น การติดตั้งนั้นต้องการ
- Oracle Database 12c Release 1
- Oracle Application Express 4.2.3.00.08
- Oracle Application Express Listener 2.0.4
ผมจะไม่ขอยกตัวอย่างในการติดตั้ง เพราะผู้อ่านสามารถดูได้จาก readme.txt ไฟล์ และ My Post!!! ติดตั้ง PDBSS.
และสามารถดูตัวอย่าง การใช้งาน PDBSS.
- Oracle Database 12c Release 1
- Oracle Application Express 4.2.3.00.08
- Oracle Application Express Listener 2.0.4
ผมจะไม่ขอยกตัวอย่างในการติดตั้ง เพราะผู้อ่านสามารถดูได้จาก readme.txt ไฟล์ และ My Post!!! ติดตั้ง PDBSS.
และสามารถดูตัวอย่าง การใช้งาน PDBSS.
วันพุธที่ 18 กันยายน พ.ศ. 2556
APEX 4.2.3 บน CDB
ครั้งที่แล้วได้ลองทดสอบใช้ Patch set 17347169 ในการอัพเกรดฐานข้อมูลออราเคิล 12c CDB - APEX 4.2.3 - อัพเกรด APEX บนฐานข้อมูล 12c (Oracle Multitenant). วันนี้เป็นโอกาสดีในการทดสอบติดตั้ง APEX 4.2.3 บน CDB.
เริ่มต้นด้วยการใช้ apexins_con.sql ติดตั้ง APEX แบบ development บน CDB.
- apex_epg_config_con.sql ติดตั้ง Embedded PL/SQL Gateway ให้กับ CDB$ROOT, PDB$SEED และ PDB...
- apex_epg_config.sql ใช้ติดตั้งบน PDB ต้องการ
ในตัวอย่างนี้ ผมติดตั้ง Embedded PL/SQL Gateway ใน PDB_OPUN
ตอนนี้เราสามารถใช้ APEX 4.2.3 ใน PDB (PDB_OPUN) ผ่าน Embedded PL/SQL Gateway.
จากนั้นเราอาจอนุญาติให้ APEX_040200 นั้นสามารถติดต่อไป Network ข้างนอก
เริ่มต้นด้วยการใช้ apexins_con.sql ติดตั้ง APEX แบบ development บน CDB.
SQL> select CON_ID, NAME, OPEN_MODE from v$pdbs;เนื่องจากต้องการใช้ Embedded PL/SQL Gateway เลยเซต HTTP port บน PDB (PDB_OPUN) และเปลี่ยน Password + unlock ให้กับ ANONYMOUS
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
2 PDB$SEED READ ONLY
3 PDB_OPUN READ WRITE
SQL> select COMP_ID, VERSION, CON_ID from cdb_registry where COMP_ID='APEX';
no rows selected
SQL>
[oracle@test12c ~]$ unzip -l apex_4.2.3.zip|tail
2256 08-22-2012 10:46 apex/apxconf.sql
4301 08-15-2013 04:08 apex/apxdvins.sql
1150 08-22-2012 10:46 apex/apxchpwd.sql
5 08-22-2012 10:46 apex/apxexit.sql
4706 03-02-2013 22:19 apex/catapx.sql
538 03-07-2008 21:20 apex/apxe102.sql
3271 03-02-2013 22:19 apex/apxxepwd.sql
13889 06-18-2011 00:08 apex/apexvalidate.sql
--------- -------
989017663 12307 files
[oracle@test12c ~]$ ls -la apex_4.2.3.zip
-rw-r--r--. 1 oracle oinstall 162660590 Sep 18 13:15 apex_4.2.3.zip
[oracle@test12c ~]$ cd /tmp/
[oracle@test12c tmp]$ man unzip
[oracle@test12c tmp]$ unzip /home/oracle/apex_4.2.3.zip ^C
[oracle@test12c tmp]$ pwd
/tmp
[oracle@test12c tmp]$ cd apex/
[oracle@test12c apex]$ ls
apex_epg_config_con.sql apex_rest_config.sql apxdevrm.sql apxexit.sql apxremov2.sql apxxepwd.sql images
apex_epg_config_core.sql apexvalidate.sql apxdvins_con.sql apxldimg_con.sql apxremov_con.sql builder load_trans.sql
apex_epg_config.sql appins.sql apxdvins.sql apxldimg.sql apxremov.sql catapx.sql owa
apexins_con.sql apxchpwd.sql apxe101.sql apxpatch.sql apxrtins_con.sql core utilities
apexins.sql apxconf.sql apxe102.sql apxprereq.sql apxrtins.sql coreins.sql
apex_rest_config_con.sql apxdbmig.sql apxe111.sql apxrelod.sql apxsqler.sql devins.sql
apex_rest_config_core.sql apxdevrm_con.sql apxe112.sql apxremov1.sql apxxemig.sql endins.sql
[oracle@test12c apex]$
[oracle@test12c apex]$ ls -l apexins_con.sql
-rw-r--r--. 1 oracle oinstall 2042 Aug 31 13:38 apexins_con.sql
[oracle@test12c apex]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Wed Sep 18 14:12:33 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> @apexins_con.sql SYSAUX SYSAUX TEMP /i/
PL/SQL procedure successfully completed.
Performing installation in multitenant container database in the background.
The installation progress is spooled into apexins_con*.log files.
Please wait...
Installation completed. Log files for each container can be found in:
apexins_con*.log
You can quickly scan for ORA errors or compilation errors by using a utility
like grep:
grep ORA- *.log
grep PLS- *.log
SQL> select CON_ID, NAME, OPEN_MODE from v$pdbs;
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
2 PDB$SEED READ ONLY
3 PDB_OPUN READ WRITE
SQL> select COMP_ID, VERSION, CON_ID from cdb_registry where COMP_ID='APEX';
COMP_ID VERSION CON_ID
------------------------------ ------------------------------ ----------
APEX 4.2.3.00.08 1
APEX 4.2.3.00.08 2
APEX 4.2.3.00.08 3
SQL> alter session set container = PDB_OPUN;จากนั้นก็ได้เวลาติดตั้ง Embedded PL/SQL Gateway
Session altered.
SQL> @apxconf
PORT
----------
8080
Enter values below for the XDB HTTP listener port and the password for the Application Express ADMIN user.
Default values are in brackets [ ].
Press Enter to accept the default value.
Enter a value below for the password for the Application Express ADMIN user.
Enter a password for the ADMIN user []
Session altered.
...changing password for ADMIN
PL/SQL procedure successfully completed.
Enter a port for the XDB HTTP listener [ 8080] 8000
...changing HTTP Port
PL/SQL procedure successfully completed.
SQL>
SQL> ALTER SESSION SET CONTAINER = CDB$ROOT;
Session altered.
SQL> ALTER USER ANONYMOUS IDENTIFIED BY PASSWORD ACCOUNT UNLOCK;
User altered.
SQL> select con_id, account_status from cdb_users where username='ANONYMOUS';
CON_ID ACCOUNT_STATUS
---------- --------------------------------
3 OPEN
2 EXPIRED & LOCKED
1 OPEN
SQL>
SQL> !lsnrctl status |grep 8000
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=test12c)(PORT=8000))(Presentation=HTTP)(Session=RAW))
SQL>
- apex_epg_config_con.sql ติดตั้ง Embedded PL/SQL Gateway ให้กับ CDB$ROOT, PDB$SEED และ PDB...
- apex_epg_config.sql ใช้ติดตั้งบน PDB ต้องการ
ในตัวอย่างนี้ ผมติดตั้ง Embedded PL/SQL Gateway ใน PDB_OPUN
[oracle@test12c apex]$ ls -l apex_epg_config_con.sqlหลังจากนั้นทดสอบเรียกจาก Browser ...
-rw-r--r--. 1 oracle oinstall 2130 Aug 31 13:38 apex_epg_config_con.sql
[oracle@test12c apex]$ ls -l apex_epg_config.sql
-rw-r--r--. 1 oracle oinstall 831 Apr 6 13:09 apex_epg_config.sql
[oracle@test12c apex]$
[oracle@test12c apex]$
[oracle@test12c apex]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Wed Sep 18 18:21:05 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> alter session set container = PDB_OPUN;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDB_OPUN
SQL> @apex_epg_config /tmp
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
. Loading images directory: /tmp/apex/images
Directory created.
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
Commit complete.
Directory dropped.
timing for: Load Images
Elapsed: 00:02:13.11
PL/SQL procedure successfully completed.
Commit complete.
SQL>
ตอนนี้เราสามารถใช้ APEX 4.2.3 ใน PDB (PDB_OPUN) ผ่าน Embedded PL/SQL Gateway.
จากนั้นเราอาจอนุญาติให้ APEX_040200 นั้นสามารถติดต่อไป Network ข้างนอก
SQL> conn / as sysdbaอ่านเพิ่มเติม http://docs.oracle.com/cd/E16655_01/install.121/e17958/toc.htm
Connected.
SQL> alter session set container=pdb_opun;
Session altered.
SQL> show con_name
CON_NAME
------------------------------
PDB_OPUN
SQL> DECLARE
2 ACL_PATH VARCHAR2(4000);
3 BEGIN
4 -- Look for the ACL currently assigned to '*' and give APEX_040200
5 -- the "connect" privilege if APEX_040200 does not have the privilege yet.
6
7 SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
8 WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
9
10 IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_040200',
11 'connect') IS NULL THEN
12 DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
13 'APEX_040200', TRUE, 'connect');
14 END IF;
15
16 EXCEPTION
17 -- When no ACL has been assigned to '*'.
18 WHEN NO_DATA_FOUND THEN
19 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
20 'ACL that lets power users to connect to everywhere',
21 'APEX_040200', TRUE, 'connect');
22 DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
23 END;
24 /
COMMIT;
PL/SQL procedure successfully completed.
SQL>
Commit complete.
SQL>
วันอังคารที่ 17 กันยายน พ.ศ. 2556
APEX 4.2.3 - อัพเกรด APEX บนฐานข้อมูล 12c (Oracle Multitenant)
วันนี้ได้อ่าน Oracle Application Express 4.2.3 now available ผมได้เห็นการอัพเกรด APEX บนฐานข้อมูล 12c (Oracle Multitenant). ล่าสุดก่อนหน้านี้ผมได้ลองใช้ patch ที่มีแต่ก็ยังไม่สามารถทำการอัพเกรด APEX ทีเดียวใน CDB$ROOT, PDB$SEED และ PDB... หลังจากผมได้ดาวน์โหลด patch 17347169 ก็ได้เวลาในการทดสอบ
ขั้นตอนแรกก็คือติดตั้ง Patch Set ใน CDB.
เป็นอันสำเร็จด้วยดี
ขั้นตอนแรกก็คือติดตั้ง Patch Set ใน CDB.
SQL> select CON_ID, NAME, OPEN_MODE from v$pdbs;หลังจากนั้นอัพเดทรูปใน CDB ถ้าใช้ Embedded PL/SQL Gateway.
CON_ID NAME OPEN_MODE
---------- ------------------------------ ----------
2 PDB$SEED READ ONLY
3 TESTPDB01 READ WRITE
SQL> select COMP_ID, VERSION, CON_ID from cdb_registry where COMP_ID='APEX';
COMP_ID VERSION CON_ID
------------------------------ ------------------------------ ----------
APEX 4.2.0.00.27 1
APEX 4.2.0.00.27 2
APEX 4.2.0.00.27 3
[oracle@test12c ~]$ ls -l p17347169_423_Generic.zip
-rw-r--r--. 1 oracle oinstall 77044627 Sep 17 17:25 p17347169_423_Generic.zip
[oracle@test12c ~]$ unzip -l p17347169_423_Generic.zip |tail
1197 09-11-2013 02:16 patch/patches/4_2_3/prereq.sql
1812 07-13-2013 01:55 patch/patches/4_2_3/syspatch.sql
144074 09-17-2013 00:45 patch/readme.htm
220231 09-17-2013 00:45 patch/readme.pdf
0 09-11-2013 04:59 patch/utilities/
1621 08-31-2013 13:38 patch/utilities/reset_image_prefix.sql
2804 08-31-2013 13:38 patch/utilities/reset_image_prefix_con.sql
2575 08-31-2013 13:38 patch/utilities/reset_image_prefix_core.sql
--------- -------
184039056 11743 files
[oracle@test12c ~]$ unzip -l p17347169_423_Generic.zip
[oracle@test12c ~]$ ls patch/
apex_rest_config_con.sql apex_rest_config.sql apxldimg.sql apxpatch.sql images readme.htm utilities
apex_rest_config_core.sql apxldimg_con.sql apxpatch_con.sql core patches readme.pdf
[oracle@test12c ~]$ cd patch/
[oracle@test12c patch]$
[oracle@test12c patch]$ ls -l apxpatch_con.sql
-rw-r--r--. 1 oracle oinstall 2496 Aug 31 13:38 apxpatch_con.sql
[oracle@test12c patch]$ pwd
/home/oracle/patch
[oracle@test12c patch]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Tue Sep 17 22:32:46 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> @apxpatch_con.sql
PL/SQL procedure successfully completed.
Performing installation in multitenant container database in the background.
The installation progress is spooled into *patch_con*.log files.
Please wait...
PL/SQL procedure successfully completed.
PL/SQL procedure successfully completed.
timing for: Complete Patch
Elapsed: 01:29:21.57
Installation completed. Log files for each container can be found in:
syspatch_con*.log
ddlpatch_con*.log
deppatch_con*.log
corepatch_con*.log
You can quickly scan for ORA errors or compilation errors by using a utility
like grep:
grep ORA- *.log
grep PLS- *.log
SQL>
SQL> !grep ORA- *.log
SQL> !grep PLS- *.log
SQL> select COMP_ID, VERSION, CON_ID from cdb_registry where COMP_ID='APEX';
COMP_ID VERSION CON_ID
------------------------------ ------------------------------ ----------
APEX 4.2.3.00.08 1
APEX 4.2.3.00.08 3
APEX 4.2.3.00.08 2
SQL> @apxldimg_con.sql /home/oracle/patch
PL/SQL procedure successfully completed.
Performing installation in multitenant container database in the background.
The installation progress is spooled into apxldimg_con*.log files.
Please wait...
/bin/bash: -c: line 0: syntax error near unexpected token `&'
/bin/bash: -c: line 0: `&OH_HOME/perl/bin/perl -I &OH_HOME/rdbms/admin &OH_HOME/rdbms/admin/catcon.pl -b apxldimg_con apxldimg.sql --p&1'
Installation completed. Log files for each container can be found in:
apxldimg_con*.log
You can quickly scan for ORA errors or compilation errors by using a utility
like grep:
grep ORA- *.log
grep PLS- *.log
SQL> exit
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@test12c patch]$ less apxldimg_con.sql
[oracle@test12c patch]$ less apxpatch_con.sql
[oracle@test12c patch]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.1.0 Production on Wed Sep 18 00:08:06 2013
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> @apxldimg_con.sql /home/oracle/patch
PL/SQL procedure successfully completed.
Performing installation in multitenant container database in the background.
The installation progress is spooled into apxldimg_con*.log files.
Please wait...
Installation completed. Log files for each container can be found in:
apxldimg_con*.log
You can quickly scan for ORA errors or compilation errors by using a utility
like grep:
grep ORA- *.log
grep PLS- *.log
SQL>
เป็นอันสำเร็จด้วยดี
วันอาทิตย์ที่ 11 สิงหาคม พ.ศ. 2556
ทดสอบ 12c Default Values สำหรับคอลัมน์ (Sequence และ Explicit NULL Insertion)
บทความนี้ไม่ต้องการเกริ่นอะไรมาก ดังที่เราทราบกันดีว่า ฐานข้อมูลออราเคิล 12c เราสามารถเซตคอลัมน์กับ default values (บน Sequence และ Explicit NULL Insertion).
ออราเคิล sequence - เราสามารถระบุ sequence.CURVAL หรือ sequence.NEXTVAL
ออราเคิล Explicit NULL Insertion (ON NULL...) - เราสามารถระบุค่า default ที่เราต้องการเมื่อ INSERT กับค่า NULL
ตัวอย่าง ผมขอใช้ทั้งสองกรณีในทีเดียวเลยนะครับ
อ่านเพิ่มเติม Oracle Documents.
ออราเคิล sequence - เราสามารถระบุ sequence.CURVAL หรือ sequence.NEXTVAL
ออราเคิล Explicit NULL Insertion (ON NULL...) - เราสามารถระบุค่า default ที่เราต้องการเมื่อ INSERT กับค่า NULL
ตัวอย่าง ผมขอใช้ทั้งสองกรณีในทีเดียวเลยนะครับ
SQL> CREATE SEQUENCE S1 START WITH 1;
Sequence created.
SQL> CREATE TABLE TB (ID NUMBER DEFAULT S1.NEXTVAL NOT NULL, NAME VARCHAR2(30), ADDR VARCHAR2(50) DEFAULT ON NULL 'N/A' NOT NULL);
Table created.
SQL> DESC TB
Name Null? Type
--------------- -------- --------------------------------------------------------
ID NOT NULL NUMBER
NAME VARCHAR2(30)
ADDR NOT NULL VARCHAR2(50)
SQL> INSERT INTO TB(NAME) VALUES('SURACHART OPUN');
1 row created.
SQL> INSERT INTO TB(NAME) VALUES('TEST!!!');
1 row created.
SQL> SELECT * FROM TB;
ID NAME ADDR
---------- ------------------------------ --------------------------------------------------
1 SURACHART OPUN N/A
2 TEST!!! N/A
อ่านเพิ่มเติม Oracle Documents.
เรียนสร้างเทเบิลบนฐานข้อมูลออราเคิล 12c กับ Identity Column
วันนี้ได้มีโอกาสอ่านเกี่ยวกับการสร้างเทเบิลกับ Identity คอลัมน์ ผมเกิดความสงสัยเลยลองหาข้อมูลและลองทดสอบดู จริงๆ แล้วคล้ายกับการที่เราสร้างเทเบิลแล้วมีการระบุ Sequence ให้กับคอลัมน์ที่ต้องการ อย่างไร? คิดง่ายๆ ว่า Option นี้ เข้ามาช่วยเราในการที่ไม่ต้องสร้าง Sequence เอง...
จะเห็นว่าเราสามารถเลือก ALWAYS (Oracle จะ generate ค่าของ sequence ทุกๆครั้ง เราไม่สามารถระบุค่าเองให้กับคอลัมน์นี้) และ BY DEFAULT (Oracle จะ generate ค่าของ sequence และเรายังสามารถระบุค่าในคอลัมน์นี้ได้เอง แต่ไม่สามารถระบุค่า NULL ยกเว้นเราใช้ BY DEFAULT ON NULL)
จำไว้ว่า Identity คอลัมน์คือการสร้าง Sequence ดังนั้น USER ต้องมีสิทธิ์ในการสร้าง Sequence นะครับ
ขอใช้ตัวอย่างจาก Oracle Document มานำเสนอนะครับ
หวังว่าจะมีประโยชน์กับเพื่อนๆ นะครับ
จะเห็นว่าเราสามารถเลือก ALWAYS (Oracle จะ generate ค่าของ sequence ทุกๆครั้ง เราไม่สามารถระบุค่าเองให้กับคอลัมน์นี้) และ BY DEFAULT (Oracle จะ generate ค่าของ sequence และเรายังสามารถระบุค่าในคอลัมน์นี้ได้เอง แต่ไม่สามารถระบุค่า NULL ยกเว้นเราใช้ BY DEFAULT ON NULL)
จำไว้ว่า Identity คอลัมน์คือการสร้าง Sequence ดังนั้น USER ต้องมีสิทธิ์ในการสร้าง Sequence นะครับ
ขอใช้ตัวอย่างจาก Oracle Document มานำเสนอนะครับ
SQL> grant create table to demo;ตัวอย่างอื่นๆ
Grant succeeded.
SQL> conn demo
Enter password:
Connected.
SQL> CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY, name varchar2(20));
CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY, name varchar2(20))
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> conn / as sysdba
Connected.
SQL> grant create sequence to demo;
Grant succeeded.
SQL> conn demo
Enter password:
Connected.
SQL> CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY, name varchar2(20));
Table created.
SQL> select * from USER_TAB_IDENTITY_COLS;
TABLE_NAME COLUMN_NAME GENERATION
------------------------------ ------------------------------ ----------
IDENTITY_OPTIONS
------------------------------------------------------------------------------------------------------------------------------------------------------
T1 ID ALWAYS
START WITH: 1, INCREMENT BY: 1, MAX_VALUE: 9999999999999999999999999999, MIN_VALUE: 1, CYCLE_FLAG: N, CACHE_SIZE: 20, ORDER_FLAG: N
SQL> select * from user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K
------------------------------ ---------- ---------- ------------ - - ---------- ----------- --------------- - -
ISEQ$$_92172 1 1.0000E+28 1 N N 20 1 N N
SQL> select * from T1;
no rows selected
SQL> desc T1
Name Null? Type
----------------------------------------------------------------------------------- -------- --------------------------------------------------------
ID NOT NULL NUMBER
NAME VARCHAR2(20)
SQL> insert into T1(name) values('Surachart Opun');
1 row created.
SQL> select * from T1;
ID NAME
---------- --------------------
1 Surachart Opun
SQL> select * from user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K
------------------------------ ---------- ---------- ------------ - - ---------- ----------- --------------- - -
ISEQ$$_92172 1 1.0000E+28 1 N N 20 21 N N
SQL> insert into T1(name) values('Test Again!');
1 row created.
SQL> select * from T1;
ID NAME
---------- --------------------
1 Surachart Opun
2 Test Again!
SQL> select * from user_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY C O CACHE_SIZE LAST_NUMBER PARTITION_COUNT S K
------------------------------ ---------- ---------- ------------ - - ---------- ----------- --------------- - -
ISEQ$$_92172 1 1.0000E+28 1 N N 20 21 N N
SQL> CREATE TABLE t2 (id NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 10), Name varchar2(20));
Table created.
SQL> select * from USER_TAB_IDENTITY_COLS where table_name='T2';
TABLE_NAME COLUMN_NAME GENERATION
------------------------------ ------------------------------ ----------
IDENTITY_OPTIONS
------------------------------------------------------------------------------------------------------------------------------------------------------
T2 ID BY DEFAULT
START WITH: 100, INCREMENT BY: 10, MAX_VALUE: 9999999999999999999999999999, MIN_VALUE: 1, CYCLE_FLAG: N, CACHE_SIZE: 20, ORDER_FLAG: N
SQL> select * from t2;
no rows selected
SQL> insert into T2(name) values ('Chart');
1 row created.
SQL> select * from t2;
ID NAME
---------- --------------------
100 Chart
***************************************************************************
SQL> CREATE TABLE t3 (id NUMBER GENERATED BY DEFAULT AS IDENTITY , name varchar2(20));
Table created.
SQL> CREATE TABLE t4 (id NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY , name varchar2(20));
Table created.
SQL>
SQL>
SQL> insert into T3 values(10,'TEST');
1 row created.
SQL> insert into T4 values(10,'TEST');
1 row created.
SQL> select * from T3;
ID NAME
---------- --------------------
10 TEST
SQL> c/3/4
1* select * from T4
SQL> /
ID NAME
---------- --------------------
10 TEST
SQL> insert into T3(name) values ('Chart');
1 row created.
SQL> c/3/4
1* insert into T4(name) values ('Chart')
SQL> /
1 row created.
SQL> select * from T3;
ID NAME
---------- --------------------
10 TEST
1 Chart
SQL> select * from T4
2 /
ID NAME
---------- --------------------
10 TEST
1 Chart
SQL> insert into T3 values(NULL,'AAA');
insert into T3 values(NULL,'AAA')
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("DEMO"."T3"."ID")
SQL> c/3/4
1* insert into T4 values(NULL,'AAA')
SQL> /
1 row created.
SQL> select * from t4;
ID NAME
---------- --------------------
10 TEST
1 Chart
2 AAA
SQL> CREATE TABLE t5 (id NUMBER GENERATED ALWAYS AS IDENTITY , name varchar2(20));
Table created.
SQL> insert into T5 values(NULL,'AAA')
2 /
insert into T5 values(NULL,'AAA')
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always identity column
SQL> insert into T5 values(1,'AAA')
2 /
insert into T5 values(1,'AAA')
*
ERROR at line 1:
ORA-32795: cannot insert into a generated always identity column
SQL> insert into T5(name) values('TEST');
1 row created.
SQL> select * from T5;
ID NAME
---------- --------------------
1 TEST
หวังว่าจะมีประโยชน์กับเพื่อนๆ นะครับ
12c กับคอลัมน์ INVISIBLE และ set colinvisible
ฐานข้อมูลออราเคิล 12c นั้นเราสามารถเซต COLUMN ที่เราไม่ต้องการนั้น Invisible (ไม่ปรากฏหรือโชว์เมื่อเราดึงข้อมูล) แต่เรายังสามารถ INSERT/UPDATE ข้อมูลใน COLUMN (Invisible) นั้นได้ ...แถมยังเอาไปใช้สร้าง INDEX ได้อีกด้วย
อย่างไรก็ดี COLUMN ที่เราต้องการเซตเป็น INVISIBLE ไม่ควรมี default (NOT NULL)
SET COLINVISIBLEตัวอย่าง
ใช้ในการโชว์ข้อมูล column ที่ invisible
SQL> show colinvisibleจะพบว่าเราสามารถ INSERT/UPDATE หรือ SELECT ข้อมูลจาก column ที่ invisible ได้ด้วยการระบุชื่อ column
colinvisible OFF
SQL>
SQL> create table mytable(col1 number, col2 varchar2(20) invisible);
Table created.
SQL> desc mytable
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER
SQL> insert into mytable (col1,col2) values (1,'Surachart Opun');
1 row created.
SQL> select * from mytable;
COL1
----------
1
SQL>
SQL> show colinvisible
colinvisible OFF
SQL>
SQL> set colinvisible on
SQL> show colinvisible
colinvisible ON
SQL>
SQL>
SQL> desc mytable
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER
COL2 (INVISIBLE) VARCHAR2(20)
SQL>
SQL> select * from mytable;
COL1
----------
1
SQL> select COL1, COL2 from mytable;
COL1 COL2
---------- --------------------
1 Surachart Opun
SQL>
SQL> set colinvisible off
SQL> desc mytable
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER
SQL>
SQL>
SQL> select COL1, COL2 from mytable;
COL1 COL2
---------- --------------------
1 Surachart Opun
อย่างไรก็ดี COLUMN ที่เราต้องการเซตเป็น INVISIBLE ไม่ควรมี default (NOT NULL)
SQL> create table mytable(col1 number, col2 varchar2(20) not null);จะเห็นว่าเกิด Error ดังตัวอย่าง... เราจึงควรเช็คให้ดี หรือแจ้งให้ Developer ทราบ ^______________^
Table created.
SQL> alter table mytable modify (col2 invisible);
Table altered.
SQL> desc mytable
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER
SQL> insert into mytable values (1);
insert into mytable values (1)
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("DEMO"."mytable"."COL2")
SQL>
SQL>
SQL> desc mytable
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER
SQL>
SQL> show colinvisible
colinvisible OFF
SQL> set colinvisible on
SQL>
SQL> desc mytable
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER
COL2 (INVISIBLE) NOT NULL VARCHAR2(20)
SQL>
SQL> insert into mytable values (1,'Surachart Opun');
insert into mytable values (1,'Surachart Opun')
*
ERROR at line 1:
ORA-00913: too many values
SQL> desc mytable
Name Null? Type
----------------------------------------- -------- ----------------------------
COL1 NUMBER
COL2 (INVISIBLE) NOT NULL VARCHAR2(20)
SQL> insert into mytable (col1,col2) values (1,'Surachart Opun');
1 row created.
วันเสาร์ที่ 10 สิงหาคม พ.ศ. 2556
เรียน row_limiting_clause บนฐานข้อมูลออราเคิล 12c
ผมได้มีโอกาสในการอ่านเกี่ยวกับ row_limiting_clause บนฐานข้อมูลออราเคิล 12c ผมคิดว่าเป็นเรื่องที่น่าสนใจ ผมเลยนำมาแชร์ต่อเพื่อนๆ ดังที่ทราบกันว่าบนฐานข้อมูล 12c เราสามารถจำกัดจำนวนแถวที่ต้องการ จากการดึงข้อมูล หรือจำกัดเป็นเปอร์เซนต์ พร้อมกันนี้เรายังสามารถข้ามแถวของข้อมูลที่ไม่ต้องการ ก่อนที่จะทำการจำกัดแถวที่ต้องการ เพื่อแสดงข้อมูลออกมา
ตัวอย่าง
ตัวอย่าง
SQL> show user;
USER is "SCOTT"
SQL> select empno from emp
2 ;
EMPNO
----------
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
14 rows selected.
เริ่มต้นเพื่อดูข้อมูลก่อน
SQL> select empno from emp order by empno;
EMPNO
----------
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934
14 rows selected.
ดึงข้อมูล 5 แถวแรก
SQL> select empno from emp order by empno fetch first 5 rows only;
EMPNO
----------
7369
7499
7521
7566
7654
อยากได้ข้อมูลแถวที่ 6 - 10ผมจำได้ว่าผมเคยเขียน "query เอาข้อมูล max อันดับที่ 3 เท่านั้น"
SQL> select empno from emp order by empno offset 5 rows fetch first 5 rows only;
EMPNO
----------
7698
7782
7788
7839
7844
SQL> create table test as select * from all_objects;ว้าวกว่าจะได้! ดังนั้นขอใช้ 12c row_limiting_clause ^______________^
Table created.
SQL> column OBJECT_NAME format a30
SQL>
SQL>
SQL> select * from (select * from (select object_name , object_id from test order by object_id desc) where rownum <=3 order by object_id) where rownum <=1;
OBJECT_NAME OBJECT_ID
------------------------------ ----------
BONUS 91952
SQL> select object_name , object_id from test order by object_id desc offset 2 rows fetch first 1 rows only;จะเห็นว่าสะดวกขึ้นมากเลย...
OBJECT_NAME OBJECT_ID
------------------------------ ----------
BONUS 91952
เซต VARCHAR2 32767 byte (limit) บนฐานข้อมูลออราเคิล12c
ดังที่เราทราบกันดีว่าบนฐานข้อมูลออราเคิลนั้นเราสามารถเซต varchar2 ได้ 4000 ไบต์ แม้แต่บนฐานข้อมูลออราเคิล 12c อย่างไรก็ดีในบางครั้ง เราอาจต้องการให้ varchar2 มากกว่า 4000 ไบต์
ฐานข้อมูลออราเคิล 12c เราสามารถควบคุมขนาดของ VARCHAR2, NVARCHAR2, และ RAW ด้วยพารามิเตอร์ MAX_STRING (เปลี่ยนค่าในพารามิเตอร์นี้ ใน Upgrade โหมด นะครับ)
ดังนั้นควรพิจารณาให้ดีเสียก่อน!
การเปลี่ยนค่า MAX_STRING_SIZE ทำได้โดยการ startup ฐานข้อมูลที่ "UPGRADE" โหมด จากนั้น "ALTER SYSTEM" ตามด้วยรัน "utl32k.sql"... เมื่อเรียบร้อยก็ restart ฐานข้อมูลเข้าสู่โหมดปกติ
ตัวอย่าง
อ่านเพิ่มเติมได้ที่ Oracle Documents (Oracle Database Reference 12C) นะครับ
ฐานข้อมูลออราเคิล 12c เราสามารถควบคุมขนาดของ VARCHAR2, NVARCHAR2, และ RAW ด้วยพารามิเตอร์ MAX_STRING (เปลี่ยนค่าในพารามิเตอร์นี้ ใน Upgrade โหมด นะครับ)
Syntax MAX_STRING_SIZE = { STANDARD | EXTENDED }การเปลี่ยนแปลงค่า MAX_STRING_SIZE สามารถเปลี่ยนจาก STANDARD => EXTENDED แต่ไม่สามารถเปลี่ยนจาก EXTENDED => STANDARD
ดังนั้นควรพิจารณาให้ดีเสียก่อน!
การเปลี่ยนค่า MAX_STRING_SIZE ทำได้โดยการ startup ฐานข้อมูลที่ "UPGRADE" โหมด จากนั้น "ALTER SYSTEM" ตามด้วยรัน "utl32k.sql"... เมื่อเรียบร้อยก็ restart ฐานข้อมูลเข้าสู่โหมดปกติ
ตัวอย่าง
SQL> show user;หวังว่าตัวอย่างสามารถทำให้เพื่อนๆ เข้าใจได้ง่ายขึ้นนะครับ.
USER is "DEMO"
SQL>
SQL> show parameter max_string_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string STANDARD
SQL>
SQL> create table mytest (a varchar2(32767));
create table mytest (a varchar2(32767))
*
ERROR at line 1:
ORA-00910: specified length too long for its datatype
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup upgrade
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2287864 bytes
Variable Size 452986632 bytes
Database Buffers 788529152 bytes
Redo Buffers 8859648 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL> show parameter MAX_STRING_SIZE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string STANDARD
SQL> alter system set max_string_size=EXTENDED;
System altered.
SQL>
SQL>
SQL> @?/rdbms/admin/utl32k.sql
Session altered.
DOC>#######################################################################
DOC>#######################################################################
DOC> The following statement will cause an "ORA-01722: invalid number"
DOC> error if the database has not been opened for UPGRADE.
DOC>
DOC> Perform a "SHUTDOWN ABORT" and
DOC> restart using UPGRADE.
DOC>#######################################################################
DOC>#######################################################################
DOC>#
no rows selected
DOC>#######################################################################
DOC>#######################################################################
DOC> The following statement will cause an "ORA-01722: invalid number"
DOC> error if the database does not have compatible >= 12.0.0
DOC>
DOC> Set compatible >= 12.0.0 and retry.
DOC>#######################################################################
DOC>#######################################################################
DOC>#
PL/SQL procedure successfully completed.
Session altered.
.
.
.
SQL> select INSTANCE_NAME,STATUS from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
noncdb OPEN MIGRATE
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup
ORACLE instance started.
Total System Global Area 1252663296 bytes
Fixed Size 2287864 bytes
Variable Size 452986632 bytes
Database Buffers 788529152 bytes
Redo Buffers 8859648 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL> select INSTANCE_NAME,STATUS from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
noncdb OPEN
SQL>
SQL> conn demo
Enter password:
Connected.
SQL>
SQL>
SQL> show user
USER is "DEMO"
SQL>
SQL> show parameter max_string_size
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
max_string_size string EXTENDED
SQL>
SQL>
SQL> create table mytest (a varchar2(32767));
Table created.
SQL> desc mytest
Name Null? Type
----------------------------------------- -------- ----------------------------
A VARCHAR2(32767)
อ่านเพิ่มเติมได้ที่ Oracle Documents (Oracle Database Reference 12C) นะครับ
วันศุกร์ที่ 12 กรกฎาคม พ.ศ. 2556
ง่ายๆ ชิลๆ Oracle SQL Developer 4.0
วันนี้ได้อ่านบทความบน LinkedIn และ พบว่าเราสามารถดาว์นโหลด Oracle SQL Developer 4.0 ดังนั้นขอนำมาฝากเพื่อนๆ สิ่งแรกที่เราต้องมีคือ JDK 1.7
หลังจากดาว์นโหลด Oracle SQL Developer 4.0 ก็ Unzip :) สิ่งที่ควรรู้ ฟีเจอร์ใหม่ และคู่มือ
ตัวอย่าง: Find Database Object - Search
หลังจากดาว์นโหลด Oracle SQL Developer 4.0 ก็ Unzip :) สิ่งที่ควรรู้ ฟีเจอร์ใหม่ และคู่มือ
ตัวอย่าง: Find Database Object - Search
สมัครสมาชิก:
บทความ (Atom)