介質下載地址
名稱 | 網址 |
---|---|
銀河麒麟高級服務器操作系統V10(SP3)用戶手冊 | https://www.kylinos.cn/support/document/60.html |
DM8 安裝手冊 | https://eco.dameng.com/document/dm/zh-cn/pm/install-uninstall.html |
DM 數據庫安裝(Linux安裝) | https://eco.dameng.com/document/dm/zh-cn/start/install-dm-linux-prepare.html |
達夢官網 | https://www.dameng.com/ |
達夢數據庫下載地址 | https://www.dameng.com/list_103.html |
x86_rh7下載地址 | https://download.dameng.com/eco/adapter/DM8/202410/dm8_20240920_x86_rh7_64.zip |
一鍵安裝
將iso鏡像和安裝腳本上傳至任意目錄下
[root@localhost iso]# chmod +x dm8_single_install.sh
[root@localhost iso]# ./dm8_single_install.sh
[root@localhost iso]# cat dm8_single_install.sh
#!/bin/bash
set -euo pipefailecho -e "\n\n****** 開始安裝 DM8 ******\n\n"# 配置參數
ISO_NAME="dm8_20250506_x86_rh7_64.iso"
DM_BASE="/dm"
SYSDBA_PWD="Ceshi@5235"
PORT_NUM="5236"
DB_NAME="PROD"
INSTANCE_NAME="PROD"
INSTALL_LOG="/tmp/dm_install.log"
sudo mount -t tmpfs -o size=2G none /tmp
# 清理舊日志
> "$INSTALL_LOG"# 步驟1: 準備安裝環境
echo -n "[1/9] 創建目錄結構... "
mkdir -p ${DM_BASE}/{dbms,data,log,arch,bak,script} /dm8_setup/iso
echo "完成"echo -n "[2/9] 準備安裝文件... "
mv -f ./* /dm8_setup/iso/ 2>/dev/null || true
echo "完成"# 步驟2: 掛載安裝鏡像
echo -n "[3/9] 掛載安裝鏡像... "
mount "/dm8_setup/iso/${ISO_NAME}" /mnt -o loop &>/dev/null
echo "完成"# 步驟3: 系統配置
echo -n "[4/9] 系統配置... "
public_ip=$(hostname -I | awk '{print $1}')
node_name=$(hostname)
grep -q "${public_ip} ${node_name}" /etc/hosts || echo "${public_ip} ${node_name}" >> /etc/hosts
hostnamectl set-hostname "${node_name}" &>/dev/nullgroupadd -g 50000 dinstall &>/dev/null || true
useradd -u 51000 -g dinstall dmdba &>/dev/null || true
echo "dmdba:${SYSDBA_PWD}" | chpasswd &>/dev/nullchown -R dmdba:dinstall "${DM_BASE}"
chmod -R 775 "${DM_BASE}"grep -q "dmdba soft nproc" /etc/security/limits.conf || cat <<EOF >> /etc/security/limits.conf
dmdba soft nproc 16384
dmdba hard nproc 16384
dmdba soft nofile 16384
dmdba hard nofile 65536
dmdba soft stack 16384
dmdba hard stack 32768
EOFsystemctl stop firewalld &>/dev/null || true
systemctl disable firewalld &>/dev/null || true
setenforce 0 &>/dev/null || true
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
echo "完成"# 步驟4: 生成安裝配置
echo -n "[5/9] 生成安裝配置... "
cat << EOF > "${DM_BASE}/script/silent_setup.xml"
<?xml version="1.0"?>
<DATABASE>
<LANGUAGE>en</LANGUAGE>
<TIME_ZONE>+08:00</TIME_ZONE>
<KEY></KEY>
<INSTALL_TYPE>0</INSTALL_TYPE>
<INSTALL_PATH>${DM_BASE}/dbms</INSTALL_PATH>
<INIT_DB>y</INIT_DB>
<DB_PARAMS>
<PATH>${DM_BASE}/data</PATH>
<DB_NAME>${DB_NAME}</DB_NAME>
<INSTANCE_NAME>${INSTANCE_NAME}</INSTANCE_NAME>
<PORT_NUM>${PORT_NUM}</PORT_NUM>
<CTL_PATH>${DM_BASE}/data/${DB_NAME}/dm.ctl</CTL_PATH>
<LOG_PATHS><LOG_PATH>${DM_BASE}/log/${DB_NAME}/redo01.log</LOG_PATH><LOG_PATH>${DM_BASE}/log/${DB_NAME}/redo02.log</LOG_PATH>
</LOG_PATHS>
<EXTENT_SIZE>16</EXTENT_SIZE>
<PAGE_SIZE>16</PAGE_SIZE>
<LOG_SIZE>256</LOG_SIZE>
<CASE_SENSITIVE>Y</CASE_SENSITIVE>
<CHARSET>0</CHARSET>
<SYSDBA_PWD>${SYSDBA_PWD}</SYSDBA_PWD>
<SYSAUDITOR_PWD>${SYSDBA_PWD}</SYSAUDITOR_PWD>
<SYSSSO_PWD>${SYSDBA_PWD}</SYSSSO_PWD>
<SYSDBO_PWD>${SYSDBA_PWD}</SYSDBO_PWD>
<TIME_ZONE>+08:00</TIME_ZONE>
</DB_PARAMS>
<CREATE_DB_SERVICE>n</CREATE_DB_SERVICE>
<STARTUP_DB_SERVICE>n</STARTUP_DB_SERVICE>
</DATABASE>
EOFchown dmdba:dinstall "${DM_BASE}/script/silent_setup.xml" &>/dev/null
echo "完成"# 步驟5: 執行數據庫安裝(添加進度指示)
echo -n "[6/9] 正在安裝數據庫 "
export DM_INSTALL_TMPDIR=/tmp
export LANG=en_US.UTF-8# 后臺安裝并顯示進度指示器
(sudo -u dmdba /mnt/DMInstall.bin -q "${DM_BASE}/script/silent_setup.xml" &>> "$INSTALL_LOG"
) &
pid=$!# 顯示旋轉進度指示
spin='-\|/'
i=0
while kill -0 $pid 2>/dev/null; doi=$(( (i+1) %4 ))printf "\b${spin:$i:1}"sleep 0.5
done# 等待后臺任務完成
wait $pid# 檢查安裝結果
if [ -d "${DM_BASE}/dbms/bin" ]; thenecho -e "\b完成"
elseecho -e "\n\n[錯誤] 數據庫安裝失敗!請檢查日志: $INSTALL_LOG"exit 1
fi# 步驟6: 安裝后配置
echo -n "[7/9] 安裝后配置... "
"${DM_BASE}/dbms/script/root/root_installer.sh" &>> "$INSTALL_LOG"
"${DM_BASE}/dbms/script/root/dm_service_installer.sh" -t dmserver -p "${DB_NAME}" -dm_ini "${DM_BASE}/data/${DB_NAME}/dm.ini" &>> "$INSTALL_LOG"
echo "完成"# 步驟7: 環境配置
echo -n "[8/9] 環境配置... "
cat << EOF >> /home/dmdba/.bashrc
export DM_HOME="${DM_BASE}/dbms"
export PATH="\$PATH:\${DM_HOME}/bin"
export LD_LIBRARY_PATH="\$LD_LIBRARY_PATH:\${DM_HOME}/bin"
EOF
echo "完成"# 步驟8: 啟動服務
echo -n "[9/9] 啟動數據庫服務... "
sudo -u dmdba "${DM_BASE}/dbms/bin/DmService${DB_NAME}" start &>> "$INSTALL_LOG"
sleep 3 # 給服務啟動時間# 檢查服務狀態
if sudo -u dmdba "${DM_BASE}/dbms/bin/DmService${DB_NAME}" status | grep -q "running"; thenecho "完成"
elseecho "失敗"echo "[警告] 服務啟動失敗,請檢查日志: $INSTALL_LOG"
fi# 清理工作
umount /mnt &>/dev/null || trueecho -e "\n\n****** DM8 安裝成功完成! ******"
echo -e "數據庫端口: \033[32m${PORT_NUM}\033[0m"
echo -e "管理員賬號: \033[32msysdba\033[0m"
echo -e "管理員密碼: \033[32m${SYSDBA_PWD}\033[0m"
echo -e "安裝目錄: \033[32m${DM_BASE}/dbms\033[0m"
echo -e "數據目錄: \033[32m${DM_BASE}/data\033[0m"
echo -e "服務狀態: \033[32m$(sudo -u dmdba ${DM_BASE}/dbms/bin/DmService${DB_NAME} status | grep -o "running")\033[0m"
echo -e "安裝日志: \033[34m${INSTALL_LOG}\033[0m\n\n"
過程截圖
日常運維命令
-- 1. 數據庫授權信息查詢
SELECT LIC_VERSION AS "許可證版本",SERIES_NO AS "序列號",CHECK_CODE AS "校驗碼",AUTHORIZED_CUSTOMER AS "最終用戶",PROJECT_NAME AS "項目名稱",PRODUCT_TYPE AS "產品名稱",CASE SERVER_TYPE WHEN '1' THEN '正式版' WHEN '2' THEN '測試版' WHEN '3' THEN '試用版' WHEN '4' THEN '其他' END AS "產品類型",TO_CHAR(EXPIRED_DATE) AS "有效日期",OS_TYPE AS "授權系統",TO_CHAR(AUTHORIZED_USER_NUMBER) AS "授權用戶數",NVL(TO_CHAR(CONCURRENCY_USER_NUMBER),'') AS "授權并發數",NVL(TO_CHAR(MAX_CPU_NUM),'') AS "授權CPU個數",CLUSTER_TYPE AS "授權集群"
FROM V$LICENSE;
-- 注意事項:
-- 1)需關注數據庫授權的有效日期,到期前需及時更換
-- 2)注意授權CPU個數字段值,曾出現因限制CPU使用個數導致DB性能下降的情況-- 2. 查詢數據庫的實例信息
SELECT '版本號',(SELECT id_code) FROM v$instance
UNION ALL
SELECT '數據庫名',name FROM v$database
UNION ALL
SELECT '實例名',instance_name FROM v$instance
UNION ALL
SELECT '系統狀態',status$ FROM v$instance
UNION ALL
SELECT '實例模式',mode$ FROM v$instance
UNION ALL
SELECT '是否啟用歸檔',case arch_mode when 'Y' then '是' when 'N' then '否' end FROM v$database
UNION ALL
SELECT '頁大小',cast(PAGE()/1024 as varchar)
UNION ALL
SELECT '大小寫敏感',cast(case SF_GET_CASE_SENSITIVE_FLAG()when '1' then '是' when '0' then '否'
end as varchar)
UNION ALL
SELECT '字符集',CASE SF_GET_UNICODE_FLAG() WHEN '0' THEN 'GBK18030' WHEN '1' then 'UTF-8' when '2' then 'EUC-KR'
end
UNION ALL
SELECT '以字符為單位',cast(case SF_GET_LENGTH_IN_CHAR()when '1' then '是' when '0' then '否'
end as varchar)
UNION ALL
SELECT '空白字符填充模式',cast(case (select BLANK_PAD_MODE()) when '1' then '是' when '0' then '否'
end as varchar)
UNION ALL
SELECT '日志文件個數',to_char(count(*)) FROM v$rlogfile
UNION ALL
SELECT '日志文件大小',cast(RLOG_SIZE/1024/1024 as varchar) FROM v$rlogfile where rowid =1
UNION ALL
SELECT '創建時間',to_char(create_time) FROM v$database
UNION ALL
SELECT '啟動時間',to_char(last_startup_time) FROM v$database;
-- 注意事項:
-- 1)該SQL查詢數據庫安裝信息參數,實例遷移時需保障兩端實例參數一致
-- 2)系統狀態字段如為非OPEN狀態,需檢查數據庫是否正常
-- 3)日志文件大小(redo日志)不建議低于2G,且建議大小一致-- 3. 查詢數據庫中語句統計信息
SELECT NAME, STAT_VAL
FROM v$sysstat
WHERE name IN ('select statements','insert statements','delete statements','update statements','ddl statements','transaction total count'
);
-- 注意事項:
-- 1)該值為數據庫啟動后從0遞增的計數,重啟后重置
-- 2)可用于監控特定時間段SQL執行情況-- 4. 數據庫表空間的狀態檢查
SELECT NAME AS "NAME",CASE TYPE$ WHEN '1' THEN 'DB類型' WHEN '2' THEN '臨時表空間' END AS "TYPE",CASE STATUS$ WHEN '0' THEN '聯機' WHEN '1' THEN '脫機' WHEN '2' THEN '脫機' WHEN '3' THEN '損壞'END AS "STATUS",TOTAL_SIZE*PAGE/1024/1024 AS "TOTALSIZE",FILE_NUM AS "FILENUM"
FROM V$TABLESPACE;
-- 注意事項:
-- 1)需重點關注表空間類型非聯機的情況,需重點監控-- 5. 查詢數據庫表空間的使用情況
SELECT F.TABLESPACE_NAME,ROUND((T.TOTAL_SPACE - F.FREE_SPACE) / 1024, 2) "USED",CASE WHEN H.TOTAL_MAX_SPACE == 0 THEN ROUND(F.FREE_SPACE / 1024, 2) ELSE ROUND((H.TOTAL_MAX_SPACE -(T.TOTAL_SPACE - F.FREE_SPACE)) / 1024, 2) END "FREE_MAX",CASE WHEN H.TOTAL_MAX_SPACE == 0 THEN ROUND(T.TOTAL_SPACE / 1024, 2) ELSE ROUND(H.TOTAL_MAX_SPACE / 1024, 2) END "TOTAL_MAX",CASE WHEN H.TOTAL_MAX_SPACE == 0 THEN ROUND((F.FREE_SPACE/1024)/(T.TOTAL_SPACE / 1024), 4)*100||'%' ELSE ROUND(((H.TOTAL_MAX_SPACE-(T.TOTAL_SPACE - F.FREE_SPACE))/1024)/(H.TOTAL_MAX_SPACE / 1024), 4)*100||'%' END PER_FREE_MAX,CASE WHEN H.TOTAL_MAX_SPACE == 0 THEN ROUND((((T.TOTAL_SPACE - F.FREE_SPACE))/1024)/(T.TOTAL_SPACE / 1024), 4)*100||'%' ELSE ROUND((((T.TOTAL_SPACE - F.FREE_SPACE))/1024)/(H.TOTAL_MAX_SPACE / 1024), 4)*100||'%' END PER_USED_MAX,ROUND(F.FREE_SPACE / 1024, 2) "FREE",ROUND(T.TOTAL_SPACE / 1024, 2) "TOTAL",CASE WHEN T.TOTAL_SPACE == 0 THEN '' ELSE (ROUND((F.FREE_SPACE / T.TOTAL_SPACE), 4)* 100) || '% ' END PER_FREE,CASE WHEN T.TOTAL_SPACE == 0 THEN '' ELSE (ROUND((T.TOTAL_SPACE - F.FREE_SPACE) / T.TOTAL_SPACE, 4) * 100)||'%' END PER_USED
FROM ( SELECT TABLESPACE_NAME,ROUND(SUM(BLOCKS * (SELECT PARA_VALUE / 1024 FROM V$DM_INI WHERE PARA_NAME = 'GLOBAL_PAGE_SIZE') / 1024)) FREE_SPACEFROM DBA_FREE_SPACEGROUP BY TABLESPACE_NAME
) F,
( SELECT TABLESPACE_NAME,ROUND(SUM(BYTES / 1048576)) TOTAL_SPACEFROM DBA_DATA_FILESGROUP BY TABLESPACE_NAME
) T,
( SELECT TABLESPACE_NAME,ROUND(SUM(MAXBYTES / 1048576)) TOTAL_MAX_SPACEFROM DBA_DATA_FILESGROUP BY TABLESPACE_NAME
) H
WHERE F.TABLESPACE_NAME = T.TABLESPACE_NAME AND F.TABLESPACE_NAME = H.TABLESPACE_NAME;
-- 注意事項:
-- 1)MAIN|TEMP|ROLL|SYSTEM表空間由系統自動管理,無需關注使用率
-- 2)計算公式復雜原因:一個表空間可包含多個數據文件,若存在自動拓展且無上限的文件,使用率參考意義較低-- 6. 查詢表空間的數據文件使用情況
SELECT PATH,TO_CHAR(TOTAL_SIZE*PAGE/1024/1024) AS TOTAL_SIZE,TO_CHAR(FREE_SIZE*PAGE/1024/1024) AS FREE_SIZE,(TO_CHAR(100-FREE_SIZE*100/TOTAL_SIZE)) AS REM_PER,CASE AUTO_EXTEND WHEN '0' THEN '未開啟' WHEN '1' THEN '已開啟' END AS AUTO_EXTEND,NEXT_SIZE,MAX_SIZE,b.TABLESPACE_NAME
FROM V$DATAFILE a,dba_data_files b
WHERE b.file_name = a.PATH
ORDER BY GROUP_ID;
-- 注意事項:
-- 1)MAIN|TEMP|ROLL|SYSTEM表空間由系統自動管理,無需關注-- 7. 查詢數據庫中的用戶信息
SELECT A.USERNAME,CASE B.RN_FLAG WHEN '0' THEN '否' WHEN '1' THEN '是' END AS READ_ONLY,CASE A.ACCOUNT_STATUS WHEN 'LOCKED' THEN '鎖定' WHEN 'OPEN' THEN '正常' END AS "狀態",TO_CHAR(A.LOCK_DATE,'YYYY-MM-DD HH24:MI:SS') AS "鎖定起始時間",TO_CHAR(A.EXPIRY_DATE,'YYYY-MM-DD HH24:MI:SS') AS "密碼截止使用時間",TO_CHAR(round(datediff(DAY,TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'),TO_CHAR(A.EXPIRY_DATE,'YYYY-MM-DD HH24:MI:SS')),2)) AS EXPIRY_DATE_DAY,TO_CHAR(round(datediff(DAY,TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS'),TO_CHAR(A.LOCK_DATE,'YYYY-MM-DD HH24:MI:SS')),2)) AS LOCK_DATE_DAY,A.DEFAULT_TABLESPACE,A.PROFILE,TO_CHAR(A.CREATED,'YYYY-MM-DD HH24:MI:SS') AS CREATE_TIME
FROM DBA_USERS A,SYSUSERS B
WHERE A.USER_ID=B.ID;
-- 注意事項:
-- 1)需關注密碼設置有效期后即將到期的用戶
-- 2)需關注非預期情況下的用戶賬號鎖定狀態-- 8. 查詢數據庫中用戶權限
SELECT USERNAME AS "用戶名", WM_CONCAT(PRIVILEGE) AS "默認權限"
FROM(SELECT A.USERNAME,C.PRIVILEGE FROM DBA_USERS A,SYSUSERS B,(SELECT A.* FROM (SELECT GRANTEE,GRANTED_ROLE PRIVILEGE,'ROLE_PRIVS' PRIVILEGE_TYPE,CASE ADMIN_OPTION WHEN 'Y' THEN 'YES' ELSE 'NO' END ADMIN_OPTION FROM DBA_ROLE_PRIVSUNION SELECT GRANTEE,PRIVILEGE,'SYS_PRIVS' PRIVILEGE_TYPE,ADMIN_OPTION FROM DBA_SYS_PRIVSUNION SELECT GRANTEE,PRIVILEGE||' ON '||OWNER||'.'||TABLE_NAME PRIVILEGE,'TABLE_PRIVS' PRIVILEGE_TYPE,GRANTABLE FROM DBA_TAB_PRIVS) AWHERE GRANTEE IN (SELECT USERNAME FROM ALL_USERS WHERE USERNAME NOT IN ('SYS','SYSDBA','SYSSSO','SYSAUDITOR') ) ) C WHERE A.USER_ID=B.ID AND A.USERNAME = C.GRANTEE
)
GROUP BY USERNAME;
-- 注意事項:
-- 1)需關注是否給應用用戶授予DBA權限等過高權限-- 9. 查詢數據庫中的對象是否無效(函數、存儲過程、包等對象)
SELECT OWNER,OBJECT_NAME,OBJECT_TYPE,TO_CHAR(CREATED,'YYYY-MM-DD HH24:MI:SS'),TO_CHAR(LAST_DDL_TIME,'YYYY-MM-DD HH24:MI:SS')
FROM DBA_OBJECTS
WHERE OWNER NOT IN('SYS','SYSJOB','SYSAUDITOR','CTISYS','SYSSSO'
)AND STATUS = 'INVALID';
-- 注意事項:
-- 1)需關注庫中無效的函數、包、存儲過程等對象,評估是否需要處理-- 10. 查詢數據庫中的大表信息
SELECT A.TABLE_NAME,A.TABLESPACE_NAME,B.OWNER,B.BYTES
FROM (SELECT TABLE_NAME,TABLESPACE_NAME FROM ALL_TABLES GROUP BY TABLE_NAME,TABLESPACE_NAME
) AS A
LEFT JOIN (SELECT OWNER,SEGMENT_NAME,SUM(BYTES) BYTES FROM DBA_SEGMENTS WHERE SEGMENT_TYPE='TABLE'GROUP BY OWNER,SEGMENT_NAME
) AS B
ON A.TABLE_NAME=B.SEGMENT_NAME
WHERE B.OWNER NOT IN ('SYS','SYSDBA','SYSAUDITOR','SYSSSO','CTISYS')
ORDER BY BYTES DESC
LIMIT 10;-- 11. 查詢數據庫中的分區大表信息
SELECT A.OWNER,A.TABLE_NAME,A.PARTITIONING_TYPE,TO_CHAR(ROUND(TABLE_USED_SPACE(A.OWNER, A.TABLE_NAME) * PAGE / 1024.0 / 1024, 2)) SIZEMB,A.PARTITION_COUNT as partition_num,table_rowcount(a.owner, a.table_name) as row_num
FROM DBA_PART_TABLES a;-- 12. 查詢數據庫中會話的使用情況
SELECT *
FROM (SELECT STATE,CASE WHEN INSTR(CLNT_IP, ':',8) > 0 THEN SUBSTR(CLNT_IP, 1, INSTR(CLNT_IP, ':',8) - 1) ELSE CLNT_IP END AS CLNT_IP,CLNT_TYPE,CURR_SCH,USER_NAME,COUNT(*) COUNTSFROM V$SESSIONSGROUP BY STATE,CASE WHEN INSTR(CLNT_IP, ':',8) > 0 THEN SUBSTR(CLNT_IP, 1, INSTR(CLNT_IP, ':',8) - 1) ELSE CLNT_IP END,CLNT_TYPE,CURR_SCH,USER_NAMEORDER BY STATE
);-- 13. 長時間空閑會話檢查
SELECT SESS_ID,SESS_SEQ,USER_NAME,CREATE_TIME,CLNT_TYPE,CLNT_HOST,CLNT_IP,OSNAME,CONN_TYPE,CLNT_VER
FROM SYS.V$SESSIONS
WHERE STATE = 'IDLE'AND DATEDIFF(HH, LAST_SEND_TIME, SYSDATE) > 48AND DATEDIFF(HH, CREATE_TIME, SYSDATE) > 48;
-- 注意事項:
-- 1)達夢數據庫默認不會自動斷開會話連接
-- 2)曾出現因未提交事務導致其他事務等待的情況(如未提交的insert)
-- 3)建議定期清理長時間空閑會話-- 14. 查詢數據庫的redo日志大小
SELECT FILE_ID,PATH,CLIENT_PATH,RLOG_SIZE FROM V$RLOGFILE;
-- 注意事項:
-- 1)單個redo日志文件不建議低于2G,且建議所有redo日志大小一致-- 15. 查詢數據庫的定時任務信息
SELECT SYSJOB."NAME",SCHE."NAME" SCHENAME,SCHE."JOBID",SCHE."TYPE",SCHE."FREQ_INTERVAL",SCHE."FREQ_SUB_INTERVAL",SCHE."STARTTIME",STEPS."NAME" STEPSNAME,STEPS."SEQNO" STEPSSEQNO,STEPS."TYPE" STEPSTYPE,STEPS.COMMAND WHAT,STEPS.SUCC_ACTION,STEPS.FAIL_ACTION
FROM SYSJOB.SYSJOBSCHEDULES SCHE
LEFT JOIN SYSJOB.SYSJOBSTEPS STEPSON SCHE.JOBID = STEPS.JOBID
LEFT JOIN SYSJOB.SYSJOBS SYSJOBON SCHE.JOBID = SYSJOB.ID
WHERE SCHE.VALID == 'Y'
ORDER BY STEPS.JOBID, STEPS.SEQNO ASC;
-- 注意事項:
-- 1)檢查是否配置定時數據備份任務,保障數據安全-- 16. 查詢定時任務是否有錯誤
SELECT NAME,'' STEPNAME,MAX(START_TIME) START_TIME,ERRINFO
FROM ( SELECT NAME,MAX(START_TIME) START_TIME,ERRINFO FROM SYSJOB.SYSSTEPHISTORIES2 WHERE ERRCODE !=0 GROUP BY NAME, ERRINFO UNION ALL SELECT NAME,MAX(START_TIME) START_TIME,ERRINFO FROM SYSJOB.SYSJOBHISTORIES2 WHERE ERRCODE !=0 GROUP BY NAME, ERRINFO
)
WHERE TO_CHAR(START_TIME,'YYYY-MM-DD HH24:MI:SS') >= TO_CHAR(TRUNC(ADD_DAYS(SYSDATE, -7)),'YYYY-MM-DD HH24:MI:SS')
GROUP BY NAME, ERRINFO
ORDER BY START_TIME DESC
LIMIT 10;-- 17. 數據字典的淘汰情況
SELECT ROUND(TOTAL_SIZE/1024.0/1024, 2) TOTALSIZE,ROUND(USED_SIZE /1024.0/1024, 2) USEDSIZE,DICT_NUM DICTNUM,ROUND(SIZE_LRU_DISCARD/1024.0/1024, 2) SIZELRUDISCARD,LRU_DISCARD LRUDISCARD,ROUND((USED_SIZE/1024.0/1024)/(TOTAL_SIZE/1024.0/1024)*100, 2) CACHE_HIT
FROM V$DB_CACHE;
-- 注意事項:
-- 1)根據數據字典的使用/淘汰率,判斷是否需要調整數據字典緩沖區參數-- 18. 查詢數據庫中的無效索引
SELECT owner, index_name,table_name,index_type,status
FROM dba_indexes
WHERE status != 'VALID' AND owner NOT IN ('SYS', 'SYSAUDITOR', 'SYSSSO', 'SYSDBA', 'DEM', 'SYSJOB', 'SYSDBO')
ORDER BY 1,2,3;-- 19. 查詢數據庫分區表中的無效索引
SELECT *
FROM (SELECT SCH_NAME, INDEX_NAME, PARTITION_NAME, SUBPARTITION_NAME,STATUS FROM DBA_IND_SUBPARTITIONSUNION SELECT SCH_NAME, INDEX_NAME, PARTITION_NAME, NULL,STATUS FROM DBA_IND_PARTITIONSUNION SELECT OWNER, INDEX_NAME, NULL, NULL,STATUS FROM DBA_INDEXES
) S
WHERE S.STATUS = 'UNUSABLE'AND S.SCH_NAME NOT IN ('SYS', 'SYSAUDITOR', 'SYSSSO', 'SYSDBA', 'DEM', 'SYSJOB', 'SYSDBO')
ORDER BY 1, 2;-- 20. 查詢數據庫中的大索引信息
SELECT objname AS "對象名",objtype as "對象類型",TABLESPACE_NAME AS "表空間",to_char(round(TOT_BLOCKS/1024.0/1024.0*page(),2)) AS "大小(MB)"
FROM (SELECT objname,objtype,TABLESPACE_NAME,SUM(page_used) TOT_BLOCKS FROM (select * from (select owner||'.'||index_name objname, 'INDEX/INDEX PART' objtype, TABLESPACE_NAME, INDEX_USED_PAGES(owner,index_name) page_used from dba_indexes where tablespace_name not in ('TEMP','ROLL','SYSTEM')and owner not in ('SYS','SYSAUDITOR','SYSSSO','SCHEDULER')and temporary='N'and INDEX_TYPE != 'CLUSTER'and INDEX_USED_PAGES(owner,index_name)> (select sum(TOTAL_SIZE)* 0 from v$datafile)order by index_used_space(owner,table_name) desc)order by page_used desclimit 10)GROUP BY objname,objtype,TABLESPACE_NAMEorder by TOT_BLOCKS DESC limit 10
);-- 21. 查詢監視器信息
SELECT TO_CHAR(DW_CONN_TIME, 'YYYY-MM-DD HH24:MI:SS') CONN_TIME,MON_CONFIRM,MON_IP,MON_ID,MON_TERM
FROM v$dmmonitor;-- 22. 查詢實例運行錯誤的日志
SELECT *
FROM V$INSTANCE_LOG_HISTORY
WHERE LEVEL$ NOT IN ('INFO','WARN');-- 23. 查詢數據庫中是否存在死鎖
SELECT TO_CHAR(HAPPEN_TIME,'YYYY-MM-DD HH24:MI:SS') HAPPEN_TIME,SQL_TEXT
FROM V$DEADLOCK_HISTORY
WHERE HAPPEN_TIME > DATEADD(DAY,-30,SYSDATE);-- 24. 查詢數據庫中已經運行后的慢SQL
SELECT SQL_TEXT,EXEC_TIME,FINISH_TIME
FROM V$SYSTEM_LONG_EXEC_SQLS
ORDER BY EXEC_TIME DESC;-- 25. 查詢數據庫中運行報錯的SQL語句
SELECT SQL_TEXT,ECPT_DESC,max(ERR_TIME)ERR_TIME
FROM V$RUNTIME_ERR_HISTORY
GROUP BY SQL_TEXT,ECPT_DESC
LIMIT 10;-- 26. 查詢數據庫中正在運行的慢SQL
SELECT *
FROM ( SELECT DATEDIFF(MS,LAST_RECV_TIME,SYSDATE) EXEC_TIME,DBMS_LOB.SUBSTR(SF_GET_SESSION_SQL(SESS_ID)) SLOW_SQL,SESS_ID,CURR_SCH,THRD_ID,LAST_RECV_TIME,SUBSTR(CLNT_IP,8,13) CONN_IPFROM V$SESSIONS WHERE 1=1AND STATE='ACTIVE'ORDER BY 1 DESC
)
WHERE EXEC_TIME >= ? AND LAST_RECV_TIME > TO_TIMESTAMP('2000-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
LIMIT ?;
-- 說明:其中“?”為參數占位符,需根據實際情況替換(如執行時間閾值和返回條數限制)