Oscar 神通数据库日常操作

words: 3k    views:    time: 13min

官网文档:http://www.shentongdata.com/index.php/download/list-26

由于甲方要求,项目实施必须使用国产数据库,最后是选择了神通数据库,在这方面其实我们也没有什么话语权。oscar是一款类Oracle系列的国产数据库,这里只是记录一些常用的操作。另外如果想选择国产数据库,可以参考开源软件联盟PostgreSQL分会的这篇文章《国产数据库的谱系》

在介绍oscar的具体操作之前,可以先对Oracle中一些概念有个基本的了解,如下图简要说明了实例、用户、表空间、以及表之间的关系。

Oracle由一系列的后台进程和内存结构组成。可以创建n个数据库实例。用户是在实例下创建的,不同实例中可以创建相同名字的用户。表空间是用来管理数据存储的逻辑概念,而数据文件是物理的,一个表空间可以包含多个数据文件,而一个数据文件只能属于一个表空间。
表的数据,是由用户存入某一个表空间的,而这个表空间会随机把这些表数据写到一个或者多个数据文件中。表数据也不是由表空间去查的,而是由用户去查询的,因为不同用户可以在同一个表空间建立同一个名字的表,这里区分就是用户了。

  • 神通的默认配置
1
2
3
4
5
端口:2003
用户名:sysdba
密码:szoscar55
数据库实例: OSRDB
部署路径: /opt/ShenTong

命令操作

  • isql
1
2
## /opt/ShengTong/bin/isql
isql -d osrdb -P 2003 -U sysdba/szoscar55
  • oscar
1
2
3
4
5
6
7
8
oscar --version                   查看数据库版本
oscar –o normal –d osrdb 正常模式启动osrdb数据库
oscar –o install –d osrdb 安装数据库实例OSRDB的服务
oscar –o uninstall –d osrdb 卸载数据库实例OSRDB的服务
oscar –o uninstall all 卸载所有数据库实例的服务
oscar –h d:\ShenTong –o normal –d osrdb 设定数据库安装目录并正常启动
oscar –o normal –d osrdb –P 2004 在2004端口启动数据库实例
oscar –e “create database osrdb” 执行创建数据库OSRDB实例的命令
  • oscaragent
1
2
3
4
5
6
7
8
9
10
11
12
13
oscaragent –v                    查看agent版本号
oscaragent –c 命令行方式启动
oscaragent –r 以服务方式启动(windows)
oscaragent –e d:\ShenTong –c 设定数据库安装目录并启动
oscaragent –s 关闭agent(通过socket向agent发送退出信号)
oscaragent –S 关闭agent服务
oscaragent –S –A 停止所有数据库服务
oscaragent –S –D <DBNAME> 停止指定的数据库实例服务
oscaragent –Q 查询agent的服务运行状态
oscaragent –Q -A 查询所有数据库实例服务的运行状态
oscaragent –Q –D <DBNAME> 查询指定的数据库实例服务运行状态
oscaragent –i 安装agent系统服务(跨平台)
oscaragent –u 卸载agent系统服务(跨平台)

SQL操作

  • 数据库
1
2
3
4
5
6
7
8
9
10
-- 列出数据库
list database;

-- 删除数据库
drop database osrdb;

-- 创建数据库
create database osrdb encoding 'GBK';

create database "HNBILL" noarchivelog logfile 'HNBILL01.log' size 10G autoextend on next 100M controlfile “/oscar/admin/test.ctrl” datafile 'HNBILL01.dbf' size 100M autoextend on next 100M;
  • 表空间
1
create tablespace DR_G_A datafile 'DR_G_A.dbf' size 200M autoextend on next 20M;
  • 数据文件
1
2
3
4
5
-- 添加日志文件
alter database stlcdr add logfile '/stl_db/db_data/stdb/odbs/STLCDR/STLCDR00.log' size 50G autoextend on next 1G;

-- 添加日志文件
alter database rename file ‘/diska/logs/log1a.log’ to ‘/diskc/logs/log1c.log’;
  • 用户
1
2
3
4
5
6
7
8
9
10
-- 创建用户
create user usr_test with password 'xxxx';

create user usr_test with default tablespace stlts password 'xxxx' role sysdba;

-- 修改密码
alter user test_usr with password 'test_change';

-- 删除用户
drop user usr_test;
  • 角色权限
1
2
3
create role role_all_select;

grant select on sys_class to role role_all_select;
  • 序列
1
2
3
4
5
create sequence seq_up_moni_col_id minvalue 1 maxvalue 1111111111111 start with 132 increment by 1 cache 20;

select nextval('seq_up_moni_col_id');

select currval('seq_up_moni_col_id');

SQL查询

  • 表空间使用情况
1
2
3
4
5
6
7
8
9
select t.tsname as tsname,
d.path,
count(*) "file count",
sum(d.size) / 1048576 as "size(mb)",
sum(d.freesize) / 1048576 as "free size(mb)",
(sum(d.size) - sum(d.freesize)) / 1048576 as "used size(mb)"
from sys_tablespace t
left join v_sys_datafile_info d
on t.tsid = d.tablespaceid
  • 数据文件使用情况
1
2
3
4
5
6
7
8
9
10
11
select t.tsname as "name",
path,
"CREATIONTIME" as "creation time",
"NEXTSIZE" / 1048576 as "next size(mb)",
"MAXSIZE" / 1048576 as "max size(mb)",
"SIZE" / 1048576 as "size(mb)",
freesize / 1048576 as "free size(mb)",
("SIZE" - freesize) / 1048576 AS "used size(mb)",
("SIZE" - freesize) * 100.0 / SIZE as "used ratio"
from v_sys_datafile_info, sys_tablespace t
where t.tsid = tablespaceid;
  • 日志文件使用情况
1
2
3
4
5
6
7
8
9
10
11
select path,
"CREATIONTIME" as "creation time",
"INITSIZE" / 1048576 as "init size(mb)",
"REALSIZE" / 1048576 as "real size(mb)",
"NEXTSIZE" / 1048576 as "next size(mb)",
"MAXSIZE" / 1048576 AS "max size(mb)",
"ISACTIVE" as "is active)",
("REALSIZE" * (100-"USAGERATIO")/100) / 1048576 as "free size(mb)",
("REALSIZE" * "USAGERATIO"/100) / 1048576 as "used size(mb)",
"USAGERATIO" as "used ratio"
from v_sys_logfile_info;
  • 表定义
1
select sys_get_tabledef from v_sys_table where tablename='xxx';
  • 会话信息
1
2
3
4
5
6
7
8
9
10
11
-- 用户会话
select "SESSION ID", "DBNAME", "CURRENT_USER", "APPNAME", "SQL COUNT", "CURRENT SQL" from v_sys_sessions;

-- 查询阻塞语句session
select s.prev_sql, s.sid, w.pid, w.blocker_pid from v$wait_chains w, v$session s where blocker_pid is null and s.sid = w.session_id;

-- 查看等待链
select * from v$wait_chains;

-- kill掉session
kill session 631 abort;

数据备份

  • 物理备份&恢复
1
2
3
4
5
-- 备份
brcmd -O backup -d HNBILL -t full -k file -f "/kstore/sttmp/test_T.osrbk" -c TRUE

-- 恢复
brcmd -O restore -d HNBAK -u KSTORE -p kstore -P 2003 -t backup_point_last -k file -f "/kstore/sttmp/test.osrbk" -b 8192 -e "/kstore/sttmp/brcmd_log_021509.txt"

参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 -O     Operatin类型:backup/restore/delete_backup/query_db_verify_code 备份/恢复/删除备份/查询数据库验证代码				
-f 备份文件的完整路径(管道)
-d 数据库的名称,注意大写和小写字母,默认值是OSRDB
-u 数据库的用户名,默认值是SYSDBA
-p 用户名的密码, 默认值是szoscar55
-P 数据库服务的监听端口,默认值是2003
-k 数据传输类型:file/pipe,文件/管道,默认值是文件
-e brcmd的日志路径, 默认值是oscaragent的日志路径
-b 数据传输缓冲区大小(KB),默认数量为4096,最大数量是8192

备份参数:
-t 备份类型:full/incr/diff,完全/增量/差异
-S 备份阶段:all/df/lsn/al
-D 备份描述,默认值是null
-c 是压缩备份文件?默认值是false
-m 是永远保持备份文件?默认值是false
-A 是自动将数据库设置为归档模式时,你会做一个在线备份,但数据库正在运行无存档模式吗?默认值是false
-n 是没有在线备份归档日志?默认值是false

恢复参数:
-t 还原类型: backup_point/backup_point_last/full/full_last/full_last_ignore_error/time_point/time_point_last
备份点/最后一次备份点/完全/上一次完全/上一次完全忽略错误/时间点/最后一次时间点
-T 将数据库恢复到某一时间点,时间格式是YYYYMMDD_HHMMSS,只有当使用了-t参数是time_point/time_point_last
-s 还原数据库的数据文件路径,只有当使用了-t参数是backup_point / backup_point_last
-l 恢复数据库的日志文件的路径,只有当使用了-t参数是backup_point / backup_point_last
-a 恢复拱数据库的日志文件路径,只有当使用了-t参数是backup_point / backup_point_last
-B DB_CFG_BUF_DATA_BUFFER_PAGES参数的值,默认值是8192,数据缓冲区的实际大小是64MB,操作系统的虚拟内存应该超过此值
-F 还原参数的XML文件的路径
-v 显示版本
-? 显示帮助
  • 逻辑备份&恢复

备份:

1
2
3
4
5
6
7
8
-- 全库备份
osrexp -hlocalhost -p2003 -usysdba/szoscar55 -dosrdb level=full file=d:/backup log=d:/bk.log mode=entirety ignore=false view=true sequence=true procedure=true constraint=true trigger=true index=true

-- 模式备份
osrexp -hlocalhost -p2003 -usysdba/szoscar55 -dosrdb level=schema file=d:/backup log=d:/bk.log mode=entirety ignore=false schema=(sysdba,public) excludetable=(public.test,sysdba.test) view=true sequence=true procedure=true constraint=true trigger=true index=true

-- 表备份:
osrexp -hlocalhost -p2003 -usysdba/szoscar55 -dosrdb level=table file=d:/backup log=d:/bk.log mode=entirety ignore=false table=(messagebord.test,sysdba.test) view=false procedure=false sequence=false constraint=true trigger=true index=true

备份参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
-h                       服务器名
-p 服务器端口
-u 用户名和密码(sysdba/szoscar55)
-k 表示以操作系统用户登录
-d 数据库名称
level 备份级别
parfile 指定一个文件名,文件包含备份操作参数的列表
file 指定备份的文件
log 指定备份的日志
mode 备份方式
ignore 是否忽略不重要的错误
view 是否备份视图
sequence 是否备份序列
procedure 是否备份存储过程
constraint 是否备份表约束
trigger 是否备份表触发器
index 是否备份表索引
schema 模式级别下要备份的模式
table 表级别下要备份的表对象
single 是否只备份单个表对象
excludetable 模式级别下不要备份的表

恢复:

1
2
3
4
5
6
7
8
9
10
-- 全库恢复
osrimp -hlocalhost -p2003 -usysdba/szoscar55 -dosrdb level=full file=d:/backup log=d:/rt.log mode=entirety ignore=y recreateschema=false view=true sequence=true procedure=true recreateotherobject=true recreatetable=true constraint=true deletetabledata=true trigger=true index=true
(如果recreateschema=true 则后面的recreateotherobject=true recreatetable=true无效了)

-- 模式恢复
osrimp -hlocalhost -p2003 -usysdba/szoscar55 -dosrdb level=schema file=d:/backup log=d:/rt.log mode=entirety ignore=true schema=(sysdba,public) recreateschema=false view=true sequence=true procedure=true recreateotherobject=true excludetable=(sysdba.test,public.test) recreatetable=false constraint=false deletetabledata=true trigger=false index=false

-- 表恢复
osrimp -hlocalhost -p2003 -usysdba/szoscar55 -dosrdb level=table file=d:/backup log=d:/rt.log mode=entirety ignore=true recreateschema=false view=false procedure=false sequence=true recreateotherobject=false table=(sysdba.test,public.test) recreatetable=true constraint=true deletetabledata=true trigger=true index=true
(recreatetable=true 后面的trigger=true index=true才有效)

恢复参数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
-h                       服务器名
-p 服务器端口
-u 用户名和密码(sysdba/szoscar55)
-k 表示以操作系统用户登录
-d 数据库名称
level 恢复级别
parfile 指定一个文件名,文件包含恢复操作参数的列表
file 指定恢复的文件
log 指定恢复的日志
mode 恢复方式
ignore 是否忽略不重要的错误
view 是否恢复视图
sequence 是否恢复序列
procedure 是否恢复存储过程
constraint 是否恢复表约束
trigger 是否恢复表触发器
index 是否恢复表索引
schema 模式级别下要恢复的模式
table 表级别下要恢复的表对象
single 是否只恢复单个表对象
excludetable 模式级别下不要恢复的表
recreateschema 是否重构模式
recreateotherobject 是否重构视图、存储过程、序列
recreatetable 是否重构表
tablespace 是否恢复表空间
deletetabledata 是否清空原表中的数据

主备环境

主备集群的搭建这部分内容主要咨询的售后,其采用浮动ip的方式来实现。

  • 首先将数据库设置为普通模式
/opt/ShengTong/admin/OSRDB.conf
1
HOTSTANDBY_DATABASE_TYPE=0
  • 启动数据库
1
2
3
oscar -o normal -d osrdb  ## 命令行启动,如果不存在可以先 source /etc/profile

/etc/init.d/oscardb_OSRDBd start ## 后台启动
  • 并开启归档
1
2
3
4
5
-- 查看归档
select archive from v$instance

-- 打开归档
alter database archivelog;
  • 设置节点
1
2
3
4
alter database set node list node '192.168.141.13', node '192.168.141.15';

-- 可以查询节点设置情况
select * from v_sys_ha_slave_info;
  • 关闭数据库,改为HA模式,进行设置,并重启数据库
/opt/ShengTong/admin/OSRDB.conf
1
2
3
4
5
6
7
8
9
10
HOTSTANDBY_DATABASE_TYPE=2

## 网关ip,如果没有网关,填一个子网中存在的ip
HA_GATEWAY=192.168.141.1

## 网卡名称:1
HA_LOCAL_NET_DEV_NAME="ens33:1"

## 设置浮动ip
HA_SERVER_IP_ADDRESS=192.168.141.18

实例创建&卸载

  • 创建一个lsp库实例
1
2
3
4
5
6
7
8
9
10
11
12
13
1. oscar打开单用户模式

2. 创建数据库
CREATE DATABASE lsp ENCODING 'GBK' ARCHIVELOG '/opt/ShenTong/arch/' CONTROLFILE '/opt/ShenTong/admin/lsp.ctrl' LOGFILE '/opt/ShenTong/odbs/lsp/TDB01.log' SIZE 500M TEMPFILE '/opt/ShenTong/odbs/lsp/TDB01temp.dbf' SIZE 100M AUDITFILE '/opt/ShenTong/odbs/lsp/TDBaux01.dbf' SIZE 100M AUTOEXTEND ON NEXT 20M DATAFILE '/opt/ShenTong/odbs/lsp/TDB01.dbf' SIZE 1G AUTOEXTEND ON NEXT 200M undo tablespace UNDOTS01 datafile '/opt/ShenTong/odbs/lsp/UNDO_SAPM01.dbf';

## 3. 初始化数据库
oscar -o restrict -d lsp

## 4. 注册服务
oscar -o install -d lsp

## 5. 使环境变量生效
source /etc/profile
  • 配置库实例
1
2
## 拷贝一份osrdb的配置文件,然后修改默认端口 PORT=2005,不然端口冲突起不来
cp /opt/ShenTong/admin/OSRDB.conf /opt/ShenTong/admin/LSP.conf
  • 启动数据库
1
2
3
4
/etc/init.d/oscardb_LSPd start

## 登录
isql -d lsp -p 2005 -U sysdba/szoscar55
  • 卸载数据库
1
2
3
4
5
6
7
8
9
## 停止数据库
/etc/init.d/oscardb_LSPd stop

## 卸载数据库
oscar -o uninstall -d LSP

## oscar进入单用户模式,删除这个库
oscar
drop database LSP


参考:

  1. https://blog.csdn.net/asd051377305/article/details/108766792
  2. https://blog.csdn.net/qq_57052445/article/details/130360393