由于很長時(shí)間沒有用Oracle,在配置時(shí)由于疏忽大意遇到了兩個(gè)典型問題,但是網(wǎng)上給出千篇一律的解決方案似乎都解決不了我的問題。Oracle服務(wù)端裝在主機(jī)中,Oracle客戶端在虛擬機(jī)中。因此我想的是直接將數(shù)據(jù)導(dǎo)入主機(jī),然后通過虛擬機(jī)連接主機(jī)獲取數(shù)據(jù)。
1. 遠(yuǎn)程連接
網(wǎng)上給出的解決方案幾乎都只談到了如何去修改客戶端的tnsnames.ora文件以正確連接到服務(wù)端,或者是配置PL/SQL的oci.dll文件位置,但我的這此都配置好后還是一直報(bào)無法找到監(jiān)聽程序的錯(cuò)誤。最后還是通過在服務(wù)端的listener.ora添加一行記錄來解決,HOST為虛擬網(wǎng)上的IP地址,在虛擬機(jī)中能ping通此IP,如下:
# listener.ora Network Configuration File: D:\oracle\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\oracle\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.44.1)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\oracle
2.中文亂碼
由于Oracle對中文的不太友好導(dǎo)致中國用戶稍不注意就會遇到亂碼的問題,我碰到的是導(dǎo)入的數(shù)據(jù)中文都以???顯示,同樣網(wǎng)上查找一番后無非就是配置注冊表,添加環(huán)境變量,修改Oracle數(shù)據(jù)庫字符集,但是這此都開好后還是沒效果。當(dāng)我新建一張表插入中文竟然可以正常顯示,于是刪除以前的數(shù)據(jù),再進(jìn)行重新導(dǎo)入就可以解決中文亂碼的問題了。原因原來是在最初導(dǎo)入時(shí)沒有設(shè)置好字符集,雖然后面配置好了但還是無法正確顯示,因此正確做法是先設(shè)置好字符集再導(dǎo)入數(shù)據(jù)。