Oracle Database 12c กับ sqlplus
กระทั่งติดตั้ง Oracle DB 12c สำเร็จไปแล้วบน Docker จึงมานึกถึงเครื่องมือตัวฉกาจที่ไม่อาจตัดใจได้ มันเรียก sqlplus ว่าแต่…จะเรียกมันมาทำงานได้อย่างไร?
ตรงไปที่บทความก่อนหน้านี้ก่อน มันคือต้นเหตุ
ขณะที่ผมเล่นอยู่นั้นก็ได้เปลี่ยนจากแบบ standard เป็น enterprise และหลังจากนั้นก็ยาวไปไม่ได้มาแตะอีกเลย กระทั่งตอนนี้…ลืมแล้ว
ปัญหาคือ sqlplus อยู่ไหน? จะเรียกมาทำงานได้อย่างไร?
เรากลับมาทบทวนและทำทุกอย่างใหม่อีกครั้งดีไหม?
ดีสิ!
งั้นก่อนอื่นมาดูก่อนว่า container เจ้ากรรมที่มีเป็นอย่างไรบ้าง ผมจะต้องหยุดการทำงานของมัน สั่งลบและสร้างใหม่พร้อมกับคำสั่งบางประการที่ตอนนั้นมิได้พ่นออกไป
1.ดู container ทั้งหมดที่มี
docker ps -a
ได้ผลดังขณะนี้
2.หยุดการทำงานของ container ตัวนี้ โดยใช้ container id (ระบุแค่บางส่วน คือแค่ให้มันรู้เท่านั้นพอ กรณีนี้มีอยู่ตัวเดียวเอง)
docker stop e3b
เคร มันตายแล้ว
3.ลบมันทิ้งไป
docker rm e3b
เรียบร้อย
หมายเหตุ อันที่จริงขั้นตอนการ หยุด และ ลบ container ไม่จำเป็นต้องทำนะครับ เราแค่สร้าง container ตัวใหม่จาก image ตัวเดิม โดยมีข้อแม้นิดเดียวคือ ชื่อที่ตั้งให้กับ container ตัวใหม่ต้องไม่ซ้ำกับ container ใดๆที่มีอยู่
4.ทีนี้กลับมาที่ image ทั้งหมดครับ
docker images
ผลลัพธ์
ช้านิด ก่อนจะสั่งสร้างและทำงาน container เราควรจะอ่านวิธีการสักเล็กน้อย
ตัดมาให้ดู
5.เริ่มสร้าง container ตัวใหม่
(เครื่องหมาย \ คือใส่แล้วมันรู้ว่าจะต้องมีขึ้นบรรทัดใหม่)
docker run --name orcl \-p 1521:1521 -p 5500:5500 \-e ORACLE_PWD=Passw@rd1234 \-e ORACLE_CHARACTERSET=TH8TISASCII \oracle/database:12.1.0.2-ee
คำสั่งข้างต้นนี้จะสร้าง container และสั่งมันทำงาน ให้เพื่อนๆคอยจนกว่ามันจะบอกว่าพร้อมนะครับ ระหว่างคอยเรามาดูรายละเอียดเล็กน้อยกัน
- port ของ oracle services ภายใน container มีสองตัว ได้แก่ Oracle Listener ที่ 1521 กับ OEM Express ที่ 5500 ผมก็ไม่เปลี่ยนจึงจับคู่ 1521 กับ 1521 และ 5500 กับ 5500 ตามนั้นเลย
- ORACLE_SID ไม่กำหนดก็ได้ จะได้ชื่อมาว่า ORCLCDB
- ORACLE_PDB ไม่กำหนดก็ได้ จะได้ชื่อมาว่า ORCLPDB1
- ORACLE_PWD คือ password เข้าใช้ ORACLE_SID
- ORACLE_CHARACTERSET คือ ชุดภาษาที่มีขนาดเป็น Bytes เลือกให้พอดีก็จะใช้ไบต์เหมาะสมและแสดงภาษาไทยได้ ผมลองยาเป็น TH8TISASCII
แล้ว sqlplus อยู่ไหน?
sqlplus เจ้ากรรมอยู่ใน container แน่ๆและผมตั้งชื่อมันว่า orcl ในตอนที่สร้าง (ที่เขียนว่า — name orcl) มีคำสั่งไหนของ Docker ที่จะทำให้ผมสามารถมุดเข้าไปใน container ได้ ฟ้าเปิด
docker exec
ตามไปอ่าน document ของ Docker กันครับ
ประกอบกับใน document ของ Oracle Images เขียนไว้ด้วย ประจวบคีรีขันธ์!
docker exec -ti <container name> sqlplus pdbadmin@ORCLPDB1
ข้างต้นคือเราเป็น PDB Admin แต่ใน doc ว่าไว้สามคน ได้แก่ SYS, SYSTEM และ PDBADMIN ง่ายๆว่าสามคนนี้ (ในแรกเริ่ม) ใช้ password เดียวกันหมด
เพื่อนอยากเป็นใคร เป็นนายกเหรอ? ไม่ ผมแค่อยากเป็น SYSTEM ดังนั้นร่ายมนต์
docker exec -ti orcl sqlplus system@ORCLCDB
เพื่อนๆจะสังเกตว่าเครื่องหมาย @ นั้นจะแยกระหว่าง username กับชื่อของ SID หรือ PDB ทั้งสองคืออะไรเดี๋ยวเราค่อยหาโอกาสดำดิ่ง ละไว้ในฐานที่เข้าใจก่อนว่าเราเลือกใช้ Oracle Database 12c เนี่ย เราจะพบกับพวกมัน (เวอร์เก่ากว่านี้ไม่มีนะ) ดังนั้นระดับหรือสิทธิ์ในการจัดการ resource ต่างๆก็จะมีเพิ่มขึ้น
Oop! งานเข้า password ผมตั้งเป็น Passw@rd1234 มีปัญหา
เนื่องจากเครื่องหมาย @ นี้ใช้แบ่งแยกได้ สำหรับ Oracle Database ไม่มีปัญหาแต่ไปมีกับ sqlplus แทน ใครใช้คล้ายผมมีเจ้านี่ใน password ล่ะก็ งานนี้ทางตันจ้า รีบเอามันออกซะ
ผมเปิด SQL Develop ขึ้นมาแล้วเปลี่ยน @ เป็น o (โอ) แทน
alter user system identified by "Password1234";
พอ sqlplus ถามถึงก็ใส่ password ใหม่ลงไป
และยังมีอีกหลายหนทางในการเข้าใช้ sqlplus ดูจาก doc ก็ว่าใช้เครื่องหมาย / แยกระหว่าง username กับ password ได้แบบนี้
sqlplus sys/<your password>@//localhost:1521/<your SID> as sysdba
sqlplus system/<your password>@//localhost:1521/<your SID>
sqlplus pdbadmin/<your password>@//localhost:1521/<Your PDB name>
ซึ่งผมก็ลองหมด
docker exec -ti orcl sqlplus sys/Password1234@//localhost:1521/ORCLCDB as sysdbadocker exec -ti orcl sqlplus system/Password1234@//localhost:1521/ORCLCDBdocker exec -ti orcl sqlplus pdbadmin/Password1234@//localhost:1521/ORCLPDB1
หมายเหตุ ออกจาก sqlplus พิมพ์
exit หรือ quit
เพราะเรายังเป็นมือใหม่ Oracle Database นี่ก็ใหม่มาก มีหลายเครื่องมือ มีหลายแนวคิด (concept) เหลือเกินฟ้าผ่า ด้วยความคิดที่ว่าเออตั้งใจๆ มันก็ต้องมีสักวันที่พูดได้ว่าเราได้รู้จัก Oracle Database จริงๆกับเขาบ้างเน๊อะ