Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Thả các phân vùng cũ hơn 2 tháng

Đầu tiên, tôi muốn chỉ ra rằng phân vùng là một chủ đề nâng cao trong Oracle, do đó bạn có thể muốn chạy tất cả các DDL theo cách thủ công ngay từ đầu, cho đến khi bạn đủ tự tin với việc chạy các tập lệnh DDL. Tôi cũng khuyên bạn đừng bao giờ chạy một tập lệnh được tìm thấy trên internet mà không có cả sự hiểu biết nó và thử nghiệm nó triệt để, đặc biệt là các tập lệnh DDL.

Bây giờ đối với vấn đề trong tầm tay, bạn có thể truy vấn *_TAB_PARTITIONS chế độ xem từ điển để truy xuất ranh giới phân vùng:

SQL> SELECT partition_name, high_value
  2    FROM user_tab_partitions
  3   WHERE table_name = 'TEST_TABLE';

PARTITION_NAME  HIGH_VALUE
--------------- --------------------------------------------------------
PT01122012      TO_DATE(' 2012-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01022013      TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01042013      TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01062013      TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'
PT01082013      TO_DATE(' 2013-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS'

Cột này thuộc loại LONG (=LOB không được dùng nữa) nên chúng tôi có ít công cụ để lọc bằng SQL, chúng tôi sẽ phải sử dụng PL / SQL.

SQL> BEGIN
  2     FOR cc IN (SELECT partition_name, high_value --
  3                  FROM user_tab_partitions
  4                 WHERE table_name = 'TEST_TABLE') LOOP
  5        EXECUTE IMMEDIATE
  6           'BEGIN
  7               IF sysdate >= ADD_MONTHS(' || cc.high_value || ', 2) THEN
  8                  EXECUTE IMMEDIATE
  9                     ''ALTER TABLE TEST_TABLE DROP PARTITION '
 10                     || cc.partition_name || '
 11                     '';
 12               END IF;
 13            END;';
 14     END LOOP;
 15  END;
 16  /

PL/SQL procedure successfully completed

SQL> SELECT partition_name, high_value
  2    FROM user_tab_partitions
  3   WHERE table_name = 'TEST_TABLE';

PARTITION_NAME  HIGH_VALUE
--------------- -----------------------------------------------------------
PT01022013      TO_DATE(' 2013-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 
PT01042013      TO_DATE(' 2013-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 
PT01062013      TO_DATE(' 2013-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 
PT01082013      TO_DATE(' 2013-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhóm Oracle chỉ theo MỘT cột

  2. ORA-00942:bảng hoặc chế độ xem không tồn tại ... tôi có thể biết thêm chi tiết không?

  3. TNS Listener lỗi

  4. Di chuyển Java 11 - createConnectionBuilder () từ PoolDataSourceImpl xung đột với createConnectionBuilder () từ javax.sql.DataSource

  5. Truy vấn SQL của Oracle để liệt kê tất cả các Lược đồ trong một DB