达梦数据库 怎么使用命令行连接 服务查看数据库里的表及sql语句
时间: 2025-07-29 10:21:07 浏览: 17
<think>我们参考用户提供的引用[^1]和[^4],其中提到达梦数据库的命令行操作。用户希望了解如何通过命令行连接达梦数据库服务,并查看数据库中的表及执行SQL语句。根据引用[^1]中“1.2 连接数据库”和“1.3 使用DISQL直接执行命令”以及引用[^4]中命令行操作的内容,我们可以总结如下:
### 连接达梦数据库(命令行方式)
#### 1. **使用 DISQL 工具连接**
DISQL 是达梦数据库自带的命令行交互工具,类似于 Oracle 的 SQL*Plus。
```bash
# 进入达梦安装目录的 bin 文件夹
cd /opt/dmdbms/bin
# 使用 DISQL 连接(按提示输入密码)
./disql SYSDBA/SYSDBA@localhost:5236
```
参数说明:
- `SYSDBA`:用户名
- `SYSDBA`:密码(默认安装时 SYSDBA 的默认密码为 SYSDBA)
- `localhost:5236`:数据库服务器地址和端口(默认端口为 5236)
#### 2. **使用 dmctl 工具连接(管理工具)**
引用[^3]提到 `dmctl` 工具,但注意该工具通常用于控制台操作(如启动停止服务),执行 SQL 建议用 DISQL。
```bash
# 连接本地数据库(示例)
./dmctl -h localhost -u SYSDBA -p SYSDBA
```
> ⚠️ 注意:实际执行 SQL 语句建议使用 DISQL,dmctl 更适用于服务控制。
---
### 查看数据库表结构
#### 方法1:使用 `DESC` 命令(类似 Oracle)
```sql
-- 查看指定表的列信息
DESC 模式名.表名;
```
示例:
```sql
DESC SYSDBA.EMPLOYEE;
```
#### 方法2:调用系统过程 `SP_TABLEDEF`(引用[^2])
```sql
-- 生成表定义语句(包含列、约束等)
CALL SP_TABLEDEF('模式名', '表名');
```
示例:
```sql
CALL SP_TABLEDEF('SYSDBA', 'EMPLOYEE');
```
#### 方法3:使用元数据函数(引用[^2])
```sql
-- 获取表的 DDL 语句
SELECT DBMS_METADATA.GET_DDL('TABLE', '表名', '模式名');
```
示例:
```sql
SELECT DBMS_METADATA.GET_DDL('TABLE', 'EMPLOYEE', 'SYSDBA');
```
---
### 执行 SQL 语句
在 DISQL 环境中直接输入 SQL 即可:
```sql
-- 查询数据
SELECT * FROM SYSDBA.EMPLOYEE;
-- 插入数据(引用[^3]示例)
INSERT INTO SYSDBA.EMPLOYEE (ID, NAME) VALUES (1, '张三');
-- 提交事务
COMMIT;
```
---
### 常用 DISQL 命令
| 命令 | 作用 |
|---------------------|--------------------------|
| `SHOW TABLES;` | 显示当前用户所有表 |
| `SELECT * FROM V$VERSION;` | 查看数据库版本 |
| `EXEC SP_OPEN_DB_LOG();` | 打开数据库日志(需权限) |
| `SP_HELP_TABLE('表名');` | 查看表详细信息 |
| `QUIT;` | 退出 DISQL |
> 💡 提示:在 DISQL 中按 `↑`/`↓` 键可翻看历史命令,输入 `/` 可重新执行上一条命令。
---
### 常见问题解决
1. **连接失败:`Network is unreachable`**
检查防火墙是否开放 5236 端口:
```bash
firewall-cmd --add-port=5236/tcp --permanent
firewall-cmd --reload
```
2. **执行 SQL 报错:`表或视图不存在`**
确认表名前是否添加了模式名(默认模式为 `SYSDBA`):
```sql
-- 错误写法
SELECT * FROM EMPLOYEE;
-- 正确写法
SELECT * FROM SYSDBA.EMPLOYEE;
```
3. **中文乱码问题**
设置 DISQL 环境变量:
```bash
export LANG=zh_CN.UTF-8
./disql ...
```
---
### 自动化脚本示例
通过 Shell 脚本执行 SQL 文件:
```bash
#!/bin/bash
/opt/dmdbms/bin/disql SYSDBA/SYSDBA@localhost:5236 \`/home/user/script.sql
```
其中 `script.sql` 内容:
```sql
-- 查询当前时间
SELECT SYSDATE FROM DUAL;
EXIT;
```
> ⚠️ 注意:脚本末尾需加 `EXIT;` 否则会停留在 DISQL 交互界面。
---
§§相关问题§§
1. 达梦数据库如何导出整个数据库的结构(不含数据)?
2. DISQL 工具中有哪些提高效率的快捷命令?
3. 达梦数据库如何实现定时自动备份?
4. 如何查看达梦数据库当前运行的 SQL 语句?
5. 达梦数据库的存储过程和函数如何编写及调用?</think>### 达梦数据库命令行操作指南
#### 一、连接达梦数据库服务
通过 DISQL 工具连接(达梦自带的命令行客户端):
```bash
# 进入达梦安装目录的bin文件夹
cd /opt/dmdbms/bin
# 连接本地数据库(默认端口5236)
./disql SYSDBA/SYSDBA@localhost:5236
# 连接远程数据库
./disql SYSDBA/密码@192.168.1.100:5236
```
参数说明:
- `SYSDBA`:默认管理员账号
- 第二个`SYSDBA`:密码(安装时设置的)
- `localhost:5236`:服务器地址和端口
#### 二、查看数据库表结构
1. **查看所有表**
```sql
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER='SYSDBA';
```
2. **查看单表结构**
```sql
-- 方法1:使用DESC命令
DESC 模式名.表名;
-- 方法2:调用系统过程(推荐)
CALL SP_TABLEDEF('SYSDBA', 'EMPLOYEE');
```
3. **导出表结构DDL**
```sql
-- 生成建表语句
SELECT DBMS_METADATA.GET_DDL('TABLE', 'EMPLOYEE', 'SYSDBA');
```
#### 三、执行SQL语句
1. **基本查询**
```sql
SELECT * FROM SYSDBA.EMPLOYEE WHERE DEPT_NO = 'D001';
```
2. **数据操作**
```sql
-- 插入数据(引用[^3])
INSERT INTO SYSDBA.EMPLOYEE (EMP_ID, EMP_NAME) VALUES (1001, '张三');
-- 更新数据
UPDATE SYSDBA.EMPLOYEE SET SALARY = 8000 WHERE EMP_ID = 1001;
-- 删除数据
DELETE FROM SYSDBA.EMPLOYEE WHERE EMP_ID = 1001;
```
3. **事务控制**
```sql
COMMIT; -- 提交事务
ROLLBACK; -- 回滚事务
```
#### 四、实用命令
| 命令 | 功能 | 示例 |
|------|------|------|
| `SHOW TABLES;` | 显示当前用户表 | - |
| `SP_HELP_TABLE('表名');` | 查看表详细信息 | `SP_HELP_TABLE('EMPLOYEE');` |
| `EXPLAIN SQL语句;` | 查看执行计划 | `EXPLAIN SELECT * FROM EMPLOYEE;` |
| `SELECT * FROM V$VERSION;` | 查看数据库版本 | - |
#### 五、常见问题解决
1. **连接失败**
```bash
# 检查服务状态
systemctl status DmServiceDMSERVER
# 手动启动服务
cd /opt/dmdbms/bin
./DmServiceDMSERVER start
```
2. **中文乱码问题**
```sql
-- 设置客户端编码
SET NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8';
```
3. **权限不足**
```sql
-- 授予权限(需SYSDBA执行)
GRANT SELECT ON SYSDBA.EMPLOYEE TO USER1;
```
> 💡 提示:所有SQL语句必须以分号`;`结尾才能执行
#### 六、退出DISQL
```sql
EXIT; -- 或 QUIT;
```
---
### 配置优化建议
1. **内存参数调整**(解决启动问题)
```ini
# dm.ini 修改后需重启
BUFFER = 18000 -- 缓冲区大小(MB)
MEMORY_POOL = 2000 -- 内存池大小(MB)
```
需满足:$总内存 \geq (BUFFER \times 1.2 + MEMORY\_POOL + 500)$
---
阅读全文
相关推荐




















