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;
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;
—不允许直接修改数据 错误码-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;
—不允许复制记录插入 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;
8 个回复
nccloud
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
nccloud
启停
/etc/init.d/oscardb_实例名d top
/etc/init.d/oscardb_实例名d start
nccloud
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;
nccloud
逻辑备份命令例子:(以模式名为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));
nccloud
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
nccloud
统计信息: exec dbms_utility.ANALYZE_SCHEMA('YONBIP_20230404093156','COMPUTE');