前言
作為運維過MySQL或者Oracle的DBA來說,在Linux版本的數據庫安裝完成之后,可能通常更喜歡使用其自帶的命令行工具進行數據庫連接,並進行一些常規的數據庫操作。所以,在安裝完達夢數據庫之后,大家可能順理成章的也會使用disql進行數據庫的日常操作。這時,可能會遇到一些使用上的小問題,總感覺DM的disql工具有那么一些些的不順手,本篇文章總結了一些大家可能會遇到的問題,希望對大家使用disql有所幫助。
快速啟動
在安裝完DM數據庫之后,我們通常會切換到dmdba這個用戶對數據庫進行操作。(希望大家也養成這樣一個好習慣,因為這樣可以避免安全問題和一些莫名其妙的權限問題),在命令行輸入disql后回車,提示找不到該命令。
[root@localhost ~]# su - dmdba
Last login: Mon Feb 28 14:50:07 CST 2022 on pts/2
[dmdba@localhost ~]$ disql
bash: disql: command not found...
經常使用Linux的同學可能會知道,這應該是沒有正確設置disql可執行程序的路徑到PATH環境變量,那么,我們現在就把達夢數據庫的bin目錄設置的dmdba用戶的.bash_profile環境變量文件中。
# 編輯環境變量文件
[dmdba@localhost ~]$ vim ~/.bash_profile
#添加如下兩行記錄,其中DM_HOME表示DM數據庫的安裝路徑
DM_HOME=/opt/dmdb/dmdbms
export PATH=$PATH:$DM_HOME/bin
# 使用source命令,讓配置文件立即生效
source ~/.bash_profile
[dmdba@localhost ~]$ disql
disql: error while loading shared libraries: libdisql_dll.so: cannot open shared object file: No such file or directory
在配置PATH環境變量生效之后,執行disql又報錯,提示不能找到共享庫文件。網上有朋友說cd到達夢的bin目錄再執行disql即可解決。果然,當我們cd到DM數據庫的bin目錄下之后再啟動disql,就能正常啟動了。
[dmdba@localhost dmdb]$ cd $DM_HOME/bin
[dmdba@localhost bin]$ disql
disql V8
用戶名:
不過,這好像失去了配置PATH變量后在任何目錄都能啟動disql的便利性。其實,出現上述錯誤的環境是因為LD_LIBRARY_PATH還沒有將DM的bin目錄加入,因為disql程序引用了該路徑的庫文件。
# 編輯環境變量文件
[dmdba@localhost ~]$ vim ~/.bash_profile
#添加如下記錄,其中DM_HOME表示DM數據庫的安裝路徑
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
# 使用source命令,讓配置文件立即生效
source ~/.bash_profile
[dmdba@localhost dmdb]$ disql
disql V8
用戶名:
至此,快速啟動disql圓滿的問題解決了。
刪除鍵無效
在disql使用過程中,有的同學打錯了命令,想利用鍵盤上的backspace刪除回退鍵修改,卻遭到了無情的拒絕,就像下面這樣:
# 或者出現^[[3~亂碼
[dmdba@localhost ~]$ disql
disql V8
用戶名:
密碼:
服務器[LOCALHOST:5236]:處於普通打開狀態
登錄使用時間 : 7.471(ms)
SQL> creattee^[[3~^[[3~^[[3~^[[3~
# 或者出現^H的亂碼
[dmdba@localhost ~]$ disql
disql V8
用戶名:
密碼:
服務器[LOCALHOST:5236]:處於普通打開狀態
登錄使用時間 : 2.407(ms)
SQL> created^H^H^H^H
出現該問題通常是因為大家使用的SSH命令行終端工具鍵盤設置問題,一般可以在xshell等工具的【當前會話屬性】→ 【終端】→【鍵盤】→【BACKSPLACE鍵序列】選擇使用ASCII 127即可解決。
結果集輸出到文件
有些SQL查詢返回的結果太長,可能在命令行上查看不太方便,這個時候我們可以將查詢結果輸出到一個文件中,拷貝到windows個人電腦上利用強大的文本編輯器進行查看,此時,可以使用spool命令導出輸出結果到指定文件
SQL> spool /tmp/tablespace_useage.txt
SQL> select * from SYS.DBA_FREE_SPACE;
# 還可以就本地臨時調用操作系統命令(less、more、cat等等)驗證導出結果
SQL> host more /tmp/tablespace_useage.txt
更強大的disql命令行
有時候執行的命令實在太多,想要復制之前執行的SQL命令。又或者輸入了很長的SQL之后發現其中一個字母順序寫反了,你想將光標移動回去僅僅修改某處錯誤的地方,發現已經不能使用←和→方向鍵移動回去了😭。再或者你想直接刪除一整行、一個單詞等等,這個時候你可能已經開始懷念Linux命令行的強大功能,同時對disql不支持這樣的功能感到一絲絲遺憾。
不要灰心,這些在disql中依然可以實現,只不過需要我們稍稍的對它進行一下“升級”。
升級步驟:
-
下載並安裝rlwrap命令行工具(rlwrap可以通過下載rpm等軟件包安裝,也可以通過github下載源碼包切換root賬號進行編譯安裝)
wget https://github.com/hanslub42/rlwrap/releases/download/v0.45.2/rlwrap-0.45.2.tar.gz tar -zxvf rlwrap-0.45.2.tar.gz cd rlwrap-0.45.2 ./configure make && make install
-
使用rlwrap disql命令代替disql命令
su - dmdba rlwrap disql SYSDBA/SYSDBA@localhost # 或者給disql設置一個別名(如果需要永久生效,請將下面別名命令設置到.bash_profile環境變量文件) alias disql='rlwrap disql' disql SYSDBA/SYSDBA@localhost
現在,你不僅可以使用方向鍵←和→進行光標定位(ctrl+←或ctrl+→以單詞為單位左右移動光標)、方向鍵↑和↓進行前后翻頁歷史記錄,還可以可以使用:
-
【CTRL+R】搜索SQL歷史
-
【ALT+D】刪除光標后的一個單詞
-
【ALT+backspace】刪除光標前一個單詞
-
【CTRL+K】刪除該行光標后的所有字符
-
【CTRL+U】刪除該行光標前的所有字符
-
【CTRL+L】清空當前屏幕顯示