背景
在建立好Oracle 12CR2 in Docker 後,開始要摸索其使用方式,讓我要做的 Archive DB 功能可以運作。
而這幾乎每走一步,就會遇到些問題,然後寫下對應對筆記下來。
這邊,就速記下,這一天之中,所碰到的議題。
重點項目:
- 在建立USER / Schema時,才了解 Oracle 12C開始的架構:CDB / PDB (container概念)
- 遇到問題:ORA-65096: invalid common user or role name
- 建立Database Link:建立Public – 由sys建立後,各User使用。
- 遇到問題:ORA-01031: insufficient privileges
- 遇到問題:ORA-01017: invalid username/password; logon denied
技術開始
Oracle 12C的架構概念:CDB & PDB
( https://is.gd/LIcaDM – 架構說明&ORA-65096問題原因 )
- 查詢目前所在的PDB:select sys_context('USERENV', 'CON_NAME') from dual;
- 切換至目標的PDB: alter session set container=ARCH_PDB;
- 「CDB$ROOT」可以想像為之前Oracle 下的sys相關的table 資訊。
- 在「CDB$ROOT」下是無法建立USER的,會得到此ORA-65096: invalid common user or role name。
- 切換後就可以正常建立USER。
建立USER後它無法連線 – 要給予相關授權
(https://t.ly/yMvwy - 相關角色&授權 | )
- 要讓SQL Develop Tool 可以連線,要「GRANT CONNECT to XXXUSER;」
- 其它的就參考文章去授權。
而其中,SQL Develop Tool 的連線,若要用該User連線至其PDB的話,要選擇「Service Name 」(用sys連線時是用SID)
不然會一直出現 帳/密 錯誤。
建立Database Link - 遇到 USER 帳/密錯誤的問題
建立Database Link 的語法: (使用Using connection string )
CREATE PUBLIC DATABASE LINK "DBLINK_LIVE"
CONNECT TO "targetUser" IDENTIFIED BY "XXX(密碼)XXX"
USING '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 22.22.22.22)(PORT = 1521))) (CONNECT_DATA = (SID = XXXX)(SERVER = DEDICATED)))';