下面是在命令行客户端工具直接执行的脚本(执行后,会输出待调整参数):
备注:第一次dminit后就要调整,获取的是当前系统可用内存。
set serveroutput on
declare
v_maxsess bigint
v_cpus bigint
v_mem_mb bigint
v_bufs bigint
v_refs bigint
v_maxdisk_mb bigint
begin
-- manual set
v_maxsess=5000
-- reload messages
v_cpus=64
v_mem_mb=500000
v_bufs=101
v_refs=67
v_maxdisk_mb=100000
SELECT cast(67434610688*0.8/1024/1024 as int) into v_maxdisk_mb FROM V$SYSTEMINFO ORDER BY DRIVER_TOTAL_SIZE DESC
-- SELECT * FROM V$SYSTEMINFO ORDER BY DRIVER_TOTAL_SIZE DESC LIMIT 1 OFFSET 1
SELECT case when N_CPU<8 then 8 3 when N_CPU<32 then N_CPU 2 else 64 end n_CPU,FREE_PHY_SIZE/1024/1024 MEM
into v_cpus,v_mem_mb FROM V$SYSTEMINFO LIMIT 1
with a(val) as(select 5 union all
select 7 union all
select 11 union all
select 13 union all
select 17 union all
select 19 union all
select 23 union all
select 29 union all
select 31 union all
select 37 union all
select 41 union all
select 43 union all
select 47 union all
select 53 union all
select 59 union all
select 61 union all
select 67 union all
select 71 union all
select 73 union all
select 79 union all
select 83 union all
select 89 union all
select 97 union all
select 101),b as(
select rownum rn,val val from a)
select (
select VAL bufs from b where rn=( 3 + CAST( v_mem_mb/1024.0 1.0/2048 100 AS INT))) v_bufs,,(
select VAL refs from b where rn=( 3 + CAST( v_mem_mb/1024.0 1.0/2048 100 AS INT)) )v_refs into v_bufs,v_refs from dual
print '
begin
SP_SET_PARA_VALUE(2,''MAX_OS_MEMORY'',100)
SP_SET_PARA_VALUE(2,''MEMORY_POOL'',cast( '||v_mem_mb||' 0.1 as int) )
SP_SET_PARA_VALUE(2,''MEMORY_TARGET'',cast ( '||v_mem_mb||' 0.2 as int) )
SP_SET_PARA_VALUE(2,''MEMORY_MAGIC_CHECK'',1)
SP_SET_PARA_VALUE(2,''VM_POOL_TARGET'',cast( (0.37) '||v_mem_mb||' 1024 0.6/'||v_maxsess||' as int))
SP_SET_PARA_VALUE(2,''SESS_POOL_TARGET'',cast( (0.37) '||v_mem_mb||' 1024 0.3/'||v_maxsess||' as int ) )
SP_SET_PARA_VALUE(2,''CACHE_POOL_SIZE'',cast( (0.37) '||v_mem_mb||' ('||v_maxsess||'/2000.0)*0.55 as int) )
SP_SET_PARA_VALUE(2,''BUFFER'',cast('||v_mem_mb||' * 0.5 as int))
SP_SET_PARA_VALUE(2,''MAX_BUFFER'',cast('||v_mem_mb||' * 0.5 as int))
SP_SET_PARA_VALUE(2,''RECYCLE'',10000*'||v_cpus||'/100)
SP_SET_PARA_VALUE(2,''BUFFER_POOLS'','||v_bufs||')
SP_SET_PARA_VALUE(2,''RECYCLE_POOLS'','||v_refs||')
SP_SET_PARA_VALUE(2,''WORKER_THREADS'','||v_cpus||')
SP_SET_PARA_VALUE(2,''TASK_THREADS'','||v_cpus||')
SP_SET_PARA_VALUE(2,''HJ_BUF_GLOBAL_SIZE'', cast('||v_mem_mb||' * 0.18 as int))
SP_SET_PARA_VALUE(2,''HJ_BUF_SIZE'', cast('||v_mem_mb||' * 0.0018 as int))
SP_SET_PARA_VALUE(2,''HAGR_BUF_GLOBAL_SIZE'',cast('||v_mem_mb||' * 0.12 as int))
SP_SET_PARA_VALUE(2,''HAGR_BUF_SIZE'', cast('||v_mem_mb||' * 0.0024 as int))
SP_SET_PARA_VALUE(2,''DICT_BUF_SIZE'','||v_refs||' 5)
SP_SET_PARA_VALUE(2,''TEMP_SIZE'',5000 '||v_mem_mb||'/1024.0/256)
SP_SET_PARA_VALUE(2,''VM_POOL_SIZE'','||v_refs||' 5)
SP_SET_PARA_VALUE(2,''SESS_POOL_SIZE'','||v_refs||' 5)
SP_SET_PARA_VALUE(2,''MAX_SESSIONS'','||v_maxsess||')
SP_SET_PARA_VALUE(2,''MAX_SESSION_STATEMENT'','||v_maxsess||'*8)
SP_SET_PARA_VALUE(2,''ENABLE_ENCRYPT'',0)
SP_SET_PARA_VALUE(2,''USE_PLN_POOL'',1)
SP_SET_PARA_VALUE(2,''OLAP_FLAG'',2)
SP_SET_PARA_VALUE(2,''OPTIMIZER_MODE'',1)
SP_SET_PARA_VALUE(2,''VIEW_PULLUP_FLAG'',1)
SP_SET_PARA_VALUE(2,''COMPATIBLE_MODE'',2)
SP_SET_PARA_VALUE(2,''MONITOR_TIME'',0)
SP_SET_PARA_VALUE(2,''ENABLE_MONITOR'',1)
SP_SET_PARA_VALUE(2,''SVR_LOG'',0)
end
'
print '
create tablespace "USER" datafile ''USER01.dbf'' size 200'
--print '
--alter user SYSDBA default tablespace "USER"'
print '
sp_set_para_value(1,''PWD_POLICY'',0)'
print '
create user DMDBA identified by DMDBA default tablespace "USER"'
print '
GRANT DBA TO dmdba'
print '
sp_set_para_value(1,''PWD_POLICY'',2)'
print '
ALTER DATABASE MOUNT
ALTER DATABASE ARCHIVELOG
ALTER DATABASE ADD ARCHIVELOG ''DEST=/home/dmdba/dmdbms/arch,TYPE=LOCAL,FILE_SIZE=1024,SPACE_LIMIT='||cast(v_maxdisk_mb*0.1 as int)||'''
ALTER DATABASE OPEN'
print '
sp_set_para_value(1,''BAK_USE_AP'',2)
BACKUP DATABASE FULL TO DMBAK_FULL_00 BACKUPSET ''DMBAK_FULL_00'' COMPRESSED
'
exception
when others then
raise_application_error (-20001,substr( ' 执行失败, '||SQLCODE||' '||SQLERRM||' '||dbms_utility.format_error_backtrace , 1, 400))
end
/
~关注
2021-09-13 16:53:28
果味怪叔叔~
码龄3年
关注
在达梦数据库的日常使用中我们可能会遇到很多问题,今天我将自己近期常遇到的错误进行总结汇总。
1、连接数据库报错:网络通信异常
解决方法:
数据库连接报网络通信异常原因通常只有两个,数据库服务启动异常或者数据库服务器网络通信异常
1. 登录数据库服务器检查数据库进程是否存在ps –ef|grep dmserver
2. 检查数据库服务器网络通信ping数据库服务器地址
3. 检查数据库服务器数据库端口号通信是否正常telnet数据库服务器ip数据库端口号
2、数据库启动报错:dmserver startup failed, code = -104 [Invalid INI file]
解决方法:
数据库正常启动需要有数据文件,该类报错一般存在如下两方面原因:
1)数据文件不存在;
2)启动数据库的用户没有读写数据文件的权限。
3、数据库连接报错:用户名或密码错误
解决方法:
此类错误只需输入正确的密码即可。
如果忘记密码,以管理员登录数据库后修改该用户的密码:
alter user USERNAME identified by “PASSWD”
前面的USERNAME是用户名,后面的PASSWD是密码。
需要注意用户名不区分大小写,密码区分大小写。
4、登录数据库时报错“用户已被锁”
解决方法:
使用SYSDBA登录到数据库后,鼠标右键在对应“登录”名上单击“解锁”,此时“登录名”上的小锁符号消失;
或使用SYSDBA登录后手动调用存储过程call SP_UNLOCK_LOGIN(‘登录名‘)解锁;
通常是用户多次尝试登录但密码错误导致,有时候应用系统配置了数据库连接池,应用启动时初始化连接池会多次连接数据库,如用户名密码不对,则很快就会锁住该用户。
5、执行update,insert,delete语句完成后程序或其他数据库连接查不到改变后的数据
解决方法:
造成此类现象的原因单条sql或者sql脚本执行完上述语句后没有进行commit *** 作导致。
数据库的执行单元是事务,事务如果没有commit或者rollback,仍处于未完成状态,根据事物ACID特性中的隔离性,其他数据库连接无法看到未完成的数据库事务对数据的改变
6、数据库语句长时间不能执行完成,类似卡住的状态
解决方法:
1)对于select等查询语句,需要对sql语句进行分析优化,提升查询效率
2)update,insert,delete语句执行慢可能的原因为数据库阻塞导致,需要查找出导致阻塞的语句,并对语句进行处理
7、执行语句报错“字符串截断”
解决方法:
修改的数据,超过了数据库中字符类型(VARCHAR,CHAR)定义的长度,如VARCHAR(64),插入的数据字节长度超过64就会报错
8、执行语句报错“数据溢出”
解决方法:
修改的数据,超过了数据库中数值类型(int,number,decimal)定义的长度,如decimal(6,2),插入1000000,插入的数据超过定义的范围就会报错。
9、执行语句报错 “不能修改或删除聚集索引的列”或“试图删除聚集主键”
解决方法:
若想对有聚聚索引的列进行修改,可以重建表,或者重新在别的列上建立一个聚集索引。该列上的索引就变成非聚集了,就可以修改了。
很多时候是因为创建表时指定的主键被自动创建为聚集索引了,可以修改ini参数,将PK_WITH_CLUSTER设为0,则默认创建主键时为非聚集型。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)