一、达梦安装
#!/bin/bash
# just for dm database install!
echo "please ensure cpu and mem is enough!"
echo "please use root login"
read -p "continue"
export DISPLAY=:0.0
xhost +
mkdir /home/dmdba
groupadd dinstall
useradd -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
echo "dmdba" |passwd dmdba --stdin
echo "user dmdba paaword is dmdba"
read -p "continue"
echo "
dmdba soft nofile 4096
dmdba hard nofile 65536
" >> /etc/security/limits.conf
ulimit -n 65536
mkdir /opt/dm
echo "ensure dm iso like dm*.iso"
read -p "continue"
mount ./dm*.iso /opt/dm
cp /opt/dm/* /home/dmdba/
chmod 755 /home/dmdba/*
chown dmdba:dinstall /home/dmdba/
su dmdba -c "
export DISPLAY=:0.0
xhost +
~/DMInstall.bin"
按提示root 执行脚本
PATH=$PATH:~/dmdbms/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/dmdbms/bin
~/DMInstall.bin -i 命令行安装
二、达梦WEB管理
http://localhost:8080/dem
环境准备:
1. DM数据库~ 本文档使用的是DM8
2. tomcat
步骤内容:
1. 安装DM8数据库~ (安装请参考安装手册)
2. 创建一个数据库作为DEM后台数据库, 数据库dm.ini参数配置进行优化, 推荐配置:
MEMORY_POOL = 200
BUFFER = 1000
KEEP = 64
MAX_BUFFER = 2000
SORT_BUF_SIZE = 50
端口号和 密码这里都选择默认。
3.打开 manager工具 并找到达梦数据库安装路径下的 /web/dem_init.sql ,并执行。 执行后可以看到新模式 DEM
4. 找到 达梦安装路径下的 web文件夹,将文件夹下的dem.war 复制到tomcat 中间件路径下的 webapps下。
5. 配置tomcat:
切换到tomcat 路径:
(1)在conf/server.xml中 <Connector port="8080" protocol="HTTP/1.1"... 追加属性字段 maxPostSize="-1";
(2)修改jvm启动参数,
Linux:bin/catalina.sh -> JAVA_OPTS="-server -Xms256m -Xmx1024m -XX:MaxPermSize=512m -Djava.library.path=/opt/dmdbms/bin" 注意这里改成达梦安装路径的bin路径
Windows:bin/catalina.bat -> set java_opts= -server -Xms40m -Xmx1024m -XX:MaxPermSize=512m -Djava.library.path=D:\dmdbms\bin 注意这里改成达梦安 装路径的bin路径
6 .切换到bin路径下 ,双击startup.bat 启动tomcat 服务器。(注意,linux运行 startup.sh)
会弹出一个命令行,稍等一会 浏览器访问页面 可以出现tomcat 主页 即可。(第一次启动报错不用担心,因为没有修改数据库连接)
7. 双击 shutdown.bat 停止服务器,并切换到 webapps/dem/WEB-INF 下修改 db.xml 修改为数据库连接串(可连接远程数据库)
8 .再次启动tomcat ,启动成功后再浏览器访问 http://localhost:8080/dem
9. 使用默认密码 admin/888888 登入:
dem 管理系统可以监控实例,连接实例,迁移数据,部署集群,等功能~
10. 监控主机 dmagent代理。
在安装达梦数据库时,在安装路径 有一个~ tool/dmagent 这个就是达梦数据库的代理工具。
我们打开dmagent文件夹下的 config.properties文件 修改url
这里可以是其它主机的数据库,地址写部署dem的主机ip地址即可,然后点击DMAgentRunner.bat
此时打开主机,可以监控到这台机器的情况~
三、常用sql语句解析
1. 常用
select* fromv$version; 大版本
selectid_code; 发行日期
Select * from v$instance 版本(版本信息同$version),状态等信息
Select * from v$database 启动时间,启动次数等数据
Host clear; host+命令 执行linux系统命令并返回
Select x,y from a1 order by 2 desc; 说明:此处 order by 2 是以查询结果的第二列排序,也就是y列。
disql sysdba/888888888@localhost:6236
-- current time, sysdatetime
select curdate(),sysdate fromdual;
-- time interval
select (time'19:02:30'-time'11:04:40')second;
-- function
select power(2,3) ,cos(30),greatest(14,56),least(13,544,688,3),pi()
-- char to number
select to_number('2,222,222.22','9G999G999D99')
select to_number('-343234543.01')
select to_number('2,222,222.22','9,999,999.99')
select to_number('$2,222,222.22','$9,999,999.99')
select to_number('2,222,222.22','9G999G999D99')
select to_number('2,222,222.22','9G999G999D99')
select to_number('1,234','XXXX')
select trunc('123.456',-2)
select trunc('123.456',2)
Select substr(var,5,7) --截取var从五到7的字符
select to_char(-1000,'L9G999D99MI');
---------------------------------------------------------------
---------------------------------------------------------------
alter database add logfile '/tmp/dm_log_0.log' size200;
alter database resize logfile'/tmp/dm_log_0.log' to300;
alter database mount;
alter database rename logfile'/tmp/dm_log_0.log' to'/tmp/dm_log_1.log'; --- 只允许在MOUNT状态NORMAL模式下执行
alter database open;
alter database mount;
alter database primary; ---primary / standby
alter database open force;
alter database mount;
alter database normal;
alter database open ;
alter database mount;
alter database archivelog; ----归档模式
alter database mount;
alter database noarchivelog; ---- 非归档模式
create databasetest datafile'/opt/test.dbf' size512;----error
-----------------------------------------------------
create schematest;
create tablespace"ts" datafile '/opt/dmdbms/tspace.dbf' size100 autoextend on maxsize16777215 CACHE=NORMAL;
create tablespace"TS2" datafile '/opt/dmdbms/test2.dbf' size32 ;
select user;
commit;
drop tablespace"ts";
create huge tablespace"hts1" path '/opt/dmdbms/hts1.dbf';
commit;rollback;
create huge tabletest.ht3(id int,name varchar(12)) storage(section(65536),filesize(64),onhts1) compress level1(name)log all;--error --why hts1 cann't store hfs???
drop huge tabletest.ht1;
create huge tabletest.ht2(id int,name varchar(12)) storage(section(65536),filesize(64)) compress level1(name)log all;-----ok!!!
create tablet1(id int,name varchar(12)) partition by range(id)(partitionp1 values less than (500),partitionp2 values less than (1000));
1. 公用表表达式
嵌套查询过多不易读,放在临时表里又增加io 开销
Cte 则避免上述情况
SQL> with
cte1(m) AS (select id from t1 where id > 1),
cte2(n) AS (select id from t2 where id > 5)
select m,n from cte1,cte2;
等价于
Select t1.id , t2.id from t1,t2 where t1.id >1 and t2.id >5;
2. Rollup 和cube,grouping sets统计的使用
Select 部门,职务,count(*) from t6 where id < ‘521’group by rollup(id,name);
结果:
部门 | 职务 | 计数 |
1 | 11 | 1 |
2 | 21 | 2 |
1 | 12 | 4 |
2 | 22 | 8 |
1 | Null | 5 |
2 | Null | 10 |
null | null | 15 |
处理后结果:
部门 | 职务 | 计数 |
1 | 11 | 1 |
12 | 4 | |
Null (小计) | 5 | |
2 | 21 | 2 |
22 | 8 | |
Null (小计) | 10 | |
Null (合计) null | 15 |
Rollup只对部门进行小计,而cube对部门,职务都进行统计。
Grouping sets
....... group by grouping sets (id,job),year(hir_date);相当于把id,job看成一个整体分组
id | job | hirdate |
1 | 3 | null |
4 | 6 | null |
null | null | 2012 |
null | null | 2013 |
Select id from c1 for update
Select top 5 id ,name...前5行
Select top 2,6 id name...第2条之后的6条记录(3到8)
Limit 类似于mysql分页
3. 全文检索
Create contextindex index1 on emp(name) lexer chinese_vgram_lexer;
Create context index index1 on emp lexer chinese_vgram_lexer;
... ... where contains(name, ’琳’and ‘静’);
四、达梦结构
五、创建桌面快捷方式
1. 脚本
dmdba用户安装,dmdba用户桌面会有快捷方式,但是Applications和root桌面都不会有快捷方式,所以需要去dmdbms/script下手动执行脚本创建。root桌面创建桌面快捷方式不再赘述同1,只需用root用户去执行./makedesktopdir.sh create即可。
而创建Applications中快捷方式需要再root用户执行dmdbms/script/下脚本./gnomemenu.sh insert
2. 如果没有该文件,可以自己创建
1. 创建桌面文件touch myapp.desktop
2. 编辑此文件写入以下内容
1 2 3 4 5 | [Desktop Entry] Name = 达梦管理工具 Exec = /usr/bin/xxxx/xxx.sh Icon = /usr/bin/xxxx/xxx.png Type = Application |
3. 返回桌面 右键编辑这个文件,然后双击测试是否可以正常启动
六、
七、
八、
九、
十、
十一、达梦的备份
1. dmrman冷备
1.1 备份
./dmrman ctlstmt="backup database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' full backupset '/home/dmdba/backup2021_5_17'"全量备份
RMAN> BACKUP DATABASE '/data/dmdbms/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/data/dmdbms/' BACKUPSET '/data/dmdbms/backup/full_bak_20210917';增量备份
SQL > BACKUP DATABASE '/data/dmdbms/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/data/dmdbms/' BACKUPSET '/data/dmdbms/backup/full_bak_20210917';SQL语句备份
1.2 恢复
./dmrman ctlstmt="restore database
'/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/backup2021_5_17'"
1.3 还原
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/backup2021_5_17'"
1.4 更新魔数
./dmrman ctlstmt="recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic"
1.5 或者直接用RMAN工具
RMAN > backup database; 备份全库
RMAN > configure controfile autoback on;自动备份控制文件
RMAN > list backup;查看备份
RMAN > restore controlfile from autobackup;恢复控制文件
RMAN > restore database;恢复数据文件
RMAN > recover database; 还原数据库
Ex: RMAN > run {
Set until scn 1335543;
Recover database;
}
1.6 恢复到指定节点
restore database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' from backupset '2021-5-24
recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' with archivedir ' /home/dmdba/dmdbms/data/DAMENG/arch' until time '2021-05-24 16:20:50';
recover database '/home/dmdba/dmdbms/data/DAMENG/dm.ini' update db_magic;
2. 达梦数据库开启归档日志(热备)
登入数据库。2.1 启动归档ALTER DATABASE MOUNT;ALTER DATABASE ARCHIVELOG;2.2 添加归档(参数值)ALTER DATABASE ADD ARCHIVELOG‘DEST=/dm7/arch,TYPE=LOCAL,FILE_SIZE=64,SPACE_LIMIT=20480’;2.3 最后打开数据库open模式ALTER DATABASE OPEN;
备份数据库:
SQL> backup database;
备份表空间:表空间备份只能联机,还原只能脱机
SQL> backup tablespace DMHR;
备份表:
SQL> backup table emp;
备份归档:
SQL> backup archivelog;
2.4 表空间还原
创建表空间:创建表空间TEST,数据文件初始大小为50m,每次自动扩展
2m,最大可扩展1024m;
create tablespace "TEST" datafile '/dm8/data/DAMENG/TEST01.DBF' size
50 autoextend on next 2 maxsize 1024 CACHE = NORMAL;
备份表空间
backup tablespace "TEST" full to "TS_TEST_FULL_2021_01_07_14_40_19" backupset '/dm8/backup';
表空间脱机
Alter tablespace test offline;
关闭数据库服务
表空间还原
RMAN> restore database '/dm8/data/DAMENG/dm.ini' tablespace TEST from backupset '/dm8//backup/'
表空间恢复:
RMAN> recover database '/dm8/data/DMDB/dm.ini' tablespace TEST;
3. 逻辑导入和导出
3.1逻辑导出
要求数据库打开
逻辑导出数据库:
[dmdba@localhost bin]$ ./dexp SYSDBA/SYSDBA file=/dm8/backup/full.dmp full=y
备份表:
[dmdba@localhost bin]$ ./dexp SYSDBA/SYSDBA file=/dm8/backup/emp.dmp tables=sysdba.emp
备份模式:
[dmdba@localhost bin]$ ./dexp SYSDBA/SYSDBA file=/dm8/backup/dmhr.dmp schemas=dmhr
备份用户:
[dmdba@localhost bin]$ ./dexp SYSDBA/SYSDBA file=/dm8/backup/tast.dmp owner=test
3.2逻辑导入
假设emp表损坏:dimp还原
[dmdba@localhost bin]$ ./dimp SYSDBA/SYSDBA file=/dm8/backup/emp.dmp tables=emp.dmp ignore=y
如果表存在注意参数IGNORE
如果表不存在:
[dmdba@localhost bin]$ ./dimp SYSDBA/SYSDBA file=/dm8/backup/emp.dmp tables=sysdba.emp
十二、达梦数据守护
1. 注意事项
注意,按照文档操作即可,,主从上用 ifconfig ens33:0 0.0.0.0 netmask 255.255.255.0配置内部通讯ip(也可添加网卡)
主从不要dmwatcher.ctl 文件,两处地方省略。
2. 启停顺序
2.1 停止顺序
I. 停止
II. 停止从库
III. 停止主库
IV. 关闭主库数据库
V. 关闭备库
2.2 启动顺序
启动顺序逆序进行
3. 部署参考
十三、达梦服务注册
1. 参数说明
-t 服务类型,包括dmimon,dmap,dmserver,dmwatcher,dmmonitor,dmcss,dmcssm,dmasmsvr,dmdcs,dmdrs,dmdras,dmdss
服务名后缀,对于dmimon,dmap服务类型无效
文件路径
文件路径.
文件路径.
文件路径.
文件路径.
文件路径.
文件路径.
文件路径.
文件路径.
文件路径.
文件路径.
文件路径.
文件路径.
服务器信息(IP:PORT)
设置服务器启动模式open或mount,只针对dmserver服务类型生效,可选
设置依赖服务,此选项只针对systemd服务环境下的dmserver和dmasmsvr服务生效
服务脚本路径,设置则忽略除-y外的其他参数选项
帮助
2. 举个栗子
/dm/script/root/dm_service_installer.sh -t dmmonitor -monitor_ini ../dmmonitor.ini -p DM3
十四、存储过程
---------------------------------------- example 1 -------------------------------------------------------
--创建表,作为数据源备用
create table tb1(id int);
insert into tb1 values(1);
insert into tb1 values(2);
create table tb2(id int);
insert into tb2 values(3);
insert into tb2 values(4);
create table tb3(id VARCHAR);
insert into tb3 values('tb1');
insert into tb3 values('tb2');
select * from tb2;
--创建存储过程
create or replace procedure SYSDBA.pc1("res" out int) is
id int;
begin
....
end loop;
end pc1;
create temporary table aaa(id int);--创建临时表
---------------------------------------- example 2 -------------------------------------------------------
create or replace procedure SYSDBA.pc2(id in int) is
--此处可定义变量
name varchar(20);
cursor my_cs is select id from tb3;
begin
open my_cs;
loop
fetch my_cs into name;
exit when my_cs%notfound;
print id;
id:=id+1;
print 'name:' || name;
end loop;
close my_cs;
end pc2;
--执行
--调用过程(call pc1;pc1;如下函数调用三种方法)
begin
sysdba.PC1;
end
pc2(145262);
call PC1;