温馨提示×

Linux SQLPlus与Windows有何差异

小樊
43
2025-12-28 11:55:03
栏目: 云计算

Linux 与 Windows 上 SQL*Plus 的差异

总体说明 两者在核心功能上一致:都是 Oracle 的字符模式客户端,通过 Oracle Net 连接数据库,客户端与服务端平台可以不同(例如 Linux 客户端连接 Windows 服务器或反之)。差异主要体现在终端交互、环境配置、历史与编辑、字符显示及日常使用习惯等方面。

主要差异对比

维度 Linux Windows
交互与行编辑 原生不提供方向键历史回调与光标移动;可借助 rlwrapuniread 提供 readline 能力(上下键、光标移动、搜索等) 在命令窗口中可直接用方向键回调历史、移动光标,编辑体验与常见终端一致
历史与日志 使用 rlwrap/uniread 后,可记录会话历史、支持日志文件(如 rlwrap 的 -l 选项) 无内置会话历史文件;如需留存输出,通常通过 SPOOL 到文件
终端与退格显示 终端不匹配时常见退格显示为 ^H;可用 stty erase ^H 修正 一般无退格显示问题
启动与路径 可执行文件通常为 $ORACLE_HOME/bin/sqlplus;需设置 ORACLE_HOME、PATH、LD_LIBRARY_PATH 等环境变量 开始菜单提供快捷方式;可执行文件通常为 %ORACLE_HOME%\BIN\sqlplus.exe
图形版客户端 无内置图形版 早期存在字符版 sqlplus.exe 与图形版 sqlplusw.exe;现代版本以字符版为主
字符集与显示 易出现中文乱码;需统一 NLS_LANG 与终端编码(如 AL32UTF8 与 UTF-8 终端) 同样依赖 NLS_LANG;图形终端下字体/代码页配置影响显示
连接串写法 支持 Easy Connect:如 host:port/service;也支持 tnsnames.ora 别名 同样支持 Easy Connecttnsnames.ora 别名
脚本与非交互 常用 -S/nolog 静默模式配合 here-document 执行脚本并捕获输出 同样可用 -S/nolog;脚本化调用与输出捕获方式一致

要点说明与示例

  • 历史与编辑

    • Linux 原生不支持方向键回调;使用 rlwrap 后可直接用上下键与光标键:
      • 安装(示例):yum install -y rlwrap(或源码安装)
      • 使用:rlwrap sqlplus / as sysdba
      • 建议别名:echo “alias sqlplus=‘rlwrap sqlplus’” >> ~/.bash_profile
    • 也可用 uniread 为 sqlplus 增加 readline 支持(需 Perl 与 readline 库)。
  • 退格与终端设置

    • Linux 终端不匹配时退格显示为 ^H,可在 oracle 用户环境执行:stty erase ^H(写入 ~/.bash_profile 可持久化)。
  • 环境启动与路径

    • Linux:需正确设置 ORACLE_HOME、PATH、LD_LIBRARY_PATH,例如:
      • export ORACLE_HOME=/u01/app/oracle/product/12.2.0/db_1
      • export PATH=$ORACLE_HOME/bin:$PATH
      • export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    • Windows:开始菜单快捷方式通常指向 %ORACLE_HOME%\BIN\sqlplus.exe
  • 字符集与显示

    • 查询与设置示例:
      • 查看:select userenv(‘language’) from dual;
      • 建议统一:export NLS_LANG=AMERICAN_AMERICA.AL32UTF8(与终端编码一致以避免中文乱码)。
  • 连接写法与脚本化

    • 连接串示例:
      • 别名:sqlplus scott/tiger@orcl
      • Easy Connect:sqlplus scott/tiger@host:1521/orcl
    • 静默执行与日志(Linux/Windows 通用):
      • sqlplus -S /nolog <<‘EOF’ connect scott/tiger@orcl set heading off feedback off pagesize 0 select * from dual; exit EOF

0