--SELECT HOST_NAME FROM v$instance; DBMS_OUTPUT.PUT_LINE(CHR(27) || '[31m' || '这是红色文字' || CHR(27) || '[0m'); 查看分区表分区键类型为number的 SELECT a.TABLE_NAME ,b.OWNER FROM ALL_TAB_COLUMNS a,dba_PART_KEY_COLUMNS b WHERE a.owner='username' AND b.object_type='TABLE' AND a.TABLE_NAME =b.name AND a.COLUMN_NAME =b.COLUMN_NAME AND a.DATA_TYPE IN ('NUMBER') 查看所有分区表及分区键类型 SELECT b.*,a.DATA_TYPE FROM ALL_TAB_COLUMNS a,dba_PART_KEY_COLUMNS b WHERE a.owner='username' AND b.object_type='TABLE' AND a.TABLE_NAME =b.name AND a.COLUMN_NAME =b.COLUMN_NAME ORDER BY a.DATA_TYPE 获取分区键为非时间的分区表: DECLARE CURSOR c_tables IS SELECT a.TABLE_NAME ,b.OWNER FROM ALL_TAB_COLUMNS a,dba_PART_KEY_COLUMNS b WHERE a.owner='username' AND b.object_type='TABLE' AND a.TABLE_NAME =b.name AND a.COLUMN_NAME =b.COLUMN_NAME AND a.DATA_TYPE IN ('NUMBER'); -- 替换为你的模式名称 v_table_name ALL_TAB_COLUMNS.table_name%TYPE; v_owner ALL_TAB_COLUMNS.owner%TYPE; v_partition_name VARCHAR2(100); v_count INTEGER; BEGIN FOR r_table IN c_tables LOOP v_table_name := r_table.table_name; v_owner := r_table.owner; -- 获取分区信息,查找倒数第10个分区 SELECT partition_name INTO v_partition_name FROM ( SELECT partition_name FROM all_tab_partitions WHERE table_name = v_table_name AND TABLE_OWNER = v_owner ORDER BY partition_position DESC ) WHERE ROWNUM < 21 OFFSET 9 ROWS FETCH NEXT 1 ROWS ONLY; -- 取倒数第10个分区 -- 检查该分区是否有数据 set serveroutput on EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || v_owner || '.' || v_table_name || ' PARTITION(' || v_partition_name || ')' INTO v_count; IF v_count > 0 THEN DBMS_OUTPUT.ENABLE(1000000); --DBMS_OUTPUT.PUT_LINE(CHR(27) || '[31m' || '注意,倒数第10个分区存在数据' || CHR(27) || '[0m'); DBMS_OUTPUT.PUT_LINE(CHR(27) || '[33m' || 'Table: ' || v_table_name || ', Partition: ' || v_partition_name || ' has ' || v_count || ' rows.' || CHR(27) || '[0m'); ELSE DBMS_OUTPUT.ENABLE(1000000); --DBMS_OUTPUT.PUT_LINE(CHR(27) || '[34m' || '倒数第10个分区不存在数据' || CHR(27) || '[0m'); DBMS_OUTPUT.PUT_LINE(CHR(27) || '[32m' || 'Table: ' || v_table_name || ', Partition: ' || v_partition_name || ' is empty.' || CHR(27) || '[0m'); END IF; END LOOP; END; / 查看固定表的分区信息 DECLARE CURSOR c_tables IS SELECT table_name, owner FROM all_part_tables WHERE owner = 'username' AND PARTITION_COUNT > 30 and table_name in ('table1','table2'); -- 替换为你的模式名称 v_table_name all_part_tables.table_name%TYPE; v_owner all_part_tables.owner%TYPE; v_partition_name VARCHAR2(100); v_count INTEGER; BEGIN FOR r_table IN c_tables LOOP v_table_name := r_table.table_name; v_owner := r_table.owner; -- 获取分区信息,查找倒数第10个分区 SELECT partition_name INTO v_partition_name FROM ( SELECT partition_name FROM all_tab_partitions WHERE table_name = v_table_name AND TABLE_OWNER = v_owner ORDER BY partition_position DESC ) WHERE ROWNUM < 21 OFFSET 9 ROWS FETCH NEXT 1 ROWS ONLY; -- 取倒数第10个分区 -- 检查该分区是否有数据 set serveroutput on EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || v_owner || '.' || v_table_name || ' PARTITION(' || v_partition_name || ')' INTO v_count; IF v_count > 0 THEN DBMS_OUTPUT.ENABLE(1000000); --DBMS_OUTPUT.PUT_LINE(CHR(27) || '[31m' || '注意,倒数第10个分区存在数据' || CHR(27) || '[0m'); DBMS_OUTPUT.PUT_LINE(CHR(27) || '[33m' || 'Table: ' || v_table_name || ', Partition: ' || v_partition_name || ' has ' || v_count || ' rows.' || CHR(27) || '[0m'); ELSE DBMS_OUTPUT.ENABLE(1000000); --DBMS_OUTPUT.PUT_LINE(CHR(27) || '[34m' || '倒数第10个分区不存在数据' || CHR(27) || '[0m'); DBMS_OUTPUT.PUT_LINE(CHR(27) || '[32m' || 'Table: ' || v_table_name || ', Partition: ' || v_partition_name || ' is empty.' || CHR(27) || '[0m'); END IF; END LOOP; END; / 查看分区数量大于30的表 DECLARE CURSOR c_tables IS SELECT table_name, owner FROM all_part_tables WHERE owner = 'username' AND PARTITION_COUNT > 30 ; -- 替换为你的模式名称 v_table_name all_part_tables.table_name%TYPE; v_owner all_part_tables.owner%TYPE; v_partition_name VARCHAR2(100); v_count INTEGER; BEGIN FOR r_table IN c_tables LOOP v_table_name := r_table.table_name; v_owner := r_table.owner; -- 获取分区信息,查找倒数第10个分区 SELECT partition_name INTO v_partition_name FROM ( SELECT partition_name FROM all_tab_partitions WHERE table_name = v_table_name AND TABLE_OWNER = v_owner ORDER BY partition_position DESC ) WHERE ROWNUM < 21 OFFSET 9 ROWS FETCH NEXT 1 ROWS ONLY; -- 取倒数第10个分区 -- 检查该分区是否有数据 set serveroutput on EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || v_owner || '.' || v_table_name || ' PARTITION(' || v_partition_name || ')' INTO v_count; IF v_count > 0 THEN DBMS_OUTPUT.ENABLE(1000000); --DBMS_OUTPUT.PUT_LINE(CHR(27) || '[31m' || '注意,倒数第10个分区存在数据' || CHR(27) || '[0m'); DBMS_OUTPUT.PUT_LINE(CHR(27) || '[33m' || 'Table: ' || v_table_name || ', Partition: ' || v_partition_name || ' has ' || v_count || ' rows.' || CHR(27) || '[0m'); ELSE DBMS_OUTPUT.ENABLE(1000000); --DBMS_OUTPUT.PUT_LINE(CHR(27) || '[34m' || '倒数第10个分区不存在数据' || CHR(27) || '[0m'); DBMS_OUTPUT.PUT_LINE(CHR(27) || '[32m' || 'Table: ' || v_table_name || ', Partition: ' || v_partition_name || ' is empty.' || CHR(27) || '[0m'); END IF; END LOOP; END; / SELECT partition_name FROM all_tab_partitions WHERE table_name = 'table1' AND TABLE_OWNER = 'username' ORDER BY partition_position DESC select count(*) from username.table2 partition(P35); SELECT partition_name FROM ( SELECT partition_name FROM all_tab_partitions WHERE table_name = 'table2' AND TABLE_OWNER = 'username' ORDER BY partition_position DESC ) WHERE ROWNUM < 20 OFFSET 2 ROWS FETCH NEXT 1 ROWS ONLY; SELECT table_name, owner,PARTITION_COUNT FROM all_part_tables WHERE owner = 'username' AND PARTITION_COUNT > 30; cat check_partition.sh seq1=`sqlplus -S "/ as sysdba"<<'EOF' set heading off set pagesize 0; set feedback off; set verify off; set echo off; select count(1) from user1.EDC_LOT_SUM_NEW partition(EDC_LOT_SUM_NEW_202910); quit; EOF` seq3=`sqlplus -S "/ as sysdba"<<'EOF' set heading off set pagesize 0; set feedback off; set verify off; set echo off; select count(1) from user1.OFFLINE_LOT_SUM_NEW partition(OFFLINE_LOT_SUM_NEW_202910); quit; EOF` seq6=`sqlplus -S "/ as sysdba"<<'EOF' set heading off set pagesize 0; set feedback off; set verify off; set echo off; select count(1) from user1.LOT_QTIME_HIST partition(LOT_Q_TIME_HIST_202910); quit; EOF` seq10=`sqlplus -S "/ as sysdba"<<'EOF' set heading off set pagesize 0; set feedback off; set verify off; set echo off; select count(1) from user1.OFFLINE_SHOT_NEW partition(OFFLINE_SHOT_NEW_202910); quit; EOF` seq11=`sqlplus -S "/ as sysdba"<<'EOF' set heading off set pagesize 0; set feedback off; set verify off; set echo off; select count(1) from user1.EDC_WAFER_SUM_NEW partition(EDC_WAFER_SUM_NEW_202910); quit; EOF` seq18=`sqlplus -S "/ as sysdba"<<'EOF' set heading off set pagesize 0; set feedback off; set verify off; set echo off; select count(1) from user1.EQP_STATUS_HIST partition(EQP_STATUS_HIST_202910); quit; EOF` if [ $seq1 -eq 0 ]&& [ $seq3 -eq 0 ]&& [ $seq6 -eq 0 ]&& [ $seq10 -eq 0 ]&& [ $seq11 -eq 0 ]&& [ $seq12 -eq 0 ]&& [ $seq13 -eq 0 ]&& [ $seq14 -eq 0 ]&& [ $seq15 -eq 0 ]&& [ $seq18 -eq 0 ] ; then echo 0 > /tmp/chk_partition_monitor.log else echo 1 > /tmp/chk_partition_monitor.log fi
获取Oracle number类型分区表最后一个分区是否存在数据
来源:这里教程网
时间:2026-03-03 21:42:58
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 一次数据库访问异常分析
一次数据库访问异常分析
26-03-03 - 一次Undo表空间耗尽问题
一次Undo表空间耗尽问题
26-03-03 - 19C统计信息引发的数据库慢问题
19C统计信息引发的数据库慢问题
26-03-03 - SQL优化之数据倾斜解决方案
SQL优化之数据倾斜解决方案
26-03-03 - 一次报表查询优化
一次报表查询优化
26-03-03 - 一次数据库CPU使用100%异常处理及分析报告
一次数据库CPU使用100%异常处理及分析报告
26-03-03 - 一次expdp备份hang住问题分析
一次expdp备份hang住问题分析
26-03-03 - 利用Deepseek 割韭菜的套路有哪些?
利用Deepseek 割韭菜的套路有哪些?
26-03-03 - 一次dg搭建坏块处理
一次dg搭建坏块处理
26-03-03 - Oracle误truncate操作恢复(二)
Oracle误truncate操作恢复(二)
26-03-03
