dz̸OracleÖдóÊý¾ÝÁ¿±íµÄ¹ÜÀí
×÷ÕߣºÄ¦ÍÐÂÞÀ¹«Ë¾Èí¼þ¹¤³Ìʦ ·ëê¿
¡¡¡¡1 ¼ò½é
¡¡¡¡Ëæ×ÅÐÅÏ¢ÒµµÄ·¢Õ¹£¬ÔÚÆóÒµ¼¶Êý¾Ý¿âÓ¦ÓÃÖУ¬¾³£»áÓÐһЩ¼¸Ê®GB,ÉϰÙGBµÄÊý¾Ý±í¡£ÕâЩ´óÊý¾ÝÁ¿±íµÄÉè¼Æ£¬Î¬»¤¼°Æä±¸·Ý¶¼ÊÇÊý¾Ý¿â¹ÜÀíÖеÄÖØµã¼°ÆäÄѵ㡣±¾ÎľʹÓÉè¼Æ
¡¡¡¡2 Éè¼Æ
¡¡¡¡2.1 ´ó±íʱЧÐÔ
¡¡¡¡´óÊý¾ÝÁ¿±íµÄÊý¾ÝÁ¿Ò»°ãÀ´ËµÊǸúʱ¼ä³ÉÕý±ÈµÄ£¬Ê±¼äÔ½¾Ã,Êý¾ÝÁ¿Ô½´ó¡£ ÔÚÉè¼Æ½×¶ÎÊ×ÏÈÒª¿¼ÂÇÕâЩ´ó±íµÄʱЧÐÔ¡£
¡¡¡¡Í¨³£Çé¿ö£¬ÔÚÒ»¶¨µÄʱ¼äÇø¼ä,Êý¾ÝµÄ·ÃÎÊÆµ¶È±È½Ï´ó£¬³¬¹ýÕâ¸öÇø¼ä£¬Êý¾ÝµÄ·ÃÎÊÆµ¶È¼«Ð¡¡£Õâ¸öʱ¼äÇø¼ä¸ù¾Ý²»Í¬µÄÓ¦ÓÃÀàÐͶø²»Í¬£¬Í¨³£ÊǼ¸¸öÔ¡£³¬¹ýÕâ¸öʱ¼äÇø¼äµÄÊý¾Ý¿ÉÒÔÈÏΪÊÇÀúÊ·Êý¾Ý£¬Êý¾Ý·ÃÎʵĿÉÄÜÐÔ²»´ò¡£ÔÚÆóÒµÓ¦ÓÃÖУ¬²¢²»ÊÇËùÓеÄÊý¾Ý¶¼ÐèÒª±£ÁôÔÚÉú²úÊý¾Ý¿âÖУ¬¶ÔÓÚÕâЩÀúÊ·Êý¾Ý£¬¿ÉÒÔ¿¼ÂÇÀëÏß´æ·Å£¬»òÕßÊÇ´æ·ÅÔÚÁíÍâµÄÊý¾Ý¿âÖУ¬±ÈÈçÊý¾Ý²Ö¿âµÈ¡£
¡¡¡¡´ó±íµÄʱЧÐÔ¿ÉÒÔͨ¹ýÔÚ±íÉϼÓʱ¼ä´ÁÁÐÀ´ÊµÏÖ¡£
¡¡¡¡2.2 ʹÓ÷ÖÇø±í
¡¡¡¡Oracle 8ÒÔºóÌṩÁË·ÖÇø±íµÄ¹¦ÄÜ£¬·ÖÇø±í¿ÉÒÔ°ÑÒ»¸ö±íµÄÊý¾Ý´ÓÎïÀíºÍÂß¼ÉÏ·Ö¸î³ÉСµÄÇøÓò¡£ OracleÖ§³Ö·Ç³£´óµÄ·ÖÇø±í£¬Ò»¸ö¶ÔÏó¿ÉÒÔÔÊÐí¶à´ï64000¸ö·ÖÇø¡£¶ÔÓÚ´ó±íÀ´Ëµ£¬Ê¹Ó÷ÖÇø±íÊÇÊ×Ñ¡·½°¸¡£ ·ÖÇø±í¿ÉÒÔ¸ÄÉÆ±íµÄά»¤¡¢±¸·Ý¡¢»Ö¸´¼°²éѯÐÔÄÜ¡£
¡¡¡¡·ÖÇø±íÓÐ4ÖÖ·ÖÇø·½Ê½£º
¡¡¡¡n Range Partitioning
¡¡¡¡n Hash Partitioning
¡¡¡¡n Composite Partitioning
¡¡¡¡n List Partitioning
¡¡¡¡¶ÔÓÚÓÐʱЧÐԵĴó±í£¬¿ÉÒÔ²ÉÓð´Ê±¼ä·ÖÇøµÄ Range Partitioning±í£¬ÀýÈç°´Ìì·ÖÇøµÄ·ÖÇø±í¡£
¡¡¡¡CREATE TABLE Test(
¡¡¡¡DATATIME DATE NOT NULL,
¡¡¡¡P1 NUMBER NULL,
¡¡¡¡P2 NUMBER NULL,
¡¡¡¡P3 NUMBER NULL,
¡¡¡¡P4 NUMBER NULL,
¡¡¡¡P5 NUMBER NULL,
¡¡¡¡P6 NUMBER NULL,
¡¡¡¡P7 NUMBER NULL,
¡¡¡¡P8 NUMBER NULL,
¡¡¡¡CONSTRAINT PK_TEST PRIMARY KEY (datatime, p1,p2) USING INDEX LOCAL TABLESPACE USERINDEX
¡¡¡¡)
¡¡¡¡PARTITION BY RANGE (DATATIME)
¡¡¡¡(PARTITION Test_060101 VALUES LESS THAN (TO_DATE('2006-01-02','YYYY-MM-DD')),
¡¡¡¡(PARTITION Test_060102 VALUES LESS THAN (TO_DATE('2006-01-03','YYYY-MM-DD')),
¡¡¡¡¡¡
¡¡¡¡);
¡¡¡¡¶ÔÓÚ°´Ê±¼ä·ÖÇøÈÔÈ»²»ÄÜÂú×ãÐÔÄÜÐèÇóµÄ±í£¬ »¹¿ÉÒÔ¸ù¾ÝÓ¦ÓÃÐèÇó£¬Ê¹ÓÃ×Ó·ÖÇø¶Ô±í½øÒ»²½Ï¸»¯¡£
¡¡¡¡Ó¦ÓÃÉè¼ÆÖУ¬Òª³ä·ÖÀûÓ÷ÖÇø±íµÄÌØÐÔ£¬¶Ô´ó±íµÄ·ÃÎÊÒªÍêÈ«±ÜÃâÈ«±í·ÃÎÊ£¬ËõС·ÃÎÊ·¶Î§¡£ÔÚ²éѯÌõ¼þÖУ¬¾¡Á¿Ê¹Ó÷ÖÇøµÄÁС£
¡¡¡¡3 ά»¤
¡¡¡¡´ó±íµÄά»¤¹¤×÷±È½Ï·±Ëö£¬Ë÷ÒýµÄά»¤£¬´æ´¢¿Õ¼äµÄά»¤£¬ÀúÊ·Êý¾ÝµÄÇåÀíµÈµÈ£¬Ê¹Ó÷ÖÇø±í¿ÉÒÔ¼ò»¯´ó±íµÄά»¤¹¤×÷£¬µ«ÊÇÈç¹û±íºÜ¶àµÄ»°£¬ÊÖ¶¯µÄ´´½¨¡¢É¾³ý·ÖÇøÒ²ÊÇÒ»¼þºÜ·±Ëö£¬¶øÇÒÈÝÒ׳ö´íµÄÊÂÇé¡£
¡¡¡¡´ËÕ½ÚÒÔ°´Ìì·ÖÇøµÄ·ÖÇø±íΪÀýÌÖÂÛ´ó±íµÄ×Ô¶¯Î¬»¤¡£
¡¡¡¡3.1 ·ÖÇø±íµÄÃüÃû¹æÔò
¡¡¡¡·ÖÇø±í·ÖÇøµÄÃüÃûÓ¦µ±°´ÕÕÒ»¶¨µÄ¹æÔòÃüÃû£¬ÒÔÀûÓÚ×Ô¶¯Î¬»¤µÄʵÏÖ¡£±¾Àý²ÉÓð´Ìì·ÖÇøµÄ·ÖÇø±í£¬·ÖÇøµÄÃüÃû·½Ê½ÎªTABLENAME_YYMMDD£¬ÀýÈ磺TEST±íµÄ2006Äê6ÔÂ1ÈյķÖÇøÃüÃûΪTEST _060601¡£
¡¡¡¡3.2 ά»¤×Öµä
¡¡¡¡ÔÚÊý¾Ý¿âÖд´½¨Î¬»¤×Öµä±í£¬´æ·ÅÐèÒª×Ô¶¯Î¬»¤µÄ·ÖÇø±íµÄÐÅÏ¢£¬°üÀ¨±íÃû£¬schema£¬±íµÄÀàÐÍ£¬Êý¾ÝÔÚÊý¾Ý¿âÖеı£Áôʱ¼äµÈÐÅÏ¢¡£
¡¡¡¡Table Name: H_RETENTION
¡¡¡¡Column Type Null? Description
¡¡¡¡tablename Varchar2(30) Not null ±íÃû
¡¡¡¡schemaname Varchar2(30) Not null Schema
¡¡¡¡typeid Varchar2(20) Not null ±íÀàÐÍ1. PARTITION2. NORMAL3. ¡¡£¡£
¡¡¡¡retention Number(3) Not null ¸Ã±íµÄ±£´æÌìÊý¡£
¡¡¡¡3.3 ×Ô¶¯´´½¨·ÖÇø
¡¡¡¡¶ÔÓÚ°´Ê±¼ä·ÖÇøµÄ·ÖÇø±í£¬Èô²»Äܼ°Ê±´´½¨ÐµÄÊý¾Ý·ÖÇø£¬»áµ¼ÖÂÊý¾ÝÎÞ·¨²åÈëµ½·ÖÇø±íµÄÑÏÖØºó¹û£¬Êý¾Ý¿â»á²úÉú±¨´íÐÅÏ¢ORA-14400: inserted partition key does not map to any partition£¬²åÈëʧ°Ü¡£
¡¡¡¡´´½¨·ÖÇø¿ÉÒÔÊÖ¹¤´´½¨£¬Ò²¿ÉÒÔ¸ù¾Ýά»¤×ֵ䣬ͨ¹ýϵͳµÄÈÎÎñµ÷¶ÈÀ´´´½¨·ÖÇø¡£Í¨³£ÊÇÔÚÔµ״´½¨Ï¸öÔµķÖÇø¡£
¡¡¡¡×Ô¶¯´´½¨·ÖÇøÊµÏÖÈçÏ£º
¡¡¡¡/**************************************************************************
¡¡¡¡Program Name:Add_Partition
¡¡¡¡Description:
¡¡¡¡´´½¨Ä³¸öÓû§Ï¸öÔµÄËùÓзÖÇø
¡¡¡¡***************************************************************************/
¡¡¡¡PROCEDURE add_partition (v_schema IN VARCHAR2)
¡¡¡¡IS
¡¡¡¡CURSOR c_td_table
¡¡¡¡IS
¡¡¡¡SELECT tablename
¡¡¡¡FROM h_retention
¡¡¡¡WHERE typeid £½ 'PARTITION'
¡¡¡¡AND schemaname = UPPER (v_schema)
¡¡¡¡ORDER BY tablename;
¡¡¡¡v_cur BINARY_INTEGER;
¡¡¡¡v_int BINARY_INTEGER;
¡¡¡¡v_partition VARCHAR2 (30);
¡¡¡¡v_date DATE;
¡¡¡¡v_days NUMBER;
¡¡¡¡sql_stmt VARCHAR2 (1000); -- String used to save sql statement
¡¡¡¡err_msg VARCHAR2 (300);
¡¡¡¡BEGIN
¡¡¡¡v_date := TRUNC (ADD_MONTHS (SYSDATE, 1), 'MM');
¡¡¡¡v_days :=
¡¡¡¡TO_NUMBER (TO_CHAR (LAST_DAY (ADD_MONTHS (SYSDATE, 1)), 'DD'));
¡¡¡¡v_cur := DBMS_SQL.open_cursor;
¡¡¡¡FOR v_table IN c_td_table
¡¡¡¡LOOP
¡¡¡¡v_date := TRUNC (ADD_MONTHS (SYSDATE, 1), 'MM');
¡¡¡¡v_partition := v_table.tablename;
¡¡¡¡FOR i IN 1 .. v_days
¡¡¡¡LOOP
¡¡¡¡BEGIN
¡¡¡¡sql_stmt :=
¡¡¡¡'ALTER TABLE '
¡¡¡¡|| v_schema
¡¡¡¡|| '.'
¡¡¡¡|| v_table.tablename
¡¡¡¡|| ' ADD PARTITION '
¡¡¡¡|| v_partition
¡¡¡¡|| '_'
¡¡¡¡|| TO_CHAR (v_date, 'YYMMDD')
¡¡¡¡|| ' '
¡¡¡¡|| 'VALUES LESS THAN (TO_DATE('''
¡¡¡¡|| TO_CHAR (v_date + 1, 'YYYY-MM-DD')
¡¡¡¡|| ''',''YYYY-MM-DD'')) ';
¡¡¡¡DBMS_SQL.parse (v_cur, sql_stmt, DBMS_SQL.native);
¡¡¡¡v_int := DBMS_SQL.EXECUTE (v_cur);
¡¡¡¡EXCEPTION
¡¡¡¡WHEN OTHERS
¡¡¡¡THEN
¡¡¡¡err_msg :=
¡¡¡¡v_partition
¡¡¡¡|| ': Create '
¡¡¡¡|| TO_CHAR (v_date, 'YYMMDD')
¡¡¡¡|| ' partition unsuccessfully! Error Information:'
¡¡¡¡|| SQLERRM;
¡¡¡¡log_insert (err_msg); --You can define your own log_insert function
¡¡¡¡COMMIT;
¡¡¡¡END;
¡¡¡¡v_date := v_date + 1;
¡¡¡¡END LOOP;
¡¡¡¡END LOOP;
¡¡¡¡DBMS_SQL.close_cursor (v_cur);
¡¡¡¡END;
¡¡¡¡3.4 ×Ô¶¯É¾³ý¹ýÆÚ·ÖÇø
¡¡¡¡ÎªÁËÊÍ·Å´æ´¢¿Õ¼ä²¢Ìá¸ß´ó±íµÄÐÔÄÜ£¬Òª´ÓÊý¾Ý¿âÖÐɾ³ý´ó±íÖйýÆÚµÄÀúÊ·Êý¾Ý¡£É¾³ý²Ù×÷¿ÉÒÔÊÖ¹¤Ö´ÐУ¬Ò²¿ÉÒÔͨ¹ýϵͳµÄÈÎÎñµ÷¶ÈÀ´×Ô¶¯É¾³ý¡£·ÖÇø±íÊý¾Ýɾ³ýÖ»ÐèҪɾ³ýÏàÓ¦µÄÊý¾Ý·ÖÇø£¬ÓëdeleteÏà±È£¬ÓÐÈçϺô¦£º
¡¡¡¡u ËÙ¶È¿ì
¡¡¡¡u Õ¼Óûعö±í¿Õ¼äÉÙ
¡¡¡¡u ²úÉúÈÕÖ¾Á¿ÉÙ
¡¡¡¡u Êͷſռä
¡¡¡¡Èç¹ûÓÐglobalµÄË÷Òý£¬É¾³ý·ÖÇøºóÐèÒªÖØ½¨Ë÷Òý¡£
¡¡¡¡×Ô¶¯É¾³ý·ÖÇøÊµÏÖÈçÏ£º
¡¡¡¡µ±Ç°·ÖÇø±íµÄ·ÖÇøÇé¿ö¿ÉÒÔͨ¹ýOracleµÄÊý¾Ý×Öµädba_tab_partitions»ñµÃ, È»ºóÓëά»¤×ÖµäÖеÄÊý¾Ý±£ÁôÌìÊý½øÐбȽϣ¬É¾³ý¹ýÆÚµÄÊý¾Ý·ÖÇø¡£ ±¾Îijö×Ô 51CTO.COM¼¼Êõ²©¿Í |


gulibin
²©¿Íͳ¼ÆÐÅÏ¢
ÈÈÃÅÎÄÕÂ
×îÐÂÆÀÂÛ
ÓÑÇéÁ´½Ó

