达梦数据库查看系统表信息

  • 判断某个表是否存在
select  * from DBA_TABLES where TABLE_NAME='TBL_STKEX_NONMOTOR';
  • 判断某个表的某个字段是否存在
SELECT * FROM DBA_TAB_COLUMNS where TABLE_NAME='TBL_STKEX_NONMOTOR' and COLUMN_NAME = 'RENEW_TIME';
  • 判断某个表的某个约束是否存在

    • 主键
    SELECT * FROM DBA_CONSTRAINTS WHERE CONSTRAINT_TYPE='P' AND OWNER='TEST'  AND TABLE_NAME='TA' and CONSTRAINT_NAME='PK_TA';
    
    • 唯一键
    SELECT * FROM DBA_CONSTRAINTS WHERE CONSTRAINT_TYPE='U' AND OWNER='TEST'  AND TABLE_NAME='TA' and CONSTRAINT_NAME='UK_TA_NAME';
    
    • 外键
    SELECT * FROM DBA_CONSTRAINTS WHERE CONSTRAINT_TYPE='R' AND OWNER='TEST'  AND TABLE_NAME='TA' and CONSTRAINT_NAME='FK_TB_NAME';
    

    – check 约束

    • 如果直接在表定义中设置check约束, 此时check约束名称不是 见名知意
    SELECT * FROM DBA_CONSTRAINTS WHERE CONSTRAINT_TYPE='C' AND OWNER='TEST'  AND TABLE_NAME='TA' ;
    
    • 如果check约束是通过 atler table add constraint 来添加, 此时可以通过 CONSTRAINT_NAME 知道 check约束名称
    SELECT * FROM DBA_CONSTRAINTS WHERE CONSTRAINT_TYPE='C' AND OWNER='TEST'  AND TABLE_NAME='TA' and constraint_name='CHECK_TA_AGE' ;
    
  • 判断某个表的索引是否存在

select * from DBA_INDEXES WHERE OWNER='TEST' AND TABLE_NAME='TA'	
表默认有个cluster索引, 非唯一
对于主键/唯一键约束,对应会生成一个索引, 该索引名称无法看出是主键还是唯一键, 可以通过 DBA_CONSTRAINTS 来查看
对于普通索引,由于在定义的时候需要指定索引名称, 所以在 dba_indexes中是可以看到该索引具体名称的
  • 判断某个函数是否存在
SELECT * FROM DBA_PROCEDURES WHERE OWNER='TEST' AND OBJECT_NAME='FUNC_TEST'

*判断某个触发器是否存在

select * from DBA_TRIGGERS where  OWNER='TEST' AND TRIGGER_NAME='TRI_STKDD';
  • 判断某个视图是否存在
select * from DBA_VIEWS where  OWNER='TEST' AND  VIEW_NAME='T_STK' ;
  • 判断某个类型是否存在
select * from DBA_SOURCE where name='TYPE_INT';
TYPE定义如下:
	CLASS:自定义类型 通过 create type xx as object();来定义
	TRIG:触发器
	PROC: 函数
	PACKAGE: 包
	PACKAGE BODY: 包提
	TYPE: 通过 create type xx as ; 来定义
  • 判断某个序列是否存在
select * FROM dba_sequences where  OWNER='TEST' AND  sequence_name='SEQ_Q';

  • 动态 SQL 实例
    –测试用例
create table test(id int);
insert into test values(1);
insert into test values(2);

create or replace function func_test()
RETURN INTEGER as
DECLARE
    row_num int:=0;
BEGIN
    execute IMMEDIATE 'select count(*)  from test' into row_num;
    return row_num;
END;

/

SQL> select func_test();

行号     FUNC_TEST()
---------- -----------
1          2


<think>好的,用户想了解达梦数据库如何查询锁信息。首先,我需要回忆一下之前提供的引用内容。引用[1]提到V$LOCK动态视图,可以查看锁的详细信息,比如事务ID、类型和模式。引用[2]给出了一个查询锁的语句,结合V$LOCK和V$SESSIONS视图,按用户过滤。引用[4]的例子展示了如何查询被阻塞的锁,并关联名。 用户的问题可能是在实际使用中遇到锁的情况,需要找出哪些会话持有锁,或者哪些被锁导致阻塞。可能需要分步骤说明不同的查询方法,比如查看所有锁信息、关联会话信息、定位阻塞源等。 另外,用户可能还需要知道如何处理锁超时的问题,但当前问题主要是查询方法。要确保给出的SQL语句正确,并且解释清楚每个字段的含义,比如LTYPE、LMODE、BLOCKED等。可能需要提醒用户注意权限问题,执行这些查询可能需要特定的系统权限。 还要考虑用户的实际操作场景,可能需要提供不同的查询方式,比如按用户过滤,或者查找被阻塞的锁。引用[3]提到延长锁等待时间,但用户现在的问题是如何查询,这部分暂时不需要,但可以作为后续处理步骤提及。 需要检查是否有遗漏的方法,比如使用系统过程或工具,但根据引用内容,主要都是通过SQL查询动态视图。因此,整理出几种常用查询方式,并说明各字段含义,帮助用户理解结果。最后,补充一些注意事项,比如权限和锁超时的处理,这样回答会更全面。</think>### 达梦数据库查询锁信息的完整方法 在达梦数据库中,可通过动态性能视图和系统组合查询锁信息。以下是三种常用方法及详细说明: #### 方法一:查看基础锁信息(V$LOCK视图) ```sql SELECT * FROM V$LOCK; ``` - **字段说明**: - `TRX_ID`:持有锁的事务ID - `LTYPE`:锁类型(TID=级锁,ROW=行级锁) - `LMODE`:锁模式(S=共享锁,X=排他锁) - `BLOCKED`:是否被阻塞(1=是,0=否) - `TABLE_ID`:被锁的对象ID[^1] #### 方法二:关联会话信息(V$SESSIONS视图) ```sql SELECT s.SESS_ID, s.SQL_TEXT, l.* FROM V$LOCK l JOIN V$SESSIONS s ON l.TRX_ID = s.TRX_ID WHERE s.USER_NAME = '指定用户名'; ``` - **优势**:可定位到具体用户会话 - **扩展字段**: - `SESS_ID`:会话连接ID - `SQL_TEXT`:正在执行的SQL语句[^2] #### 方法三:定位阻塞源头(SYSOBJECTS关联查询) ```sql SELECT o.name AS 名, l.* FROM V$LOCK l JOIN SYSOBJECTS o ON l.TABLE_ID = o.ID WHERE l.BLOCKED = 1; ``` - **典型输出**: ``` 名 | ADDR | TRX_ID | LTYPE | LMODE | BLOCKED | TABLE_ID TEST | 140456886704 | 12252 | TID | X | 1 | 1014 ``` - **解读**:TEST被事务12252以排他锁(X)阻塞其他操作[^4] #### 补充说明 1. **锁类型识别**: - `TID`级锁影响整 - `ROW`级锁仅影响特定数据行 2. **锁模式判断**: - S锁(共享):允许并发读,禁止写 - X锁(排他):禁止其他任何操作
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值