达梦连接篇
连接主备服务名配置:
cat /etc/dm_svc.conf
# 全局配置区
GRP1=(192.168.43.131:32141,192.168.43.132:32142)
TIME_ZONE=(+480) #表示+8:00 时区
LOGIN_ENCRYPT=(0)
DIRECT=(Y)
# 服务配置区
[GRP1]
TIME_ZONE=(+540) #表示+9:00 时区
LOGIN_MODE=(0)
#指定优先登录的服务器模式。0:优先连接 Primary 模式的库,Normal 模式次之,
#最后选择 Stantby 模式;1:只连接主库;2:只连接备库;3:优先连接 Standby 模式
#的库,Primary 模式次之,最后选择Normal模式;4:优先连接Normal模式的库,Primary
#模式次之,最后选择 Standby 模式。默认值为 0
SWITCH_TIMES=(3)
#指定连接失败切换的次数
SWITCH_INTERVAL=(100)
#连接失败切换的间隔,单位毫秒
RW_SEPARATE=(1) #是否启用读写分离 0 不启用1 启用
RW_PERCENT=(25) #读写分离分发比例,读事务向主库分发的比例
连接dsc服务名配置:
cat /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
dm_dsc=(10.10.10.10:6236,1:6236)
[dm_dsc]
CLUSTER=(DSC)
##EP_SELECTION=(1)
DO_SWITCH=(2)
SWITCH_TIMES=(2000)
SWITCH_INTERVAL=(300)
连接失败问题:
1:查找服务是否正常;
ps -ef|grep dmserver
2:端口是否正确;
cat /opt/dmdbms/data/DAMENG/dm.ini | grep PORT
./disql SYSDBA/SYSDBA@IP:PORT
3:端口通不通;
telnet *.*.*.* 5236
日常使用篇
查达梦进程
ps -ef|grep dmserver
工具目录
ps -ef|grep dmserver
里面有个bin路径,工具在和bin同级的tool目录里面
查参数
Select * from v$parameter where name like ‘%PWD%’;
查归档状态
Select * from v$arch_file;
查建库参数
#查页大小
SELECT cast(PAGE()/1024 as varchar);
#查簇大小
SELECT cast(SF_GET_EXTENT_SIZE() as varchar)
#查字符集
select substr(svr_version,instr(svr_version,'V')),svr_version FROM v$instance
SELECT CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' then 'UTF-8' when '2' then 'EUC-KR' end
#查大小写敏感
SELECT cast(SF_GET_CASE_SENSITIVE_FLAG() as varchar)
#长度是否以字符为单位
select SF_GET_LENGTH_IN_CHAR();
杀会话
begin
for rec in
(
select sess_id from v$sessions where sess_id <> sessid()
)
loop
sp_close_session(rec.sess_id);
commit;
end loop;
end;
查表上面的锁
SELECT * FROM V$LOCK WHERE table_id=(
SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OBJECT_NAME='BDA_FP_T_A_ZDZJLMMX'
);
查表大小
1、创建一个表来存各表的大小
create table table_count (owner varchar(100),table_name varchar(100),used_space_MB varchar(100));
2、执行语句块,查出各表的大小,存进table_count这个表里。
declare
begin
for rec in
(
select owner, table_name from all_tables order by 1, 2
)
loop
insert into table_count
select
rec.owner ,
rec.table_name,
table_used_pages(rec.owner, rec.table_name)*(page()/1024)/1024
from
dual;
end loop;
end;
3、查询表table_count的信息,根据需求排序,就能看到各表的大小
select * from table_count order by used_space_mb desc;
查单表大小:
select table_used_pages('SYS', 'POLICIES')*(page()/1024)/1024 from dual;
sql执行篇
回滚段过旧
方法:优化sql,增加roll表空间
数据迁移篇
迁移方法
用达梦自带的dts工具
打开dts工具。
新建一个工程
新建迁移任务
选择oracle->dm
image.png
填写oracle数据库信息
image.png
指定驱动版本并自定义URL(这里利用去官网下载的oracle11.2.0.4的驱动)
下载地址
image.png
填写目标库信息
image.png
指定要复制的模式(这里仅将HR和SCOTT模式的数据迁移过去)
image.png
选择要迁移的对象
完成。
image.png
迁移完成。
常见迁移报错解决
1.由于外键约束导致数据未导入(重新导入或者分批导入,先导表结构,再导数据,最后导约束)
2.超度超出上限,扩大表字段长度,然后再重新导入数据
备份恢复篇
备份失败解决
1:确保使用的是dmdba用户
2:确定dmap服务正常
ps -ef|grep dmap
数据库升级
替换bin目录
1、正常关闭数据库服务
[dmdba@localhost /]$ cd /dmdbms/bin
[dmdba@localhost bin]$ ./dmserver stop DmServiceDMSERVER
2、检查目前数据库的版本
[dmdba@db1 bin]$ ./disql -id
1-1-156-21.01.13-133136-ENT
3、备份当前bin目录
[dmdba@localhost dmdbms]$ mv bin bin_BAK
4、另找一台新服务器安装新版的DM软件,
将新的bin文件夹上传至原来bin目录下。
5、修改文件夹所有者
[dmdba@localhost dmdbms]$ chown –R dinstall: dmdba bin/
6、启动数据库:
注意:如果在新机器上只复制了bin目录,是无法注册后台服务的,需要将原本已注册
的服务文件(例如DmServiceDMSERVER01)进行编辑,确保里面的PATH路径与实际环境一致,才能后台启动这个脚本:
[dmdba@localhost bin]$ ./dmserver start DmServiceDMSERVER
使用卡顿问题定位
sql执行慢
优化sql
内存不足
查找当前的内存使用情况:
select (select sum(n_pages * page_size)/1024/1024 from
v$bufferpool)||'MB' as BUFFER_SIZE ,( select
sum(total_size)/1024/1024 from v$mem_pool)||'MB' as mem_pool,(select
sum(n_pages * page_size)/1024/1024 from v$bufferpool)
+ (select sum(total_size)/1024/1024 from v$mem_pool)||'MB' as
TOTAL_SIZE from dual;
一般都是由于mem_pool过大引起的。
常见的原因:
1:memory_target设置为0,导致会话使用的内存未释放,考虑设置memory_target参数。
2:会话执行的sql消耗大量的内存,此时根据下面sql找到最占用内存的sql,然后进行优化
SELECT "SESSID", MAX_MEM_USED||'KB',SQL_TXT FROM V$SQL_STAT order by MAX_MEM_USED DESC;