下面是在命令行客户端工具直接执行的脚本(执行后,会输出待调整参数):
备注:第一次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
/
看不到问题详细描述。是用户被锁,还是表被锁?登录失败(密码输入错误)次数过多是,就会出现用户被锁的情况,这时应该使用 sysdba 账户登陆,在左侧的导航栏目录,找到【用户】节点,点开 对应用户,通过右键(打开功能菜单),选择【解锁】该用户即可。如此 *** 作后,即可继续使用原用户 和它正确的密码登录了。
表被锁,执行语句的时候,会提示锁超时之类的。通过 V$LOCK 定位到阻塞(就是阻塞之后,报错之前 —— 才可以查到)。需要预先打开两个窗口,在一个窗口中,写好 select * from v$lock where blocked=1这个语句,等待执行。在另一个窗口中,执行报错的语句,执行之后(还没有报错),立即去窗口1中执行那个语句。就一定能够查询到记录(被阻塞的事务相关的信息),然后通过这个信息(有 trx_id)就可以去 v$trx 以及 v$session 中,获取到 我们要执行的这个sql 是被谁阻塞的了。可以通过 sp_close_session 杀掉阻塞源头的会话,也可以找到执行阻塞源头事务的人(没有提交)让他们提交,就不会造成阻塞了。或者干等着,看阻塞源头的事务什么时候提交。
首先,必须强调的一点是达梦数据库确实是具有自主知识产权的国产数据库。To 那些连达梦数据库安装软件都没见到过而乱喷的朋友们:
达梦数据库与国外Oracle比起来确实没有什么优势,达梦数据库确实存在很多问题,但是,达梦在发展,努力改进产品,努力缩小与国外产品的优势,至少达梦是国产基础软件中敢站出来在市场上竞争的。
朋友们,你们一边用着国内外的盗版软件,一边喷国产软件烂,难道你们就没有一丢丢的内疚?软件的成长不是靠软件厂商的努力,也需要用户的配合,为什么提到国产基础软件,你们就想喷?有多少人真正实打实的用过,评估过?
国产基础软件承载了国家的期望,国家给予了一定的支持,你们就说成骗钱了,这么好骗,你倒是骗出一个达梦数据库来看看。
批评可以,如果给达梦数据库指出了具体的问题,达梦一定会认证听取,努力改进,但是请在喷之前问问自己是不是有理有据...
还有一点,达梦数据库现在已经走出国门了....
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)