如何通过SQL*Plus在CentOS上高效查看数据库表结构,快速掌握详细细节?
- 内容介绍
- 文章标签
- 相关推荐
在 CentOS 程序中使用 Oracle 的交互式工具 SQL*Plus 来查看表结构往往是日常管理工作的主要环节。但很多 DBA 与开发者会遇到以下痛点:
-
安装
SQL*Plus时依赖不完整导致无法启动; - 不确定应该查询哪张程序视图才能得到完整的字段信息;
- 默认的行宽和分页设置导致输出被截断,难以一次性看到所有列;
- 跨网站迁移时脚本失效,导致工作效率骤降。
一、环境准备 & 安装 SQL*Plus
1️⃣ 安装 Oracle 客户端
# 使用 yum 或 dnf 安装 oracle-instantclient-basic 与 oracle-instantclient-sqlplus
sudo yum install -y oracle-instantclient19.11-basic oracle-instantclient19.11-sqlplus
# 若没有对应版本,可先下载 RPM 并手动安装:
# rpm -Uvh https://download.oracle.com/otn_software/linux/instantclient/1911/oracle-instantclient19.11-basic.x86_64.rpm
# rpm -Uvh https://download.oracle.com/otn_software/linux/instantclient/1911/oracle-instantclient19.11-sqlplus.x86_64.rpm
2️⃣ 配置 ORACLE_HOME 与 LD_LIBRARY_PATH
# 如果你希望使用完整的 Oracle 客户端。请设置环境变量:
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
echo 'export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1'>> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH'>> ~/.bashrc
source ~/.bashrc
完成后执行 sqlplus -v 检查版本是否正常。
二、连接到目标数据库
痛点:"我不知道如何正确拼接连接字符串"
# 常见连接方式:使用者名/密码@主机:端口/SID 或服务名
sqlplus scott/tiger@localhost:1521/orcl
# 如果你使用服务名:
sqlplus scott/tiger@//localhost:1521/XE
# 登录成功后即可进入交互式提示符:
SQL>
三、快速查看表结构 – DESCRIBE 与 USER_TAB_COLUMNS
痛点:"I want to see more than just column names."
a) 简单列信息
# 单行命令即可看到列名、数据类型及可否为空等基本属性
SQL> DESCRIBE employees;其实,Name Null?Type
------- ------ ----------------------------
EMP_ID NOT NULL NUMBER
FIRST_NAME VARCHAR2
LAST_NAME VARCHAR2
...
b) 详细列信息
# 更丰富的字段描述,包括长度、默认值、注释等
SQL> SELECT COLUMN_NAME。DATA_TYPE,DATA_LENGTH,NULLABLE,DATA_DEFAULT,COMMENTS
FROM USER_TAB_COLUMNS c
LEFT JOIN USER_COL_COMMENTS cm
ON c.TABLE_NAME = cm.TABLE_NAME
AND c.COLUMN_NAME = cm.COLUMN_NAME
WHERE TABLE_NAME = 'EMPLOYEES';COLUMN_NAME | DATA_TYPE | DATA_LENGTH | NULLABLE | DATA_DEFAULT | COMMENTS
--------------+-----------+-------------+----------+--------------+-----------------
EMP_ID | NUMBER | 6 | N | |
FIRST_NAME | VARCHAR2 | 20 | Y | |
...
⚠️ 注意事项:表名必须大写!
如果不是使用者拥有的表,请使用 SYS 或 PUBLIC 的视图。
四、查看索引、主键、外键与触发器
-
索引:
SQl> SELECT INDEX_NAME。TABLE_OWNER,TABLE_NAME FROM ALL_INDEXES WHERE TABLE_OWNER='SCOTT' AND TABLE_NAME='EMPLOYEES';
or 简化为:
SQl> SELECT * FROM USERINDEXES WHERE TABLENAME='EMPLOYEES';
-
主键:
SQl> SELECT CONSTRAINT_ID,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='P' AND TABLE_NAME='EMPLOYEES';
-
外键:
SQl> SELECT CONSTRAINTID,RCONSTRAINTNAME FROM USERCONSTRAINTS WHERE CONSTRAINTTYPE='R' AND TABLENAME='EMPLOYEES';
-
触发器:
SQl> SELECT TRIGGER_NAME FROM USER_TRIGGERS WHERE TABLE_NAME='EMPLOYEES';

小技巧如果你只想确认某个约束是否存在可以直接查询 USER_CONSTRAINTS无需拆分。
五、调整显示行数与宽度。让输出更友好
`SQL*Plus` 默认分页很短,列宽受限。可以通过下面两条命令一次性调整:
# 设置页面大小为无穷大。防止分页中断输出
SET PAGESIZE 50000
SET LINESIZE 200
echo "SET PAGESIZE 50000">> ~/.sqlplshrc
echo "SET LINESIZE 200">> ~/.sqlplshrc
六、跨网站一致性:从 Ubuntu 到 CentOS 的迁移要点
-
包管理工具不同:Ubuntu 用 `apt-get`,CentOS 用 `yum/dnf`。
-
Oracle 客户端 RPM 包方法可能不同,需要更新 `
在 CentOS 程序中使用 Oracle 的交互式工具 SQL*Plus 来查看表结构往往是日常管理工作的主要环节。但很多 DBA 与开发者会遇到以下痛点:
-
安装
SQL*Plus时依赖不完整导致无法启动; - 不确定应该查询哪张程序视图才能得到完整的字段信息;
- 默认的行宽和分页设置导致输出被截断,难以一次性看到所有列;
- 跨网站迁移时脚本失效,导致工作效率骤降。
一、环境准备 & 安装 SQL*Plus
1️⃣ 安装 Oracle 客户端
# 使用 yum 或 dnf 安装 oracle-instantclient-basic 与 oracle-instantclient-sqlplus
sudo yum install -y oracle-instantclient19.11-basic oracle-instantclient19.11-sqlplus
# 若没有对应版本,可先下载 RPM 并手动安装:
# rpm -Uvh https://download.oracle.com/otn_software/linux/instantclient/1911/oracle-instantclient19.11-basic.x86_64.rpm
# rpm -Uvh https://download.oracle.com/otn_software/linux/instantclient/1911/oracle-instantclient19.11-sqlplus.x86_64.rpm
2️⃣ 配置 ORACLE_HOME 与 LD_LIBRARY_PATH
# 如果你希望使用完整的 Oracle 客户端。请设置环境变量:
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
echo 'export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1'>> ~/.bashrc
echo 'export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH'>> ~/.bashrc
source ~/.bashrc
完成后执行 sqlplus -v 检查版本是否正常。
二、连接到目标数据库
痛点:"我不知道如何正确拼接连接字符串"
# 常见连接方式:使用者名/密码@主机:端口/SID 或服务名
sqlplus scott/tiger@localhost:1521/orcl
# 如果你使用服务名:
sqlplus scott/tiger@//localhost:1521/XE
# 登录成功后即可进入交互式提示符:
SQL>
三、快速查看表结构 – DESCRIBE 与 USER_TAB_COLUMNS
痛点:"I want to see more than just column names."
a) 简单列信息
# 单行命令即可看到列名、数据类型及可否为空等基本属性
SQL> DESCRIBE employees;其实,Name Null?Type
------- ------ ----------------------------
EMP_ID NOT NULL NUMBER
FIRST_NAME VARCHAR2
LAST_NAME VARCHAR2
...
b) 详细列信息
# 更丰富的字段描述,包括长度、默认值、注释等
SQL> SELECT COLUMN_NAME。DATA_TYPE,DATA_LENGTH,NULLABLE,DATA_DEFAULT,COMMENTS
FROM USER_TAB_COLUMNS c
LEFT JOIN USER_COL_COMMENTS cm
ON c.TABLE_NAME = cm.TABLE_NAME
AND c.COLUMN_NAME = cm.COLUMN_NAME
WHERE TABLE_NAME = 'EMPLOYEES';COLUMN_NAME | DATA_TYPE | DATA_LENGTH | NULLABLE | DATA_DEFAULT | COMMENTS
--------------+-----------+-------------+----------+--------------+-----------------
EMP_ID | NUMBER | 6 | N | |
FIRST_NAME | VARCHAR2 | 20 | Y | |
...
⚠️ 注意事项:表名必须大写!
如果不是使用者拥有的表,请使用 SYS 或 PUBLIC 的视图。
四、查看索引、主键、外键与触发器
-
索引:
SQl> SELECT INDEX_NAME。TABLE_OWNER,TABLE_NAME FROM ALL_INDEXES WHERE TABLE_OWNER='SCOTT' AND TABLE_NAME='EMPLOYEES';
or 简化为:
SQl> SELECT * FROM USERINDEXES WHERE TABLENAME='EMPLOYEES';
-
主键:
SQl> SELECT CONSTRAINT_ID,CONSTRAINT_TYPE FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='P' AND TABLE_NAME='EMPLOYEES';
-
外键:
SQl> SELECT CONSTRAINTID,RCONSTRAINTNAME FROM USERCONSTRAINTS WHERE CONSTRAINTTYPE='R' AND TABLENAME='EMPLOYEES';
-
触发器:
SQl> SELECT TRIGGER_NAME FROM USER_TRIGGERS WHERE TABLE_NAME='EMPLOYEES';

小技巧如果你只想确认某个约束是否存在可以直接查询 USER_CONSTRAINTS无需拆分。
五、调整显示行数与宽度。让输出更友好
`SQL*Plus` 默认分页很短,列宽受限。可以通过下面两条命令一次性调整:
# 设置页面大小为无穷大。防止分页中断输出
SET PAGESIZE 50000
SET LINESIZE 200
echo "SET PAGESIZE 50000">> ~/.sqlplshrc
echo "SET LINESIZE 200">> ~/.sqlplshrc
六、跨网站一致性:从 Ubuntu 到 CentOS 的迁移要点
-
包管理工具不同:Ubuntu 用 `apt-get`,CentOS 用 `yum/dnf`。
-
Oracle 客户端 RPM 包方法可能不同,需要更新 `

