Naptár

április 2025
Hét Ked Sze Csü Pén Szo Vas
<<  < Archív
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Friss topikok

2007.06.21. 12:45 darvat

online redefinition - dbms_redefinition - Oracle DBA - Oracle adatbazis - Oracle database

meg is lepodtem hogy nincs meg ilyen blog, nem baj :) mostmar van.

kezdjuk egy kis "online redefinition"-nel.

"online redefinition"-nel, mint a neve is mondja, menet kozben tudunk tablakat machinalni, peldaul particionalni.

en igy csinaltam, Oracle 10.2.0.1-en, system felhasznaloval (logikai standby-on kellett a tablak strukturajat valtoztatni, ezert van benne 1-2 logikai standby specifikus lepes, ezt majd jelzem. Plusz nem default blocksize-zal rendelkezo tablaterbe tettem a particiokat):

* mielott egy particionalt tablat szeretnel krealni, ahol a particiok nem default blokkmerettel rendelkezo tablaterbe lesznek teve allitsd be a DB_nK_CACHE_SIZE parametert.

·         Keszitsd el a nem default blokkmerettel rendelkezo tablateret:

CREATE TABLESPACE DIFF_CACHE_SIZE DATAFILE 
  '/u05/TST/data/diff_cache_size_01.dbf' SIZE 50M AUTOEXTEND ON NEXT 
10M MAXSIZE 300M
LOGGING
ONLINE
PERMANENT
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 16K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
·         Lassuk, hogy a tabla egyaltalan alkalmas-e online redefinitionra 
(kell hogy legyen rajta Primary Key, nem szabad hogy materializalt 
view/materializalt view log legyen rajta):
       EXEC Dbms_Redefinition.Can_Redef_Table('MY_DBA','ACCOUNT');
 ·     Ha az elozo futtatas nem dob vissza hibauzenetet allitsuk le a 
logikai standby SQL Apply-t:
        alter database stop logical standby apply;
 ·         keszitsuk el a particionalt tablankat (ez lesz az "interim table"):
 CREATE TABLE MY_DBA.ACCOUNT_PART
(  ACCOUNT_NO          NUMBER(10)                ,
  ACCOUNT_TYPE        VARCHAR2(3 CHAR)         ,
  NAME_ID             NUMBER(10)              ,
  TIMESTAMP           DATE,
  USERID              VARCHAR2(8 CHAR),
  RECORD_VERSION      NUMBER)
TABLESPACE DIFF_CACHE_SIZE   
PARTITION BY RANGE (TIMESTAMP) 
(PARTITION P1 VALUES LESS THAN (TO_DATE(' 2007-01-01 00:00:00', 
'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')), 
  PARTITION P2 VALUES LESS THAN (MAXVALUE));
 
·         kezdjuk a redefinition-t:
 BEGIN
  DBMS_REDEFINITION.start_redef_table(
    uname      => 'MY_DBA',        
    orig_table => 'ACCOUNT',
    int_table  => 'ACCOUNT_PART');
END;
  ·         masoljuk at a source tabla minden kapcsolodo objektumat 
  (indexek, triggerek, grant-ok, constraint-ek):
 DECLARE
num_errors PLS_INTEGER;
BEGIN
DBMS_REDEFINITION.COPY_TABLE_DEPENDENTS('my_dba', 
'account','account_part', 1, TRUE, TRUE, TRUE, TRUE, num_errors);
END;
 
·         Ellenorizzuk, hogy az elozo futtatas generalt-e hibat:
 
select object_name, base_table_name, ddl_txt 

from DBA_REDEFINITION_ERRORS;
 
	· javasolt, hogy egy "sync"-et futtassunk 
	(kulonosen,ha nagy tablat redefinialtunk:) 
exec  DBMS_REDEFINITION.sync_interim_table(
uname => 'MY_DBA', 
orig_table => 'ACCOUNT',
int_table  => 'ACCOUNT_PART');
 
·         Fejezzuk be a redefinialasi folyamatot 
(az eredeti es az interim tablak nevei megcserelodnek 
 az adatszotarban):
exec DBMS_REDEFINITION.finish_redef_table(
uname => 'MY_DBA', 
orig_table => 'ACCOUNT',
int_table  => 'ACCOUNT_PART');
  ·         dobjuk el az interim tablat 
(ami ugye a nevcsere utan tulkepp az eredeti (nem particionalt)):
         drop table my_dba.ACCOUNT_PART
 ·         valoszinuleg akarsz majd uj, particionalt indexe(ke)t is hasznalni:
e.g.: CREATE INDEX my_dba.account_trans_date_local 
ON my_dba.account (TRANS_DATE) LOCAL tablespace PART_INDEXES;
 ·         enable row movement - ez azert szukseges, mert ha a particios kulcs 
modosul, lehet hogy particiok kozott kell a sornak maszkalni: 

alter table my_dba.account enable row movement;
·         inditsuk el a logikai standby sql apply-t:
       alter database start logical standby apply immediate;

Szólj hozzá!


A bejegyzés trackback címe:

https://oracle.blog.hu/api/trackback/id/tr46103195

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása