達夢8中的引數檔案為dm.ini,該檔案可以手動編輯,也可以在資料庫中修改后自動同步,類似集成了oracle的pfile加spfile的功能,
查看引數可以使用v$dm_ini或v$parameter視圖,其中可以查詢到引數值、檔案中的值、session中的值以及引數的型別,當然也可以使用DM8提供的函式包查詢SF_GET_PARA_VALUE、SF_GET_PARA_DOUBLE_VALUE、SF_GET_PARA_STRING_VALUE,
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='TIMER_TRIG_CHECK_INTERVAL';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------------- ---------- ---------- ---------- ---------
1 TIMER_TRIG_CHECK_INTERVAL 60 60 60 SYS
在達夢8中引數可以分為以下幾中型別:
1、READ ONLY:手動引數,表示服務器運行程序中不可修改;
2、IN FILE:靜態引數,只可修改ini檔案;
3、SYS和SESSION:動態引數,ini檔案和記憶體同時可修改,其中,SYS系統級引數;
SQL> select distinct para_type from v$dm_ini;
行號 PARA_TYPE
---------- ---------
1 READ ONLY
2 SYS
3 IN FILE
4 SESSION
已用時間: 7.713(毫秒). 執行號:2016.
SQL>
靜態:可以被動態修改,修改后重啟服務器才能生效,
動態:可以被動態修改,修改后即時生效,動態引數又分為會話級和系統級兩種,會話級引數被修改后,新引數值只會影響新創建的會話,之前創建的會話不受影響;系統級引數的修改則會影響所有的會話,
手動:不能被動態修改,必須手動修改dm.ini引數檔案,然后重啟才能生效,
一、修改引數的方法:
1、SP_SET_PARA_VALUE (scope int, paraname varchar(256), value int64)
該程序用于修改整型靜態配置引數和動態配置引數,SCOPE引數為1表示在記憶體和INI檔案中都修改引數值,此時只能修改動態的配置引數,引數為2表示只在INI檔案中修改配置引數,此時可用來修改靜態配置引數和動態配置引數
2、SP_SET_PARA_DOUBLE_VALUE (scope int, paraname varchar(8187), value double)
該程序用于修改浮點型靜態配置引數和動態配置引數,SCOPE引數為1表示在記憶體和INI檔案中都修改引數值,此時只能修改動態的配置引數,引數為2表示只在INI檔案中修改配置引數,此時可用來修改靜態配置引數和動態配置引數
3、SP_SET_PARA_STRING_VALUE()
該程序用于修改字串型靜態配置引數和動態配置引數,SCOPE引數為1表示在記憶體和INI檔案中都修改引數值,此時只能修改動態的配置引數,引數為2表示只在INI檔案中修改配置引數,此時可用來修改靜態配置引數和動態配置引數
4、SF_SET_SYSTEM_PARA_VALUE (paraname varchar(256), value int64\double\varchar(256), deferred int, scope int64)
該程序用于修改系統整型、double、varchar的靜態配置引數或動態配置引數,DEFERRED引數,為0表示當前session修改的引數立即生效,為1表示當前session不生效,后續再生效,默認為0,SCOPE引數為1表示在記憶體和INI檔案中都修改引數值,此時只能修改動態的配置引數,引數為2表示只在INI檔案中修改配置引數,此時可用來修改靜態配置引數和動態配置引數,
5、SF_SET_SESSION_PARA_VALUE (paraname varchar(8187), value bigint)
設定某個會話級INI引數的值,設定的引數值只對本會話有效,
6、ALTER SYSTEM SET ‘引數名稱’ =‘引數值’ [DEFERRED] [MEMORY|BOTH|SPFILE];
引數名稱:可以是靜態引數、系統引數sys、會話引數session;DEFERRED只能用于動態引數,指定DEFERRED后,引數值延遲生效,對當前session不生效,只對新創建的會話生效,默認為立即生效,對當前會話和新創建的會話都生效,[MEMORY|BOTH|SPFILE] 指定生效的位置,其中,MEMORY只對記憶體中的值做修改;SPFILE則只對file_value中的值做修改;BOTH則都做修改,默認情況下,為MEMORY,對于靜態引數,只能指定SPFILE,
7、ALTER SESSION SET ‘引數名稱’ =‘引數值’ [PURGE];
引數名稱指動態會話級引數名字.[PURGE] 指是否清理執行計劃,設定后的值只對當前會話有效,當包含 PURGE 選項時會清除服務器保存的所有執行計劃,
二、不同引數型別對應的修改方法如下:
1、READ ONLY:
手動編輯dm.ini ,建議關閉資料庫后編輯,從實驗中證明,資料庫開啟狀態也可以編輯,重啟資料庫后生效,
以下為手動編輯dm.ini中引數UTHR_FLAG為1的程序
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='UTHR_FLAG';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- --------- ---------- ---------- ---------- ---------
1 UTHR_FLAG 0 0 0 READ ONLY
編輯dm.ini,修改UTHR_FLAG=1(步驟不做展示)
再次查看該引數發現FILE_VALUE已經變成了1,說明已經手動在ini檔案中進行了修改,
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='UTHR_FLAG';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- --------- ---------- ---------- ---------- ---------
1 UTHR_FLAG 0 0 1 READ ONLY
重啟資料庫后再次查看引數情況,引數已經修改過來了,
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='UTHR_FLAG';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- --------- ---------- ---------- ---------- ---------
1 UTHR_FLAG 1 1 1 READ ONLY
2、INFILE :
修改后重啟生效,使用SP_SET_PARA_VALUE(修改整型,scope選擇2)、SP_SET_PARA_STRING_VALUE(修改字串型,scope選擇2)
也可以使用ALTER SYSTEM SET ‘引數名稱’ =‘引數值’ [DEFERRED] [MEMORY|BOTH|SPFILE];
以下為使用函式包和SQL陳述句修改LOG_POOL_SIZE引數的程序
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='LOG_POOL_SIZE';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1 LOG_POOL_SIZE 256 256 256 IN FILE
已用時間: 5.489(毫秒). 執行號:1994.
SQL> SP_SET_PARA_VALUE (2, 'LOG_POOL_SIZE',512);
DMSQL 程序已成功完成
已用時間: 5.059(毫秒). 執行號:1995.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='LOG_POOL_SIZE';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1 LOG_POOL_SIZE 256 256 512 IN FILE
已用時間: 5.251(毫秒). 執行號:1996.
SQL> alter system set 'LOG_POOL_SIZE'=256 SPFILE;
DMSQL 程序已成功完成
已用時間: 7.322(毫秒). 執行號:1997.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='LOG_POOL_SIZE';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1 LOG_POOL_SIZE 256 256 256 IN FILE
已用時間: 4.881(毫秒). 執行號:1998.
SQL>
3、session :SF_SET_SESSION_PARA_VALUE(修改當前session,其他session無效),SP_SET_PARA_VALUE、SP_SET_PARA_DOUBLE_VALUE、SP_SET_PARA_STRING_VALUE(),修改session級別的引數不能對以前連接的session生效,可以選擇以后的連接以及重啟資料庫后是否生效,
或ALTER SESSION SET ‘引數名稱’ =‘引數值’ [PURGE];
以下分別使用不同函式包和sql陳述句修改SORT_BUF_SIZE引數的值的程序
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='SORT_BUF_SIZE';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1 SORT_BUF_SIZE 200 50 50 SESSION
已用時間: 5.214(毫秒). 執行號:1999.
SQL> SF_SET_SESSION_PARA_VALUE('SORT_BUF_SIZE',100);
DMSQL 程序已成功完成
已用時間: 0.664(毫秒). 執行號:2000.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='SORT_BUF_SIZE';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1 SORT_BUF_SIZE 200 100 50 SESSION
已用時間: 4.578(毫秒). 執行號:2001.
SQL> SP_SET_PARA_VALUE(1,'SORT_BUF_SIZE',400);
DMSQL 程序已成功完成
已用時間: 5.093(毫秒). 執行號:2002.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='SORT_BUF_SIZE';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1 SORT_BUF_SIZE 400 400 400 SESSION
已用時間: 4.592(毫秒). 執行號:2003.
SQL>
SQL> alter session set 'SORT_BUF_SIZE'=50;
DMSQL 程序已成功完成
已用時間: 0.508(毫秒). 執行號:2004.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='SORT_BUF_SIZE';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------- ---------- ---------- ---------- ---------
1 SORT_BUF_SIZE 400 50 400 SESSION
4、SYS: 動態引數,可以使用SF_SET_SYSTEM_PARA_VALUE函式修改,這樣不用考慮整型、浮點、字串的問題(當然也可以使用其他函式包)
或使用ALTER SYSTEM SET ‘引數名稱’ =‘引數值’ [DEFERRED] [MEMORY|BOTH|SPFILE];
以下分別使用函式包和sql陳述句修改TIMER_TRIG_CHECK_INTERVAL引數的值的程序
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='TIMER_TRIG_CHECK_INTERVAL';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------------- ---------- ---------- ---------- ---------
1 TIMER_TRIG_CHECK_INTERVAL 60 60 60 SYS
已用時間: 6.113(毫秒). 執行號:2010.
SQL> SF_SET_SYSTEM_PARA_VALUE ('TIMER_TRIG_CHECK_INTERVAL',30,0,1);
DMSQL 程序已成功完成
已用時間: 4.139(毫秒). 執行號:2012.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='TIMER_TRIG_CHECK_INTERVAL';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------------- ---------- ---------- ---------- ---------
1 TIMER_TRIG_CHECK_INTERVAL 30 30 30 SYS
已用時間: 7.826(毫秒). 執行號:2013.
SQL> ALTER SYSTEM SET 'TIMER_TRIG_CHECK_INTERVAL' =60 DEFERRED BOTH;
DMSQL 程序已成功完成
已用時間: 5.345(毫秒). 執行號:2014.
SQL> select PARA_NAME,para_value,SESS_VALUE,FILE_VALUE,para_type from v$dm_ini where para_name='TIMER_TRIG_CHECK_INTERVAL';
行號 PARA_NAME PARA_VALUE SESS_VALUE FILE_VALUE PARA_TYPE
---------- ------------------------- ---------- ---------- ---------- ---------
1 TIMER_TRIG_CHECK_INTERVAL 60 60 60 SYS
已用時間: 4.293(毫秒). 執行號:2015.
SQL>
三、總結
雖然DM8的修改引數的方法較多,DM8本身的引數也比較多,但在日常運維中經常需要修改的引數并不多,
READ ONLY和IN FILE的引數完全可以直接編輯dm.ini檔案進行修改,然后重啟資料庫生效,這樣就不用考慮應該使用哪個函式包了,
對于sys的引數,可以使用SF_SET_SESSION_PARA_VALUE函式包,避免考慮整型、浮點、字符型的問題,
對于session的引數一般使用SF_SET_SESSION_PARA_VALUE函式來修改當前session,
大多數情況下,使用SP_SET_PARA_VALUE就可以應對日常的運維作業了,
當然習慣兼容ORACLE運維的同學來說,使用alter system/session 也是個不錯的選擇,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/128499.html
標籤:AI
上一篇:Day14JavaWeb【Mybatis一】Jdbc回顧與Mybatis介紹
下一篇:sql查詢學生大于平均值的成績
