達夢數據庫之disql體驗優化


前言

作為運維過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中依然可以實現,只不過需要我們稍稍的對它進行一下“升級”。

升級步驟:

  1. 下載並安裝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
    
  2. 使用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】清空當前屏幕顯示

https://eco.dameng.com/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM