sql >> Database >  >> RDS >> Oracle

Laat partities ouder dan 2 maanden vallen

Ten eerste wil ik erop wijzen dat partitionering een geavanceerd onderwerp is in Oracle, daarom wilt u misschien alle DDL in het begin handmatig uitvoeren, totdat u voldoende zeker bent van het uitvoeren van DDL-scripts. Ik zou je ook aanraden om nooit een script uit te voeren dat op internet is gevonden zonder dat je beide begrijpen . hebt het en testen het grondig, vooral DDL-scripts.

Nu voor de kwestie, kun je de opvragen *_TAB_PARTITIONS woordenboekweergave om de partitiegrens op te halen:

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'

Deze kolom is van het type LONG (=verouderde LOB) dus we hebben weinig tools om met SQL te filteren, we zullen PL/SQL moeten gebruiken.

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. Hoe te groeperen op jaar en maand in MySQL

  2. Een schemagebonden opgeslagen procedure maken in SQL Server

  3. Azure - toestemming geweigerd bij verbinding maken met externe MySQL-database

  4. Automatische afstemming van Azure SQL Database