达梦数据库

一、linux 安装部署

二、集群安装部署

三、达梦数据库概念

3.1 达梦数据库 中 SCHEMA tabselspace dabase 数据库实例之间的关系

理解一

在达梦数据库中,数据库实例数据库表空间 (tablespace)和模式(SCHEMA)是四个不同层次的概念,理解它们的关系有助于更好地进行数据库管理和设计。

1. 数据库实例(Instance)

数据库实例是达梦数据库服务器的运行环境,由一组后台进程和内存结构组成。当你启动一个达梦服务(dmserver)时,就创建了一个实例。一个实例通常只能挂载和打开一个数据库。

2. 数据库(Database)

数据库是物理文件的集合,包括数据文件、控制文件、RLOG 日志文件等。它是在实际存储介质上持久化保存数据的基础。一个实例负责管理一个数据库,提供对数据的访问。

3. 表空间(Tablespace)

表空间是数据库的逻辑存储结构,用于组织物理数据文件。一个数据库可以包含多个表空间,每个表空间由一个或多个数据文件组成。创建表、索引等对象时可以指定存放的表空间,从而实现数据的分布和管理。

4. 模式(SCHEMA)

模式是数据库对象的逻辑集合,通常与一个用户绑定。达梦中创建用户时会自动创建一个同名的模式。模式中可以包含表、视图、存储过程、序列等对象。模式不直接对应物理存储,其对象存储在所属的表空间中。

关系概览

复制代码
数据库实例  -- 管理 -->  数据库  -- 包含 -->  表空间 (物理文件)
                         |                
                         -- 包含用户 -->  用户 -- 拥有 --> 模式 -- 包含 --> 表/索引等
  • 一个实例运行一个数据库;
  • 一个数据库包含多个表空间(SYSTEMMAINTEMP 等),存储实际数据;
  • 一个数据库可以有多个用户,每个用户默认拥有一个同名模式;
  • 模式中的对象(如表)最终存储在某个表空间中。

#mermaid-svg-KVku29po3S9WJM2S{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-KVku29po3S9WJM2S .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-KVku29po3S9WJM2S .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-KVku29po3S9WJM2S .error-icon{fill:#552222;}#mermaid-svg-KVku29po3S9WJM2S .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-KVku29po3S9WJM2S .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-KVku29po3S9WJM2S .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-KVku29po3S9WJM2S .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-KVku29po3S9WJM2S .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-KVku29po3S9WJM2S .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-KVku29po3S9WJM2S .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-KVku29po3S9WJM2S .marker{fill:#333333;stroke:#333333;}#mermaid-svg-KVku29po3S9WJM2S .marker.cross{stroke:#333333;}#mermaid-svg-KVku29po3S9WJM2S svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-KVku29po3S9WJM2S p{margin:0;}#mermaid-svg-KVku29po3S9WJM2S .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-KVku29po3S9WJM2S .cluster-label text{fill:#333;}#mermaid-svg-KVku29po3S9WJM2S .cluster-label span{color:#333;}#mermaid-svg-KVku29po3S9WJM2S .cluster-label span p{background-color:transparent;}#mermaid-svg-KVku29po3S9WJM2S .label text,#mermaid-svg-KVku29po3S9WJM2S span{fill:#333;color:#333;}#mermaid-svg-KVku29po3S9WJM2S .node rect,#mermaid-svg-KVku29po3S9WJM2S .node circle,#mermaid-svg-KVku29po3S9WJM2S .node ellipse,#mermaid-svg-KVku29po3S9WJM2S .node polygon,#mermaid-svg-KVku29po3S9WJM2S .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-KVku29po3S9WJM2S .rough-node .label text,#mermaid-svg-KVku29po3S9WJM2S .node .label text,#mermaid-svg-KVku29po3S9WJM2S .image-shape .label,#mermaid-svg-KVku29po3S9WJM2S .icon-shape .label{text-anchor:middle;}#mermaid-svg-KVku29po3S9WJM2S .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-KVku29po3S9WJM2S .rough-node .label,#mermaid-svg-KVku29po3S9WJM2S .node .label,#mermaid-svg-KVku29po3S9WJM2S .image-shape .label,#mermaid-svg-KVku29po3S9WJM2S .icon-shape .label{text-align:center;}#mermaid-svg-KVku29po3S9WJM2S .node.clickable{cursor:pointer;}#mermaid-svg-KVku29po3S9WJM2S .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-KVku29po3S9WJM2S .arrowheadPath{fill:#333333;}#mermaid-svg-KVku29po3S9WJM2S .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-KVku29po3S9WJM2S .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-KVku29po3S9WJM2S .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KVku29po3S9WJM2S .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-KVku29po3S9WJM2S .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KVku29po3S9WJM2S .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-KVku29po3S9WJM2S .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-KVku29po3S9WJM2S .cluster text{fill:#333;}#mermaid-svg-KVku29po3S9WJM2S .cluster span{color:#333;}#mermaid-svg-KVku29po3S9WJM2S div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-KVku29po3S9WJM2S .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-KVku29po3S9WJM2S rect.text{fill:none;stroke-width:0;}#mermaid-svg-KVku29po3S9WJM2S .icon-shape,#mermaid-svg-KVku29po3S9WJM2S .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-KVku29po3S9WJM2S .icon-shape p,#mermaid-svg-KVku29po3S9WJM2S .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-KVku29po3S9WJM2S .icon-shape .label rect,#mermaid-svg-KVku29po3S9WJM2S .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-KVku29po3S9WJM2S .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-KVku29po3S9WJM2S .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-KVku29po3S9WJM2S :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 实例 Instance
管理
包含
存储
包含
拥有
包含
所属
dmserver 进程

内存 / 后台线程
数据库 Database
表空间 Tablespace
数据文件 Datafile
用户 User
模式 SCHEMA
表 / 视图 / 索引等

理解二

一、整体层级(从大到小)

实例 (Instance) → 数据库 (Database) → 表空间 (Tablespace) → 模式 (SCHEMA) → 表 / 视图 / 索引等对象达梦在线服务平台

  1. 实例 Instance(内存 + 进程)
    组成:后台线程 + 共享内存,运行在内存中。
    核心规则:一个实例只能挂载打开 1 个数据库;单实例环境下,1 实例 = 1 数据库;DMDSC 集群可以多实例挂载同一个数据库文件集。
    通俗理解:实例是 "服务进程",用来打开磁盘上的数据库文件。
  2. 数据库 Database(磁盘文件集合)
    物理载体:所有数据文件 (.dbf)、控制文件、日志文件的整体,保存在磁盘。
    一个数据库内部包含多个表空间(SYSTEM、MAIN、ROLL、TEMP、自定义业务表空间)。
  3. 表空间 Tablespace(物理存储容器)
    作用:管理物理数据文件,是数据存储的载体。
    关系:
    1 个数据库包含多个表空间;
    1 个表空间可以包含多个数据文件;
    一个表空间可以被多个模式共用;
    创建表时指定表空间,决定数据写到哪个 dbf 文件里。
  4. 模式 SCHEMA(对象命名空间,重点区分 Oracle)
    模式 = 表、视图、函数、序列等对象的集合,纯粹逻辑命名空间,不直接绑定文件。
    达梦独有的关系(和 Oracle 不一样)
    Oracle:用户 ↔ 模式 严格一对一;
    达梦 DM:一个用户可以拥有多个 SCHEMA(一对多);
    默认行为:CREATE USER test; 会自动生成一个同名 test 的 SCHEMA;
    可以单独执行 CREATE SCHEMA sch1 AUTHORIZATION test;,给现有用户新建额外模式。

3.2 、四者包含关系总结

  • 实例 包含 数据库
    一个实例只能打开唯一一套数据库文件。
  • 数据库 包含 多个表空间
    表空间是数据库划分存储的单元,对应物理 dbf 文件。
  • 表空间 承载 多个模式下的数据
    多个 SCHEMA 里的表,可以存放在同一个表空间;
    一张表只能归属一个表空间。
  • 模式 (SCHEMA) 归属某个用户,存放业务对象
    SCHEMA 只管对象名字,不管物理存储;存储由表空间决定。

一句话串联

启动实例打开磁盘上的数据库,数据库划分出若干表空间来管理物理文件;在库中创建用户并建立多个SCHEMA,在模式里建表,并把表数据落地到指定表空间中。

mysql /oracle /达梦对比

系统内置 SCHEMA(默认自带)

SYS:系统核心字典

SYSDBA:管理员模式

SYSAUDIT:审计对象

SYSMAIN:系统主模式

SYSDBO

3.3 连接

一、JDBC URL 标准格式

plaintext

jdbc:dm://IP:PORT?schema=模式名

完整写法:

plaintext

jdbc:dm://127.0.0.1:5236/DATABASE?schema=TEST_SCHEMA

分段说明

127.0.0.1:5236

对应:数据库实例(dmserver 服务),一个端口对应一个实例。

斜杠后面的 DATABASE

达梦里这个字段填数据库名,大多数环境可以省略不写。

单实例环境基本都可以简写:

plaintext

jdbc:dm://127.0.0.1:5236

?schema=XXX 参数

这里填写的是 SCHEMA(模式名),不是实例名。

作用:登录成功后,自动把当前会话默认模式切换为此 schema,省去每次 set schema。

二、核心结论

地址里的 IP + 端口 → 实例

URL 参数 schema= → 模式 SCHEMA

达梦一个实例只对应一个 Database,不需要在 URL 切换数据库。

三、两种常用写法

最简写法(程序里自己指定 schema)

url

jdbc:dm://127.0.0.1:5236

自动指定默认模式(推荐)

url

jdbc:dm://127.0.0.1:5236?schema=BUSINESS

四、补充区分(极易混淆)

切换实例:改端口 5236 → 5237

切换 SCHEMA:修改 schema=xxx,或者执行 SET SCHEMA XXX;

达梦不能在同一个 URL 里切换 Database,多库就要多实例。

如果你用 MyBatis,我可以顺便给你写好达梦的连接配置。

3.4 端口

达梦数据库的默认端口主要取决于您使用的具体版本以及组件类型:

  1. 数据库实例监听端口(最常用)
    达梦 8 (DM8):默认端口为 523612。
    达梦 9 (DM9):默认端口更改为 52378。
  2. 达梦 8 其他组件的默认端口
    除了数据库实例,达梦 8 的其他配套工具和服务也有各自的默认端口:
    数据库管理工具端口:5237
    数据库备份和恢复工具端口:5238
    数据库监控工具端口:5239
    数据库复制功能端口:52402
    💡 补充说明:
    以上均为默认配置,在实际部署(尤其是生产环境)中,为了安全考虑,通常建议修改为自定义端口12。
    如果需要确认当前数据库使用的端口,可以查看达梦数据库的主配置文件 dm.ini 中的 PORT_NUM 参数

四 常用命令

4.1 基础维护命令

  1. 查看数据库版本:
sql 复制代码
SELECT * FROM V$VERSION;
  1. 查看达梦数据库当前状态:
sql 复制代码
SELECT status$ FROM v$instance;
  1. 查询数据文件位置:
sql 复制代码
SELECT * FROM v$datafile;
  1. 设置用户口令策略:
    可以使用以下命令来设置用户口令策略,例如禁止用户名与密码相同、口令长度不小于9位、至少包含一个大写字母等:
    ALTER USER <用户名> PASSWORD_POLICY 31;
    其中,31表示口令策略为长度至少为8位,包含数字、字母和特殊字符。也可以根据需要设置其他策略。
  2. 设置用户口令的有效时长:
    可以使用以下命令来设置用户口令的有效时长,例如90天:
sql 复制代码
ALTER USER <用户名> LIMIT PASSWORD_LIFE_TIME 90;

这将限制用户在90天内必须更改其密码。

  1. 设置用户口令过期后可使用天数:

可以使用以下命令来设置用户口令过期后可使用天数,例如30天:

sql 复制代码
ALTER USER <用户名> PASSWORD EXPIRE INTERVAL 30 DAY;

这将使密码在过期后30天内仍然可用,但用户不能执行除修改口令外的其他操作。

  1. 查看密码策略:

可以使用以下命令来查看当前的密码策略:

sql 复制代码
SELECT * FROM v$dm_ini a WHERE a.PARA_NAME = 'PWD_POLICY';

这将返回当前的密码策略设置。根据返回的结果,可以了解当前设置的密码策略是什么。

  1. 修改表结构:

可以使用以下命令来修改表结构,例如添加列、修改列名或数据类型等:

sql 复制代码
ALTER TABLE <表名> ADD <列名> <数据类型>;
ALTER TABLE <表名> RENAME COLUMN <原列名> TO <新列名>;
ALTER TABLE <表名> MODIFY <列名> <新数据类型>;

这些是达梦数据库的一些常用基础命令,可以帮助用户进行数据库管理和操作。在使用这些命令时,请确保已经连接到正确的数据库实例,并具有足够的权限来执行这些操作。

4.2 数据库操作

达梦 DM8 标准脚本(建库无需 SQL,实例建好就自带库)

  1. 创建表空间
    sql
sql 复制代码
-- 创建业务数据文件表空间
CREATE TABLESPACE TS_BUSINESS
DATAFILE '/dmdata/TS_BUSINESS_01.dbf' SIZE 1024 AUTOEXTEND ON NEXT 512;

-- 创建索引表空间

sql 复制代码
CREATE TABLESPACE TS_INDEX
DATAFILE '/dmdata/TS_INDEX_01.dbf' SIZE 512 AUTOEXTEND ON NEXT 256;
  1. 创建业务用户
    sql
sql 复制代码
CREATE USER USER_BUS
IDENTIFIED BY "Test@123456"
DEFAULT TABLESPACE TS_BUSINESS;

-- 授予资源权限

sql 复制代码
GRANT RESOURCE, PUBLIC TO USER_BUS;
  1. 给同一个用户创建多个 SCHEMA(达梦特色)
    sql
    -- 模式1:正式业务库
sql 复制代码
CREATE SCHEMA SCH_BUS1 AUTHORIZATION USER_BUS;

-- 模式2:历史归档库

sql 复制代码
CREATE SCHEMA SCH_BUS2 AUTHORIZATION USER_BUS;

-- 模式3:临时统计库

sql 复制代码
CREATE SCHEMA SCH_BUS3 AUTHORIZATION USER_BUS;
  1. 指定模式建表,绑定表空间
    sql
    -- 在SCH_BUS1下建表,存储在业务表空间
sql 复制代码
CREATE TABLE SCH_BUS1.T_USER(
    ID INT PRIMARY KEY,
    NAME VARCHAR(50)
) TABLESPACE TS_BUSINESS;

-- 在SCH_BUS2下建历史表

sql 复制代码
CREATE TABLE SCH_BUS2.T_USER_HIS(
    ID INT,
    NAME VARCHAR(50)
) TABLESPACE TS_BUSINESS;
  1. 会话切换模式
    sql
sql 复制代码
SET SCHEMA SCH_BUS1;
SELECT * FROM T_USER;
  1. JDBC 连接串指定默认 SCHEMA
    plaintext
sql 复制代码
jdbc:dm://127.0.0.1:5236?schema=SCH_BUS1

配套查询语句(DM8)

sql

-- 查询所有模式

sql 复制代码
SELECT SCHEMA_NAME FROM SYS.SYSSCHEMAS;

-- 查询某用户拥有的全部SCHEMA

sql 复制代码
SELECT SCHEMA_NAME FROM SYS.SYSSCHEMAS
WHERE USER_ID=(SELECT ID FROM SYS.SYSUSERS WHERE NAME='USER_BUS');

DM6 兼容版本(适配你当前环境)

sql

-- 查看所有schema

sql 复制代码
SELECT SCHEMA_NAME FROM SYS.SYSSCHEMA;

-- 创建schema

sql 复制代码
CREATE SCHEMA SCH_BUS1 AUTHORIZATION USER_BUS;

我可以再给你一版带删除、回收权限、清理对象的完整运维脚本。

4.3 SCHEMA 的维护

一、创建 SCHEMA(DM6 / DM8 通用语法)

语法格式

sql

sql 复制代码
CREATE SCHEMA 模式名 AUTHORIZATION 用户名;

示例

sql

-- 创建模式 TEST_SCHEMA,归属用户 BUS_USER

sql 复制代码
CREATE SCHEMA TEST_SCHEMA AUTHORIZATION BUS_USER;

-- 创建第二个模式,同一个用户

sql 复制代码
CREATE SCHEMA HIS_SCHEMA AUTHORIZATION BUS_USER;

说明:达梦一个用户可以拥有多个 SCHEMA,这是和 Oracle 最大区别。

二、SCHEMA 对象权限授权(核心 SQL)

  1. 授予别人访问该模式下所有表、视图、序列
    sql
    -- 授予用户 READ_USER 查询 TEST_SCHEMA 下所有对象
sql 复制代码
GRANT SELECT ON TEST_SCHEMA.* TO READ_USER;

-- 授予增删改查全部权限

sql 复制代码
GRANT SELECT,INSERT,UPDATE,DELETE ON TEST_SCHEMA.* TO BUS_OP;
  1. 授予创建对象权限(在该 SCHEMA 中建表)
    sql
sql 复制代码
GRANT CREATE TABLE,CREATE VIEW,CREATE SEQUENCE ON SCHEMA TEST_SCHEMA TO BUS_USER;
  1. 授予 SCHEMA 的使用权限(会话可以 SET SCHEMA)
    sql
sql 复制代码
GRANT USAGE ON SCHEMA TEST_SCHEMA TO READ_USER;

三、完整常用组合脚本

sql

--1. 创建用户

sql 复制代码
CREATE USER BUS_USER IDENTIFIED BY "Pwd@123456";

--2. 创建SCHEMA归属此用户

sql 复制代码
CREATE SCHEMA BUS_SCHEMA AUTHORIZATION BUS_USER;

--3. 给所有者授予本模式全部权限

sql 复制代码
GRANT ALL ON SCHEMA BUS_SCHEMA TO BUS_USER;

--4. 给其他只读用户开放查询权限

sql 复制代码
GRANT USAGE ON SCHEMA BUS_SCHEMA TO QUERY_USER;
GRANT SELECT ON BUS_SCHEMA.* TO QUERY_USER;

四、回收权限

sql

sql 复制代码
REVOKE SELECT ON BUS_SCHEMA.* FROM QUERY_USER;
REVOKE USAGE ON SCHEMA BUS_SCHEMA FROM QUERY_USER;

五、切换当前模式

sql

sql 复制代码
SET SCHEMA BUS_SCHEMA;

4.4 用户权限

一、把整个 SCHEMA 的使用 + 对象权限一次性赋给用户(DM8 标准语法)

  1. 授予模式使用权限(可以切换 schema)
    sql
sql 复制代码
GRANT USAGE ON SCHEMA 业务模式名 TO 目标用户名;
  1. 授予该模式下已有所有表、视图、序列的 DML 权限
    sql
sql 复制代码
GRANT SELECT,INSERT,UPDATE,DELETE,ALTER ON 业务模式名.* TO 目标用户名;
  1. 授予在该模式下新建表、视图、索引等对象权限
    sql
sql 复制代码
GRANT CREATE TABLE,CREATE VIEW,CREATE SEQUENCE,CREATE INDEX ON SCHEMA 业务模式名 TO 目标用户名;

二、一键全权(管理员给开发账号最高权限)

sql

-- 允许进入模式

sql 复制代码
GRANT USAGE ON SCHEMA TEST_SCHEMA TO dev_user;

-- 模式内所有对象全部权限

sql 复制代码
GRANT ALL PRIVILEGES ON TEST_SCHEMA.* TO dev_user;

-- 允许在该模式创建新对象

sql 复制代码
GRANT ALL PRIVILEGES ON SCHEMA TEST_SCHEMA TO dev_user;

三、回收权限

sql

sql 复制代码
REVOKE ALL PRIVILEGES ON TEST_SCHEMA.* FROM dev_user;
REVOKE USAGE ON SCHEMA TEST_SCHEMA FROM dev_user;

四、如果你要授权【当前会话所在的 SCHEMA】(不用手动写名字)

sql

sql 复制代码
DECLARE
    v_schema VARCHAR(128);
BEGIN
    SELECT CURRENT_SCHEMA INTO v_schema FROM DUAL;
    EXECUTE IMMEDIATE 'GRANT USAGE ON SCHEMA '||v_schema||' TO dev_user';
    EXECUTE IMMEDIATE 'GRANT ALL ON '||v_schema||'.* TO dev_user';
END;

4.6 表查看

SYSDBA 用户登录后,默认 SCHEMA 是 SYSDBA。

验证语句

sql

sql 复制代码
SELECT CURRENT_SCHEMA;

执行结果:SYSDBA

补充说明

达梦内置用户与模式一一对应:

SYS 用户 → 默认 SCHEMA:SYS

SYSDBA 用户 → 默认 SCHEMA:SYSDBA

登录后可以手动切换:

sql

sql 复制代码
SET SCHEMA SYS;

JDBC 连接不指定 schema 时,SYSDBA 账号自动进入 SYSDBA 模式。

查看 SYSDBA 模式下的表

sql 复制代码
SELECT TABLE_NAME FROM USER_TABLES;

写法 1(推荐,兼容达梦 V8)

查询指定模式下当前用户有权限的全部表:

sql

-- 替换 SCHEMA_NAME 为你的模式名

sql 复制代码
SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'SCHEMA_NAME';

写法 2:只查自己创建的表(仅当前用户名下)

sql

sql 复制代码
SELECT TABLE_NAME FROM USER_TABLES;

写法 3:精确指定 Schema,查询所有表(包含分区表)

sql

sql 复制代码
SELECT TABLE_NAME, TABLE_TYPE FROM DBA_TABLES WHERE OWNER = 'SCHEMA_NAME';

一个用户有多个schema ,用语句SELECT TABLE_NAME FROM USER_TABLES; 是否会看到多个SCHEMA下的表名?

看不到。

USER_TABLES 只查询【当前默认 SCHEMA】下属于该用户的表,只会展示一个模式里的表。

哪怕这个用户拥有 5 个 SCHEMA,只要没有切换模式,USER_TABLES 只显示当前CURRENT_SCHEMA中的表。

一、区分三张表

表格

视图 数据范围

  • USER_TABLES 当前会话默认 SCHEMA 下,自己建的表
  • ALL_TABLES 当前用户有权限访问的所有 SCHEMA里的表
  • DBA_TABLES 全库所有表(DBA 权限)
    二、查看该用户名下所有 SCHEMA 中的全部表(满足你的场景)
    sql
    -- 查看当前用户拥有的所有模式下的全部表
sql 复制代码
SELECT TABLE_NAME,OWNER AS SCHEMA_NAME
FROM ALL_TABLES
WHERE OWNER IN (
    SELECT SCHEMA_NAME
    FROM SYS.SYSSCHEMAS
    WHERE USER_ID = (SELECT ID FROM SYS.SYSUSERS WHERE NAME=USER)
);

三、简单总结

USER_TABLES = 仅限当前 SCHEMA

想要看到同一个用户名下多个 SCHEMA 的所有表,必须用 ALL_TABLES 并按 SCHEMA 过滤。

4.7 命令登录

一、disql 命令行登录(服务器本地)

  1. 最简登录
    bash
    运行
sql 复制代码
disql

然后输入账号密码:

plaintext

用户名:SYSDBA

密码:

  1. 一行命令直接登录(常用)

bash

运行

sql 复制代码
disql SYSDBA/SYSDBA@localhost:5236
  1. 登录并自动指定默认 SCHEMA
    bash
    运行
sql 复制代码
disql USER_TEST/123456@127.0.0.1:5236?schema=BUS_SCHEMA

二、JDBC 程序连接

URL 格式

plaintext

jdbc:dm://IP:端口?schema=模式名

示例:

plaintext

jdbc:dm://192.168.1.100:5236?schema=BUS_SCHEMA

账号:你的数据库用户

schema 参数决定登录后的默认模式

重点:一个用户拥有多个 SCHEMA,靠 URL 里的 schema= 控制登录进入哪一个模式。

三、登录后查看当前模式

sql

sql 复制代码
SELECT CURRENT_SCHEMA;

四、临时切换 SCHEMA(会话生效)

sql

sql 复制代码
SET SCHEMA BUS_SCHEMA;

五、关键知识点(对应你刚才的问题)

用户可以拥有多个 SCHEMA;

登录默认进入哪一个,由两点控制:

不填 schema:进入和用户名同名的默认 SCHEMA;

URL 增加 ?schema=xxx,强制登录进入指定模式;

USER_TABLES 只显示当前 SCHEMA 的表,切换模式后再查询才能看到其他模式的表。