神州通用数据库(神通数据库)常用SQL纪要

字符集:UTF8
兼容模式:ORACLE
版本:V7 ,分枝不低于342
MIN_IN_ELEMENT=1000
MAX_CURSORS_TOTAL=6553600
ENABLE_NATIVE_AIO=false

COLUMN_CASE_SENSITIVE=FALSE
NAME_CASE_SENSITIVE=TRUE

已邀请:

1、当前数据库中正在执行的SQL

select sid,current_sql from v$session;

2、查询当前数据库版本

select versiondetail();

3、查询数据库字符集

select sys_encoding_to_char(encoding) from v_sys_database;

4、查看数据库兼容参数

 show dbms;

5、修改用户密码

alter user sysdba with password 'password';



扩展.查看参数的话,例如参数为SSSS_FFFFF,那查询参数可以直接:show FFFFF

启停

/etc/init.d/oscardb_实例名d top

/etc/init.d/oscardb_实例名d start

6.1物理备份/恢复命令
brcmd -O backup -d OSRDB -u SYSDBA -p szoscar55 -P 2003 -t full -k file -f /home/bk.osrbk -b 8192 -e /home/bk_log.txt -c TRUE -m TRUE
brcmd -O restore -d OSRDB -u SYSDBA -p szoscar55 -P 2003 -t backup_point_last -k file -f /opt/bk.osr.osrbk -b 8192 -e /opt/bk_log.txt
Ps:-d 实例名 -u用户名 -p密码 -P 端口号 -f备份路径
-e 日志文件路径

6.2逻辑备份/恢复命令
osrexp -UOSRDB/szoscar55 -p2003 -dOSRDB level=schema file=D:/ShenTong/ljbk.osr log=D:/ShenTong/ljbk.log schema=SYSDBA checkvalidate=false
osrimp -U备份用户名/密码 -p端口号 -dOSRDB level=schema file=备份文件路径.osr log=日志文件路径.log schema=备份模式名 checkvalidate=false

6.3查询数据库版本
Shell命令行输入 oscar --versiondetail
或者isql进入交互工具(密码szoscar55) select versiondetail;


6.4查询数据库字符集
isql进入交互工具 list database
或者select encoding from v_sys_database;


6.5查询当前session状态
SELECT “SESSION ID”,
“APPNAME”,
“LOGONTIME”,
“SQL COUNT”,
“CURRENT SQL”,
“LAST SQL”
FROM V_SYS_SESSIONS
WHERE “LOGON USERFROM” != ‘INVALID USER’;

6.6查询当前数据库的堵塞语句
SELECT C.SESSION_ID,
C.BLOCKER_IS_VALID,
C.WAIT_EVENT,
C.BLOCKER_PID,
C.BLOCKER_SESSION_ID,
S.SQL_EXEC_START,
S.SQL_EXEC_START ::TIMESTAMP - SYSDATE ::TIMESTAMP “EXPEND TIME”,
SUBSTR(S.CURRENT_SQL, 0, 60) CURRENT_SQL,
SUBSTR(S.PREV_SQL, 0, 60) PREV_SQL
FROM VS E S S I O N S , V SESSION S, VSESSIONS,VWAIT_CHAINS C
WHERE C.SESSION_ID = S.SID
ORDER BY BLOCKER_IS_VALID;

6.7检查数据库归档方式
select LOG_MODE from v$database;


6.8打开归档模式
alter database archivelog;


6.9查询当前用户数
select count(*) from v$database;


6.10查询归档路径及文件
SELECT ARCHIVEMODE, ARCHIVEPATH FROM V_SYS_ARCHIVELOG_INFO;
SELECT PATH, CREATE_TIME, START_LSN, END_LSN FROM V$ARCHIVED_LOG;

逻辑备份命令例子:(以模式名为aaa为例)
osrexp -usysdba/szoscar55 -h127.0.0.1 -p2003 -dosrdb level=schema file=/opt/TEST.osr log=/opt/bk.log schema=aaa

逻辑恢复命令例子:(以模式名为aaa为例)
osrimp -usysdba/szoscar55 -h127.0.0.1 -p2003 -dosrdb level=schema file=/opt/TEST.osr log=/opt/rt.log schema=aaaignore=true checkvalidate=false

修改字段长度:ALTER TABLE USER01 MODIFY(USER0106 VARCHAR(200));

mysql中的md5使用如下oscar自定义函数替代:
CREATE OR REPLACE FUNCTION MD5(
passwd IN VARCHAR2)RETURN VARCHAR2
IS
retval varchar2(32);
BEGIN
retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING => passwd)) ;
RETURN retval;
END;



mysql中加密函数aes_encrypt使用如下oscar自定义函数替代:
CREATE FUNCTION aes_encrypt(input IN text,
key IN text)
RETURN text
IS
BEGIN
RETURN ENCRYPT_ORA(input, key, ‘aes128_ecb_pkcs5’,NULL);
END aes_encrypt;


mysql中的解密函数aes_decrypt使用如下oscar自定义函数替代:
CREATE FUNCTION aes_decrypt(input IN text,
key IN text)
RETURN text
IS
BEGIN
RETURN DECRYPT_ORA(input, key, ‘aes128_ecb_pkcs5’,NULL);
END aes_decrypt;


mysql中的to_base64()使用oscar中的base64_encoding()替代
mysql中的from_base64()使用oscar中的base64_decoding()替代
举个项目中常用的例子,在A表中加一个SECRETINFO字段 存放加密后的信息用于防止数据篡改,sql写法如下
UPDATE 模式名.A SET SECRETINFO=base64_encoding(CONCAT(信息密级(随意),ID)) WHERE 1=1;


8.通过触发器的方式阻止手动修改数据库
这里以不允许修改信息密级(公开、机密、秘密、绝密)为例,模式名为SYS,表名为DATAINFO,字段名为MJ,以下代码是触发器方式实现方式:

—不允许直接修改数据 错误码-20600是我随便写的
CREATE or replace TRIGGER datainfo_update_triger before update
on SYS.DATAINFO FOR EACH ROW
begin
IF(:NEW.MJ != :OLD.MJ) THEN
RAISE_APPLICATION_ERROR(-20600,’不能修改表密级’);
END IF;
END;



上面方法实现了不能修改数据库表中某一条记录的mj字段,但是聪明如我还能想到另一种方式,复制整条记录插入进去,这条修改的法子也给禁掉,上条问题的例子中提到过表里有一个字段放了加密信息,逻辑是把ID字段和密级字段拼到一起加密了,我们再次把要插入的ID和密级加密后与原来的值对比就知道是不是同一条记录了,sql如下:

—不允许复制记录插入
CREATE or replace TRIGGER datainfo_insert_triger before INSERT
on SYS.DATAINFO FOR EACH ROW
begin
IF(:NEW.SECRETINFO!= base64_encoding(CONCAT(:NEW.MJ,:NEW.ID))) THEN
RAISE_APPLICATION_ERROR(-20600,’请确认表密级数据’);
END IF;
END;


获取ddl ,但是会查询出所有库的表的ddl

SELECT SYS_GET_TABLEDEF FROM V_SYS_TABLE WHERE TABLENAME =UPPER('表名');

神通库宕机后相关排查

/data/ShenTong/dump下检查dump文件,同时 /data/ShenTong/下会记录err-sql.txt文件 为宕机时执行的sql


终端进入神通bin目录,执行以下命令,拿到所有线程堆栈 xxx.log 文件

1. 将 dmp 文件转成 core 文件
./md2core xxxx.dmp > xxx.core

2. 用 gdb 调试 core 文件

gdb oscar xxx.core (这个oscar必须是生成dmp文件的oscar,或者用发布它时对应的oscar.release更好,可以看到行号)

set logging file xxx.log (这个xxx.log就是同时将下面的内容转储到文件)

set pagination off

set logging on

thread apply all bt (显示所有线程堆栈)

set logging off

q

统计信息: exec dbms_utility.ANALYZE_SCHEMA('YONBIP_20230404093156','COMPUTE');

要回复问题请先登录注册