دیتابیس اوراکل



set serveroutput on; 
set verify off; 

declare

  sql_str varchar2(1000);
  cursor cur_syn is
    select owner, table_name
      from dba_tables
    where owner = 'MIG_ARES_3'
       and table_name not in ('T_INV_PRICING_ELEMENT','T_TMS_WEIGHING_STATION');

begin

  for rec_syn in cur_syn loop
    sql_str := 'DROP TABLE ' || rec_syn.owner || '.' || rec_syn.table_name ||
                   'CASCADE CONSTRAINTS';
    dbms_output.put_line(sql_str);
    execute immediate sql_str;
  end loop;

end;
 


set serveroutput on; 
set verify off; 


declare 


  sql_str varchar2(2000); 
  cursor cur_syn is
    select owner,synonym_name,table_owner,table_name
      from dba_synonyms
     where table_owner='USER1';   


begin


  for rec_syn in cur_syn loop
    sql_str := 'CREATE OR REPLACE SYNONYM ' || rec_syn.owner ||'.'|| rec_syn.synonym_name || ' for USER2.' || rec_syn.TABLE_NAME ;
    execute immediate sql_str;
    dbms_output.put_line (sql_str);
  end loop; 


end;
 


create table LIST_DROP_PART

"tab_own" varchar2(128 byte), 
"tab_name" varchar2(128 byte), 
"interval" number
);

 

create table RESULT_DROP_PART
(    
"tab_own" varchar2(128 byte), 
"tab_name" varchar2(128 byte), 
"part_name" varchar2(128 byte), 
"high_value" long, 
"exec_date" date
);

 

create or replace procedure DROP_PARTITION_PRC as

  cursor tab_cur is
    select a.table_owner,
           a.table_name,
           a.partition_name,
           a.high_value,
           a.partition_position
      from dba_tab_partitions a
     where exists (select 1
              from list_drop_part b
             where a.table_owner = upper(b.tab_own)
               and a.table_name = upper(b.tab_name))
       and a.partition_position between 1 and
           (select max(c.partition_position) - 10
              from dba_tab_partitions c
             where a.table_owner = c.table_owner
               and a.table_name = c.table_name);

begin

  for tab_rec in tab_cur loop

    execute immediate 'alter table ' || tab_rec.table_owner || '.' ||
                      tab_rec.table_name || ' drop partition ' ||
                      tab_rec.partition_name || ' update global indexes ';
    insert into result_drop_part
    values
      (tab_rec.table_owner,
       tab_rec.table_name,
       tab_rec.partition_name,
       tab_rec.high_value,
       sysdate);
    commit;

    dbms_output.put_line('alter table ' || tab_rec.table_owner || '.' ||
                         tab_rec.table_name || ' drop partition ' ||
                         tab_rec.partition_name ||
                         ' update global indexes ');

  end loop;

end DROP_PARTITION_PRC;

 


alter table A.TEST modify

partition by range (TIME1) interval(numtodsinterval(1, 'DAY')) 

subpartition by list (SERIAL1)

   subpartition template

   ( subpartition SERIAL_P1 values (110)

   , subpartition SERIAL_P2 values (111)

   , subpartition SERIAL_P3 values (112)

   , subpartition SERIAL_P4 values (113)

   )

(  

   partition TEST_P1 values less than (to_date('19-03-2019', 'DD-MM-YYYY'))  

) online update indexes parallel;


بعد از flashback در دیتابیس اصلی، وقتی خواستم روی استندبای همان  دستور flashback  را اجرا کنم با خطای زیر روبرو شدم:

flashback pluggable database PDB1 to timestamp TO_TIMESTAMP('2018-11-06 10:25:00','YYYY-MM-DD HH24:MI:SS');

ORA-39885: flashback/PITR of a pluggable database before its creation is not allowed

 

بعد از آن برای همان زمان ، در دیتابیس اصلی SCN مربوطه را پیدا و دستور flashback را مجددا با دستور SCN اجرا کردیم:

select timestamp_to_scn(TO_TIMESTAMP('2019-02-01 18:45:00','YYYY-MM-DD HH24:MI:SS')) as scn

 from dual;

flashback pluggable database PDB1 to timestamp SCN 211427454;

 

بعد از اجرای دستور بالا مجددا خطای زیر را دریافت شد:

(3):Recovery of pluggable database PDB1 aborted due to pluggable database open resetlog marker.

(3):To continue recovery, restore all data files for this PDB to checkpoint SCN lower than 211427382, or timestamp before 02/01/2019 18:45:01, and restart recovery

Errors with log +FRA/IUMSPRD1/ARCHIVELOG/2019_02_02/thread_1_seq_3450.674.999172645

MRP0: Background Media Recovery terminated with error 39874

2019-02-02T12:42:32.802424+00:00

Errors in file /u01/app/oracle/diag/rdbms/iumsprd1/iumsprd/trace/iumsprd_pr00_100007.trc:

ORA-39874: Pluggable Database PDB1 recovery halted

ORA-39873: Restore all data files to a checkpoint SCN lower than 211427382.

 

برای حل خطای بالا ( همانطور که در خطا گفته شده است ) ، PDB را به SCN قبل از زمان تعیین شده flashback کردیم و مشکل حل شد.

select timestamp_to_scn(TO_TIMESTAMP('2019-02-01 18:40:00','YYYY-MM-DD HH24:MI:SS')) as scn

 from dual;

flashback pluggable database PDB1 to timestamp SCN 211418400;


select table_name, partition_name
  from user_tab_partitions 
 where table_name='TAB_PART_COMPOSITE_INTERVAL';

TABLE_NAME PARTITION_NAME
TAB_PART_COMPOSITE_INTERVAL TAB_PART_COMPOSITE_INTERVAL_P1
TAB_PART_COMPOSITE_INTERVAL SYS_P14036

 

 

 

 

select * from TAB_PART_COMPOSITE_INTERVAL partition(SYS_P14036);

 

 

select table_name, partition_name, subpartition_name
  from user_tab_subpartitions 
 where table_name='TAB_PART_COMPOSITE_INTERVAL'
   and partition_name='SYS_P14036';

TABLE_NAME PARTITION_NAME SUBPARTITION_NAME
TAB_PART_COMPOSITE_INTERVAL SYS_P14036 SYS_SUBP14005
TAB_PART_COMPOSITE_INTERVAL SYS_P14036 SYS_SUBP14006

 

 

 

 

select * from TAB_PART_COMPOSITE_INTERVAL subpartition(SYS_SUBP14028);

 


برای پارتیشن کردن یک جدول به این صورت که پارتیشن بندی اصلی آن به صورت ماهانه و subpartition آن به صورت روزانه باشد، باید یک Virtual Column به جدول اضافه شود تا بتوان subpartition بر اساس روز را بر اساس آن انجام داد.

 

CREATE TABLE TAB_PART_COMPOSITE_INTERVAL
(
  ID NUMBER(19,0), 
  TDATE TIMESTAMP (6) DEFAULT SYSTIMESTAMP, 
  TDAY NUMBER(2,0) GENERATED ALWAYS AS (EXTRACT(DAY FROM TDATE)) VIRTUAL
)
PARTITION BY RANGE (TDATE) INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
   SUBPARTITION BY LIST (TDAY)
   SUBPARTITION TEMPLATE
(
  SUBPARTITION P01 VALUES (1),
  SUBPARTITION P02 VALUES (2),
  SUBPARTITION P03 VALUES (3),
  SUBPARTITION P04 VALUES (4),
  SUBPARTITION P05 VALUES (5),
  SUBPARTITION P06 VALUES (6),
  SUBPARTITION P07 VALUES (7),
  SUBPARTITION P08 VALUES (8),
  SUBPARTITION P09 VALUES (9),
  SUBPARTITION P10 VALUES (10),
  SUBPARTITION P11 VALUES (11),
  SUBPARTITION P12 VALUES (12),
  SUBPARTITION P13 VALUES (13),
  SUBPARTITION P14 VALUES (14),
  SUBPARTITION P15 VALUES (15),
  SUBPARTITION P16 VALUES (16),
  SUBPARTITION P17 VALUES (17),
  SUBPARTITION P18 VALUES (18),
  SUBPARTITION P19 VALUES (19),
  SUBPARTITION P20 VALUES (20),
  SUBPARTITION P21 VALUES (21),
  SUBPARTITION P22 VALUES (22),
  SUBPARTITION P23 VALUES (23),
  SUBPARTITION P24 VALUES (24),
  SUBPARTITION P25 VALUES (25),
  SUBPARTITION P26 VALUES (26),
  SUBPARTITION P27 VALUES (27),
  SUBPARTITION P28 VALUES (28),
  SUBPARTITION P29 VALUES (29),
  SUBPARTITION P30 VALUES (30),
  SUBPARTITION P31 VALUES (31)
)
(  
  PARTITION TAB_PART_COMPOSITE_INTERVAL_P1

  VALUES LESS THAN (TO_DATE('2019-12-24','YYYY-MM-DD'))
);

 

بعد از پارتیشن کردن جدول ، یکی از روشهای کوئری زدن به صورتی که بتوان از این نوع پارتیشن استفاده کرد به صورت زیر است :

SELECT * 
  FROM TAB_PART_COMPOSITE_INTERVAL 
WHERE TO_CHAR(TDATE, 'YYYY-MM')='2019-12' 
    AND TDAY = 24;


 

موقع اجرای یک کوئری مربوط به گزارش در دیتابیس استندبای با خطای زیر مواجه میشدیم:

ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], []

 

طبق داکیومنت Doc ID 1332252.1 ، این خطا به دلایل مختلفی ممکن است اتفاق بیفتد:

  1. Lost writes
  2. Parallel DML issues
  3. Index corruption
  4. Data block corruption
  5. Consistent read [CR] issues
  6. Buffer cache corruption

برای ما مورد 5 بود و با flush کردن Buffer Cache مشکل حل شد.

alter system flush buffer_cache;

 

 

 


تبلیغات

محل تبلیغات شما
محل تبلیغات شما محل تبلیغات شما

آخرین وبلاگ ها

آخرین جستجو ها

ترجمه ی اختصاصی سریالهای چینی Amy Marni گروه آموزشی آیلتسر دانلود گزارش تخصصی مدیر مدرسه زندگی نامه حضرت معصومه ستاره چشمك زن