Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Upuść partycje starsze niż 2 miesiące

Po pierwsze, chciałbym zwrócić uwagę, że partycjonowanie jest zaawansowanym tematem w Oracle, dlatego możesz chcieć uruchomić wszystkie DDL ręcznie na początku, dopóki nie będziesz wystarczająco pewny uruchamiania skryptów DDL. Radziłbym również, aby nigdy nie uruchamiać skryptu znalezionego w Internecie bez posiadania obu rozumienia to i testowanie to dokładnie, zwłaszcza skrypty DDL.

Teraz w tej sprawie możesz wysłać zapytanie do *_TAB_PARTITIONS widok słownika, aby pobrać granicę partycji:

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'

Ta kolumna jest typu LONG (=przestarzały LOB), więc mamy kilka narzędzi do filtrowania za pomocą SQL, będziemy musieli użyć 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. Konwertuj obraz blob na PUBLIC.ORDIMAGE w plsql

  2. ORA-00947 :Niewystarczające wartości

  3. Oracle:eksportowanie tylko schematu

  4. Jak uzyskać zaznaczoną wartość pola wyboru z Treeview w c#?

  5. Używanie wyzwalacza w Oracle do rejestrowania zmian w tabeli