Powiększanie tablespace na ASM w Oracle

Powiększanie przestrzeni tabel opartych na „zwykłych plikach” jest w miarę proste. Jeśli baza oparta jest na Automatic Storage Management (ASM) sprawa jest trochę bardziej skomplikowana.

Na początku sprawdzamy zajętość przestrzeni tabel. Jeśli już znamy nazwę przestrzeni która nam się „zapchała” sprawdzamy nazwy plików w których jest zapisana (w przykładzie to tablespace PIN00).

col file_name format a50;
select File_name, (bytes/1024/1024/1024) as GB from dba_data_files where TABLESPACE_NAME='PIN00';

FILE_NAME                                                  GB
-------------------------------------------------- ----------
+BXXDATA/brmsdr/datafile/pin00.644.954189111               30
+BXXDATA/brmsdr/datafile/pin00.645.954189145               30
+BXXDATA/brmsdr/datafile/pin00.648.955369221       31,9990234
+BXXDATA/brmsdr/datafile/pin00.651.956534923               30
+BXXDATA/brmsdr/datafile/pin00.652.956539931               30
+BXXDATA/brmsdr/datafile/pin00.655.957252481               10 

Jeszcze pytanie o konkretny plik w grupie ASM

select NAME,round(BYTES/1024/1024,2) as size_MB from v$datafile where name like '+BXXDATA/brmsdr/datafile/pin00.655.957252481';

NAME                                                            SIZE_MB
------------------------------------------------------------ ----------
+BXXDATA/brmsdr/datafile/pin00.655.957252481                       10720

Następnie sprawdzamy zajętość grup ASM

select GROUP_NUMBER, NAME, TOTAL_MB, FREE_MB, ROUND (100*(FREE_MB/TOTAL_MB)) free_pct, STATE from v$asm_diskgroup;

GROUP_NUMBER NAME                             TOTAL_MB    FREE_MB   FREE_PCT STATE
------------ ------------------------------ ---------- ---------- ---------- -----------
           4 BXXREDOB                            67527      22318         33 CONNECTED
           3 BXXREDOA                            67527      22318         33 CONNECTED
           1 BXXARCH                           1025920    1024320        100 CONNECTED
           2 BXXDATA                          13849920    2625344         19 CONNECTED
           5 CXXDATA                             22509      17377         77 MOUNTED

Nasza tablespace jest zapisana w grupie +BXXDATA gdzie mamy jeszcze ponad 2TB wolnego miejsca.

Powiększamy istniejący plik (ostatni na liście ktory zajmował 10GB

ALTER DATABASE DATAFILE '+BXXDATA/brmsdr/datafile/pin00.655.957252481' RESIZE 20G;

Jeśli pliki nie są automatycznie przyznawana za pomocą OMF (można poznać po dziwnej nazwie np pin00.655.957252481 czyli takie jak w naszym przykładzie) można dodać kolejny plik

ALTER TABLESPACE CHECKTP ADD DATAFILE '/u01new/oradata/CHECKNEW/CHECKTP_33.dbf' SIZE 25G AUTOEXTEND OFF;

jeśli OMF jest uruchomiony to plik dodajemy poleceniem

ALTER TABLESPACE PIN00 ADD DATAFILE SIZE 15G AUTOEXTEND OFF;

Ścieżka do pliki oraz sama nazwa zostanie utworzona automatycznie. My podajemy tylko rozmiar i czy ma posiadać autoextend. Plik zostanie dodany do domyślnej przestrzeni ASM. Aby sprawdzić jak to przestrzeń należy sprawdzić parameter

NAME                            VALUE
--------------------- ---------------
db_create_file_dest             +DATA

Sprawdzamy rozmiarów plików dla tablespace (w GB) czy się coś powiększyło

select File_name, (bytes/1024/1024/1204) as GB from dba_data_files where TABLESPACE_NAME='PIN00';

FILE_NAME                                                  GB
-------------------------------------------------- ----------
+BXXDATA/brmsdr/datafile/pin00.644.954189111               30
+BXXDATA/brmsdr/datafile/pin00.645.954189145               30
+BXXDATA/brmsdr/datafile/pin00.648.955369221       31,9990234
+BXXDATA/brmsdr/datafile/pin00.651.956534923               30
+BXXDATA/brmsdr/datafile/pin00.652.956539931               30
+BXXDATA/brmsdr/datafile/pin00.655.957252481               20

Na koniec można sprawdzić ile zajmuje teraz nasza przestrzeń tabel

SELECT tablespace_name, SUM(bytes)/1024/1024/1024 AS total_bytes FROM dba_data_files where tablespace_name ='PIN00' GROUP BY tablespace_name;

TABLESPACE_NAME                TOTAL_BYTES
------------------------------ -----------
PIN00                          6655,83495

Do administracji grupami ASM złuży narzędzie ASMCMD

Wywołujemy go poleceniem

$ asmcmd

Aby wyświetlić listę grup ASM wydajemy polecenie LS

ASMCMD> ls

BRMARCH/
BXXDATA/
BXXREDOA/
BXXREDOB/
CXXDATA/
REZERWA/

Aby wyświetlić informacje o grupach dyskowych :

ASMCMD> lsdg

State    	Type  Rebal  Unbal     Sector  Block	AU		  Total_MB     Free_MB  Req_mir_free_MB  Usable_file_MB  Offline_disks  Name
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MOUNTED  EXTERN  N         512   4096  67108864   1025920  1024320                0         1024320              0             N  BXXARCH/
MOUNTED  EXTERN  N         512   4096  67108864  13849920  2653824                0         2653824              0             N  BXXDATA/
MOUNTED  EXTERN  N         512   4096   1048576     67527    22318                0           22318              0             N  BXXREDOA/
MOUNTED  EXTERN  N         512   4096   1048576     67527    22318                0           22318              0             N  BXXREDOB/
MOUNTED  EXTERN  N         512   4096   1048576     22509    22447                0           22447              0             N  CXXDATA/
MOUNTED  EXTERN  N         512   4096  1048576    276188    276089                0	     276089              0             N  REZERWA/

Powiększanie grupy ASM

Jeśli w grupie ASM nie ma wolnego miejsca trzeba dodać kolejną przestrzeń. Najpierw sprawdzamy zajętość grup i czy istanieje jakaś „rezerwa”.

col name format a20
select GROUP_NUMBER, NAME, TOTAL_MB, FREE_MB from v$asm_diskgroup;

 GROUP_NUMBER NAME                   TOTAL_MB    FREE_MB
=========================================================================
           1 ACFS                      69044      10571
           2 DATA                     759484      69450
           3 OCR                       17262      16867
           4 REZERWA                  140044      140951

col path format a45
col name format a20
col label format a10
select GROUP_NUMBER, HEADER_STATUS, TOTAL_MB, FREE_MB,NAME, LABEL, PATH from v$asm_disk order by GROUP_NUMBER, HEADER_STATUS, NAME,LABEL;

GROUP_NUMBER HEADER_STATU   TOTAL_MB    FREE_MB NAME                 LABEL      PATH
=========================================================================
           1 MEMBER            69044      10571 DISK1B               DISK1B     ORCL:DISK1B
           2 MEMBER            69044       6312 DISK10               DISK10     ORCL:DISK10
           2 MEMBER            69044       6312 DISK11               DISK11     ORCL:DISK11
           2 MEMBER            69044       6312 DISK12               DISK12     ORCL:DISK12
           2 MEMBER            69044       6329 DISK13               DISK13     ORCL:DISK13
           2 MEMBER            69044       6311 DISK1C               DISK1C     ORCL:DISK1C
           2 MEMBER            69044       6312 DISK1D               DISK1D     ORCL:DISK1D
           2 MEMBER            69044       6312 DISK5                DISK5      ORCL:DISK5
           2 MEMBER            69044       6315 DISK6                DISK6      ORCL:DISK6
           2 MEMBER            69044       6311 DISK7                DISK7      ORCL:DISK7
           2 MEMBER            69044       6313 DISK8                DISK8      ORCL:DISK8
           2 MEMBER            69044       6311 DISK9                DISK9      ORCL:DISK9
           3 MEMBER            17262      16867 DISK1H               DISK1H     ORCL:DISK1H
           4 MEMBER            69044      68951 DISK15               DISK15     ORCL:DISK15
	   4 MEMBER            69044      68951 DISK14               DISK14     ORCL:DISK14

Jak widać w górnej tabeli grupa REZERWA to grupa 4 o rozmiarze 140GB. W dolnej „tabelce” do tej grupy przypisane są dwa dyski (14 i 15 o wielkości 68951 każda).

Musimy „wypiąć” dysk z grupy REZERWA. Jeśli jest tylko jeden dysk w grupie REZERWA to nie pozwoli nam go wypiąć i trzeba usunąć grupę i założyć ją ponownie powiększoną z kilkoma dyskami (o tym później).

drop diskgroup REZERWA

Jeśli jest kilka dysków to uruchamiamy dropowanie z grupy REZERWA dysku (numer 14)

alter diskgroup REZERWA drop disk 'DISK14';

 Diskgroup altered.

select * from v$asm_operation;

no rows selected

Sprawdzamy czy dysk jest wypięty (musi mieć status FORMER i puste pole NAME). Grupa REZERWA w górnej tabeli powinna się zmniejszyć o wielkość wypiętego dysku.

select GROUP_NUMBER, NAME, TOTAL_MB, FREE_MB from v$asm_diskgroup;

GROUP_NUMBER NAME                   TOTAL_MB    FREE_MB
------------ -------------------- ---------- ----------
           1 ACFS                      69044      10571
           2 DATA                     759484      69450
           3 OCR                       17262      16867
           4 REZERWA                   69044      68951  - było 140044

select GROUP_NUMBER, HEADER_STATUS, TOTAL_MB, FREE_MB,NAME, LABEL, PATH from v$asm_disk order by GROUP_NUMBER, HEADER_STATUS, NAME,LABEL;

GROUP_NUMBER HEADER_STATU   TOTAL_MB    FREE_MB NAME                 LABEL      PATH
------------ ------------ ---------- ---------- -------------------- ---------- ---------------------------------------------
           0 FORMER                0          0                      DISK14     ORCL:DISK14
           1 MEMBER            69044      10571 DISK1B               DISK1B     ORCL:DISK1B
           2 MEMBER            69044       6312 DISK10               DISK10     ORCL:DISK10
           2 MEMBER            69044       6312 DISK11               DISK11     ORCL:DISK11
           2 MEMBER            69044       6312 DISK12               DISK12     ORCL:DISK12
           2 MEMBER            69044       6329 DISK13               DISK13     ORCL:DISK13
           2 MEMBER            69044       6311 DISK1C               DISK1C     ORCL:DISK1C
           2 MEMBER            69044       6312 DISK1D               DISK1D     ORCL:DISK1D
           2 MEMBER            69044       6312 DISK5                DISK5      ORCL:DISK5
           2 MEMBER            69044       6315 DISK6                DISK6      ORCL:DISK6
           2 MEMBER            69044       6311 DISK7                DISK7      ORCL:DISK7
           2 MEMBER            69044       6313 DISK8                DISK8      ORCL:DISK8
           2 MEMBER            69044       6311 DISK9                DISK9      ORCL:DISK9
           3 MEMBER            17262      16867 DISK1H               DISK1H     ORCL:DISK1H
           4 MEMBER            69044      68951 DISK15               DISK15     ORCL:DISK15

15 rows selected.

Ustawiamy rebalancing z poziomu 1 (wolny) na 5 (szybszy). Maksymalnie można ustawić go na 11, ale to można zabić nasz serwer 🙂

show parameter power

NAME                                 TYPE        VALUE
---------------------------------------------------------------------------
asm_power_limit                      integer     1

alter session set asm_power_limit=5;

Session altered.

A teraz dodajemy nasz 14 dysk (obecnie w stanie FORMER wyciągnięty z REZERWY) do naszej nowej grupy dyskowej (w naszym przypadku +DATA)

select * from v$asm_diskgroup;

GROUP_NUMBER NAME        SECTOR_SIZE BLOCK_SIZE ALLOCATION_UNIT_SIZE STATE       TYPE     TOTAL_MB    FREE_MB HOT_USED_MB COLD_USED_MB REQUIRED_MIRROR_FREE_MB USABLE_FILE_MB OFFLINE_DISKS COMPATIBILITY    DATABASE_COMPATIBILITY    V
------------ ----------- ----------- ---------- -------------------- ----------- ------ ---------- ---------- ----------- ------------ ----------------------- -------------- ------------- ---------------- ------------------------ --
           1 ARCH        512       4096              1048576         MOUNTED     EXTERN     409576     397209           0        12367                       0         397209             0       11.2.0.0.0               10.1.0.0.0  N    
           2 DATA        512       4096              1048576         MOUNTED     EXTERN     255980       3679           0       252301                       0           3679             0       11.2.0.0.0               10.1.0.0.0  N    

alter diskgroup DATA add disk 'ORCL:DISK14';

Diskgroup altered.

Sprawdzamy czy rebelancing działa prawidłowo.

select * from v$asm_operation;

GROUP_NUMBER OPERA STAT      POWER     ACTUAL      SOFAR   EST_WORK   EST_RATE EST_MINUTES ERROR_CODE
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- ----------- --------------------------------------------
           2 REBAL RUN           5          5       2079      58672       6159           9

Sprawdzamy czy dodał się nam plik do grupy dyskowej +DATA

select GROUP_NUMBER, NAME, TOTAL_MB, FREE_MB from v$asm_diskgroup;
select GROUP_NUMBER, HEADER_STATUS, TOTAL_MB, FREE_MB,NAME, LABEL, PATH from v$asm_disk order by GROUP_NUMBER, HEADER_STATUS, NAME,LABEL;

GROUP_NUMBER NAME                   TOTAL_MB    FREE_MB
------------ -------------------- ---------- ----------
           1 ACFS                      69044      10571
           2 DATA                     828528     138492
           3 OCR                       17262      16867
           4 REZERWA                   69044      68951  - było 140044


GROUP_NUMBER HEADER_STATU   TOTAL_MB    FREE_MB NAME                 LABEL      PATH
------------ ------------ ---------- ---------- -------------------- ---------- ---------------------------------------------
           1 MEMBER            69044      10571 DISK1B               DISK1B     ORCL:DISK1B
           2 MEMBER            69044       6615 DISK10               DISK10     ORCL:DISK10
           2 MEMBER            69044       6618 DISK11               DISK11     ORCL:DISK11
           2 MEMBER            69044       6616 DISK12               DISK12     ORCL:DISK12
           2 MEMBER            69044       6629 DISK13               DISK13     ORCL:DISK13
           2 MEMBER            69044      65699 DISK14               DISK14     ORCL:DISK14
           2 MEMBER            69044       6615 DISK1C               DISK1C     ORCL:DISK1C
           2 MEMBER            69044       6618 DISK1D               DISK1D     ORCL:DISK1D
           2 MEMBER            69044       6616 DISK5                DISK5      ORCL:DISK5
           2 MEMBER            69044       6619 DISK6                DISK6      ORCL:DISK6
           2 MEMBER            69044       6617 DISK7                DISK7      ORCL:DISK7
           2 MEMBER            69044       6617 DISK8                DISK8      ORCL:DISK8
           2 MEMBER            69044       6613 DISK9                DISK9      ORCL:DISK9
           3 MEMBER            17262      16867 DISK1H               DISK1H     ORCL:DISK1H
           4 MEMBER            69044      68951 DISK15               DISK15     ORCL:DISK15

15 rows selected.

Niedługo omówię przypadek co zrobić gdy brakuje miejsca w rezerwie lub samej rezerwy 🙂

Ten wpis został opublikowany w kategorii Oracle i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz