sql >> Database teknologi >  >> RDS >> Oracle

Drop partitioner ældre end 2 måneder

Først vil jeg gerne påpege, at partitionering er et avanceret emne i Oracle, derfor vil du måske køre alt DDL manuelt i begyndelsen, indtil du er sikker nok med at køre DDL-scripts. Jeg vil også råde dig til aldrig at køre et script fundet på internettet uden at have både forståelse det og test det grundigt, især DDL-scripts.

Nu for sagen ved hånden, kan du forespørge *_TAB_PARTITIONS ordbogsvisning for at hente partitionsgrænsen:

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'

Denne kolonne er af typen LONG (=forældet LOB), så vi har få værktøjer til at filtrere med SQL, vi bliver nødt til at bruge 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. Failover &Failback for PostgreSQL på Microsoft Azure

  2. Sådan indsætter du kode sikkert i mySQL-databasen

  3. Hvordan skriver man en tabel i PostgreSQL fra R?

  4. Introduktion af agentbaseret databaseovervågning med ClusterControl 1.7