FLEX ASM

با نصب کلاستر به صورت standard ASM(روش رایج در نسخه 11g)، هر نود شامل یک ASM instance و یک db instance خواهد بود که با افتادن ASM instance در یک نود، db instance موجود در ان نود هم به خطا برخواهد خورد و امکان استفاده از ASM instanceهای دیگر برای این db instance ممکن نخواهد بود به عبارت دیگر، هر db instance تنها به ASM instance موجود در سرورش متکی می باشد. در اوراکل 12c ویژگی ای ارائه شد که می تواند این نقصان را برطرف کند، این ویژگی FLEX ASM نام دارد و می توان به کمک ان، همه نودهای موجود در فضای کلاستر را تنها به اعتبار یک ASM instance سرپا نگه داشت البته این ویژگی مزیتهای دیگری هم به همراه دارد که به تعدادی از انها در این نوشتار خواهیم پرداخت.

 

این ویژگی، از اوراکل 12CR2 به صورت اتوماتیک فعال می باشد(در محیط RAC) و تنها قسمتی که می توان اثری از این ویژگی در زمان نصب پیدا کرد، در حین تعیین افزونگی دیسک گروه می باشد:

البته حتی اگر در این قسمت، نوع افزونگی FLEX انتخاب نشود، باز هم این ویژگی همراه با نصب گرید، فعال می شود و قابل استفاده می باشد تنها با این تفاوت که دیگر نمی توان از دیگر ویژگی های FLEX ASM از قبیل سهمیه بندی برای دیسک گروه جاری استفاده کرد. همانطور که تصویر ASMCA در قسمت زیر نشان می دهد، ویژگی سهمیه بندی برای دیسک گروه مورد نظر غیرفعال خواهد شد:

البته بعد از اتمام نصب گرید، می توان افزونگی دیسک گروه های جدید را به صورت FLEX تنظیم کرد تا از این ویژگی ها هم بهرمند شد. برای بررسی اینکه آیا ASM جاری از ویژگی FLEX برخوردار می باشد یا نه، دستور زیر قابل استفاده می باشد:

ASMCMD [+] > showclustermode

ASM cluster : Flex mode enabled

یکی از دستوراتی که در این نوشتار از ان به کررات استفاده شده است، دستور lsct می باشد که کلاینتهای متصل به ASM instance را نشان می دهد:

ASMCMD [+] > lsct

DB_            Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

+APX         CONNECTED        12.2.0.1.0                           12.2.0.1.0                     +APX2                        FLEX     

+ASM        CONNECTED        12.2.0.1.0                           12.2.0.1.0                     +ASM2                        FLEX     

+ASM        CONNECTED        12.2.0.1.0                           12.2.0.1.0                     +ASM2                        OCRVOTE  

_mgmtdb  CONNECTED        12.2.0.1.0                         12.2.0.0.0                     -MGMTDB                      OCRVOTE  

_OCR         CONNECTED                 –                               –                                 rac2                           OCRVOTE  

usefdb      CONNECTED        12.2.0.1.0                           12.2.0.0.0                     usefdb2                       FLEX   

منظور از کلاینت در اینجا، بانکهایی(و یا ACFS و ADVM) هستند که به asm instance متصل می باشند که در دستور بالا، به +ASM2، 6 کلاینت متصل می باشند. البته برای مشاهده جزییات کلاینتها، می توان از ویوی v$asm_client هم استفاده کرد:

SELECT instance_name, db_name, status FROM V$ASM_CLIENT;

قبل از استفاده از ویژگی FLEX ASM، باید عدم پشتیبانی این ویژگی از بانکهای با نسخه قبل از 12c را در نظر داشت به این معنی که اگر بانک اطلاعاتی، نسخه ای قبل تر 12c را دارا باشد، نمی تواند با افتادن ASM instance، به ASM instance نودهای دیگری متصل شود.

نکته 1: در مورد نحوه اتصال کلاینتها به ASM instance به صورت از راه دور، در قسمت ASM network مطالبی مطرح خواهد شد.

نکته 2: مبحث FLEX cluster را نباید با مبحث FLEX ASM خلط کرد. در این نوشتار تنها به FLEX ASM خواهیم پرداخت.

در ادامه سناریویی را خواهید دید که روشن می سازد چگونه FLEX ASM مانع از اختلال در سرویس دهی یک نود می شود. در این سناریو، کلاستر تنها شامل دو نود می باشد:

[grid@rac1 ~]$ srvctl status database -db usefdb

Instance usefdb1 is running on node rac1

Instance usefdb2 is running on node rac2

و متعاقب ان تنها دو ASM instance در کلاستر موجود هستند:

[grid@rac1 ~]$ srvctl status asm

ASM is running on rac2,rac1

فرضا(با حذف کلاینتهای نامرتبط به بحث)، تنها کلاینت متصل به +ASM1، مشخصات زیر را دارد:

 [grid@rac1 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

usefdb   CONNECTED        12.2.0.1.0          12.2.0.0.0  usefdb1        FLEX     

و همچنین usefdb2 به +ASM2 متصل می باشد:

[grid@rac2 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

usefdb   CONNECTED        12.2.0.1.0          12.2.0.0.0  usefdb2        FLEX     

خلاصه انکه، دو db instance در کلاستر وجود دارند که یکی به +ASM1 و دیگری هم به +ASM2 متصل می باشد همچنین ویژگی FLEX ASM هم برای انها فعال شده است:

[grid@rac2 ~]$ asmcmd showclustermode

ASM cluster : Flex mode enabled

حال اگر به هر دلیلی +ASM1 از مدار خارج شود، وضیعت usefdb1 چه خواهد شد؟؟ برای پاسخ به این سوال، به +ASM1 وصل شده، و ان را خاموش می کنیم:

[grid@rac1 ~]$ sqlplus “/as sysasm”

SQL*Plus: Release 12.2.0.1.0 Production on Wed Nov 8 08:47:24 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production

SQL> shut abort

ASM instance shutdown

با مشاهده alert log موجود در usefdb1، خواهیم فهمید که این db instance، به +ASM2 متصل شده و امکان ادامه سرویس دهی برای ان وجود دارد:

2017-11-08T08:47:28.858741+03:30

NOTE: ASMB0 registering with ASM instance as Flex client 0x10000 (reg:4007262804) (reconnect)

2017-11-08T08:47:29.974177+03:30

NOTE: ASMB0 (26863) connected to ASM instance +ASM2, osid: 14052 (Flex mode; client id 0x10000)

دستور زیر هم موید این نکته می باشد:

[grid@rac2 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

usefdb   CONNECTED        12.2.0.1.0          12.2.0.0.0  usefdb1        FLEX     

usefdb   CONNECTED        12.2.0.1.0          12.2.0.0.0  usefdb2        FLEX     

با این مثال نقش FLEX ASM و اثر ان در صورت افتادن هر کدام از ASM instanceها مشاهده شد حال اگر در همین وضیعت، +ASM1 دوباره راه اندازی شود، تکلیف usefdb1 چه خواهد شد؟؟

[grid@rac1 ~]$ sqlplus “/as sysasm”

SQL*Plus: Release 12.2.0.1.0 Production on Wed Nov 8 09:34:04 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup

ASM instance started

Total System Global Area 1140850688 bytes

Fixed Size                  8629704 bytes

Variable Size            1107055160 bytes

ASM Cache                  25165824 bytes

ASM diskgroups mounted

با نگاهی به alert log مربوط به این db instance، درخواهیم یافت که این سرویس بانک موجود در این نود مجددا به +ASM1 متصل خواهد شد:

2017-11-08T09:03:01.406129+03:30

NOTE: ASMB0 (26863) connected to ASM instance +ASM1, osid: 5547 (Flex mode; client id 0x10000)

دستور lsct هم این مطلب را تایید می کند:

[grid@rac1 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

usefdb   CONNECTED        12.2.0.1.0          12.2.0.0.0  usefdb1        FLEX     

برای اتصال یک db instance به یک ASM instance خاص(به صورت دستی) می توان از دستور srvctl update instance استفاده کرد: 

[oracle@rac1 ~]$  srvctl update instance -db usefdb -instance usefdb1 -targetinstance +asm2

با این دستور، usefdb1 به +ASM2 متصل می شود. حال اگر از تصمیم خود منصرف شده باشیم، می توانیم به + ASM2 وصل شده و دستور زیر را وارد کنیم:

[grid@rac2 ~]$ sqlplus “/as sysasm”

SQL>ALTER SYSTEM RELOCATE CLIENT ‘usefdb1:usefdb’;

در این صورت، usefdb1 مجددا به +ASM1 متصل خواهد شد:

 [grid@rac1 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

usefdb   CONNECTED        12.2.0.1.0          12.2.0.0.0  usefdb1        FLEX    

نکته 3: با کمک ویژگی FLEX ASM، می توان عددی را به عنوان مقدار کاردینالیتی تعیین کرد تا تنها به ان تعداد از asm instanceها به صورت خودکار استارت شوند و لزومی به اجرای مابقی asm instanceها نباشد. مقدار پیش فرض کاردینالیتی برابر با 3 می باشد و این مقدار با کمک دستور srvctl modify asm قابل تغییر می باشد:

[grid@rac1 ~]$ srvctl modify asm –count 2

برای مشاهده مقدار جاری، از دستور زیر استفاده می شود:

[grid@rac1 ~]$ srvctl status asm –detail

در صورتی که یکی از نودهای در حال سرویس دهی به هر دلیلی از کار بیفتد، نود دیگری که به دلیل عدد کاردینالیتی، موفق به اجرا نشده بود، به جای این نود وارد مدار خواهد شد.

ASM NETWORK

همانطور که می دانید در هنگام نصب کلاستر وجود دو کارت شبکه public و private اجباری می باشد در نسخه 12c و در زمانی که از ASM برای فضای اشتراکی در کلاستر استفاده می شود، علاوه به این دو کارت شبکه، از NETWORK ASM  هم استفاده می شود که این کارت شبکه برای برقراری ارتباط بین کلاینتها(به ان معنی که گفته شد) و ASM instance به کار می رود بعبارتی دیگر، ASM network سبب می شود تا هر کلاینت بتواند به چندین ASM instance دسترسی داشته باشد. در زمان نصب گرید، برای ASM network هم می توان از کارت شبکه مجزایی استفاده کرد و یا می توان ان را بر روی کارت شبکه private سوار کرد منتها برای رعایت مسائل امنیتی، نباید ان بر روی کارت شبکه public قرار داد. تصویر زیر مرحله ای از نصب گرید را نشان می دهد که  می توان در این مرحله، کارت شبکه مربوط بهASM  را مشخص کرد:

همچنین بعد از نصب گرید، می توان قرارگیری cluster_interconnect و asm را بر روی یک کارت شبکه مشاهده کرد(به شرطی که کارت شبکه مجزایی برای ان تعریف نشده باشد):

 [grid@rac1 ~]$ oifcfg getif

enp2s0f0  10.32.155.0  global  public

enp2s0f1  120.1.155.0  global  cluster_interconnect,asm

البته اگر این کارت شبکه جدا در نظر گرفته شود، نتیجه پرس و جو متفاوت خواهد بود:

[grid@rac1 ~]$ oifcfg getif

enp0s3  192.168.56.0  global  public

enp0s8  120.1.56.0  global  cluster_interconnect

enp0s9  120.2.56.0  global  asm

همراه با ارائه ASM network در اوراکل 12c، listener جدیدی هم با نام ASMNET1LSNR_ASM ایجاد می شود که از پورتی چون 1526 استفاده می کند و در صورتی که قرار باشد کلاینتی به صورت از راه دور با یک ASM instance در ارتباط باشد، از این listener استفاده می کند. در زمان نصب کلاستر، با رجوع به لاگ مربوط به ان، اضافه شدن این لیسنر قابل مشاهده می باشد:

2017-11-11 14:30:48: add asm listeners

2017-11-11 14:30:48: Invoking “/grid/12c/bin/srvctl add listener -asmlistener -listener asmnet1lsnr -subnet 120.1.155.0”

2017-11-11 14:30:48: Running as user grid: /grid/12c/bin/srvctl add listener -asmlistener -listener asmnet1lsnr -subnet 120.1.155.0

2017-11-11 14:30:48: s_run_as_user2: Running /bin/su grid -c ‘ echo CLSRSC_START; /grid/12c/bin/srvctl add listener -asmlistener -listener asmnet1lsnr -subnet 120.1.155.0 ‘

2017-11-11 14:30:50: /bin/su successfully executed

2017-11-11 14:30:50: ASM Listener asmnet1lsnr created

برای مشاهده این listener، کافیست از دستور زیر استفاده شود:

[grid@rac1 ~]$ srvctl config asm

ASM home: <CRS home>

Password file: +nonflex/orapwASM

Backup of Password file:

ASM listener: LISTENER

ASM instance count: 3

Cluster ASM listener: ASMNET1LSNR_ASM

همچنین دستور زیر نشان می دهد که پورت 1526 اماده سرویس دهی برای این listener می باشد:

[grid@rac1 ~]$ netstat -nltp|grep 1526

tcp        0      0 120.1.155.4:1526        0.0.0.0:*   LISTEN      31440/tnslsnr

وضیعت جاری ASMNET1LSNR_ASM با دستور lsnrctl status قابل مشاهده می باشد:

[grid@rac1 ~]$ lsnrctl status  ASMNET1LSNR_ASM

LSNRCTL for Linux: Version 12.2.0.1.0 – Production on 11-NOV-2017 14:53:02

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=ASMNET1LSNR_ASM)))

STATUS of the LISTENER

————————

Alias                     ASMNET1LSNR_ASM

Version                   TNSLSNR for Linux: Version 12.2.0.1.0 – Production

Start Date                11-NOV-2017 14:30:52

Uptime                    0 days 0 hr. 22 min. 11 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /grid/12c/network/admin/listener.ora

Listener Log File         /grid/base/diag/tnslsnr/rac1/asmnet1lsnr_asm/alert/log.xml

Listening Endpoints Summary…

  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=ASMNET1LSNR_ASM)))

  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=120.1.155.4)(PORT=1526)))

Services Summary…

Service “+ASM” has 2 instance(s).

  Instance “+ASM1”, status READY, has 2 handler(s) for this service…

  Instance “+ASM2”, status READY, has 1 handler(s) for this service…

Service “+ASM_NONFLEX” has 2 instance(s).

  Instance “+ASM1”, status READY, has 2 handler(s) for this service…

  Instance “+ASM2”, status READY, has 1 handler(s) for this service…

The command completed successfully

QUOTA GROUP در FLEX ASM

در صورت نگهداری چندین بانک اطلاعاتی در یک دیسک گروه، ممکن است مدیر این بانکهای اطلاعاتی قصد داشته باشد تا به هر کدام از این بانکها، سهمیه مشخصی از فضای دیسک گروه را تخصیص دهد ویژگی FLEX ASM این قابلیت را به مدیر بانک اطلاعاتی خواهد داد تا با کمک ان، سهمیه بندی مورد نظر را انجام دهد البته این سهمیه بندی نه تنها در سطح بانک اطلاعاتی بلکه در سطح یک PDB هم قابل انجام می باشد.

سهمیه بندی هم از طریق دستور و هم از طریق asmca قابل انجام می باشد و ساختار ان به این صورت است که ابتدا باید یک quota group(QG) ایجاد شود و در ان محدودیت فضا را مشخص نمود و بعد از ان file groupای را ایجاد کرد(و یا از file groupهای پیش فرض استفاده کرد) و file group را به QG انتقال داد.

در ادامه نحوه انجام این کار را به دو طریق نشان خواهیم داد.

سهمیه بندی با کمک asmca

در این قسمت با کمک asmca، ابتدا quota group را اضافه می کنیم و در سطح PDB سهمیه بندی فضا خواهیم داشت. تصویر زیر نحوه افزودن QG را نشان می دهد:

 

 

در تصویر بعدی، گروهی با نام grp1 ایجاد می کنیم و محدودیت فضای مصرفی ان را به دو گیگابایت تنظیم می کنیم:

همانطور که تصویر زیر نشان می دهد، دو quota group بر روی دیسک گروه FLEX وجود دارند که نام یکی GENRIC می باشد و هیچ محدودیت فضایی بر روی ان اعمال نشده و به صورت خودکار با نصب ASM ایجاد شده است و دیگری GRP1 می باشد که محدودیت دو گیگابایتی دارد.

فرض کنید قصد داریم PDB1 را به QGای که ایجاد کردیم انتقال دهیم تا این PDB نتواند بیشتر از 2G از دیسک گروه FLEX فضا بگیرد، این کار با راست کلیک مجدد بر روی دیسک گروه و نیز انتخابmove file group قابل انجام می باشد:

در این صورت، ORCLPDB1 تنها می تواند 2G از فضای دیسک گروه FLEX را به خود اختصاص دهد حال اگر بخواهد بیشتر از این سهمیه تعیین شده، فضا مصرف کند، با خطا مواجه خواهد شد.

برای مثال با دستور زیر، یکی از دیتافایلهای PDB1 را به مقداری بیش از دو گیگابایت افزایش می دهیم، تا اثر این سهمیه بندی را بررسی کنیم:

SQL> alter database datafile 14 resize 25g;

ORA-01237: cannot extend datafile 14

ORA-01110: data file 14:

‘+FLEX/USEFDB/5DC60741D809789FE053049B200AD9F7/DATAFILE/users.278.959861131’

ORA-17505: ksfdrsz:1 Failed to resize file to size 3276800 blocks

ORA-15437: Not enough quota available in quota group GRP1.

همانطور که می بیند، این محدودیت(grp1) مانع از افزایش فضای دیتافایل شد. با تغییر quota group به GENRIC برای PDB1 این محدودیت برداشته می شود و دیتافایل مورد نظر، resize خواهد شد.

سهمیه بندی با کمک دستور

سهمیه بندی با کمک دستور، با استفاده از sqlplus و asmcmd قابل انجام می باشد که در ادامه با کمک asmcmd نحوه سهمیه بندی را نشان خواهیم داد. در این محیط چندین دستور در زمینه سهمیه بندی وجود دارند که نام هر کدام از این دستورها، به عبارت qg ختم می شوند در ادامه با نام و عملکرد هر کدام از انها اشنا خواهیم شد:

chqg, lsqg, mkqg, mvfg, rmqg

دستور mkqg برای ایجاد quota group استفاده می شود:

ASMCMD [+] > mkqg -G FLEX QG_PDB quota 3G

Diskgroup altered.

دستور lsqg لیست quota groupهای موجود را نشان می دهد(ویوی v$asm_quotagroup هم چنین کاربردی دارد):

ASMCMD [+] > lsqg

Group_Num  Quotagroup_Num  Quotagroup_Name  Incarnation  Used_Quota_MB  Quota_Limit_MB 

1          1               GENERIC           1                                                                  18108                   0              

1          2               GRP1                 1                                                                    0                      2048           

1          3               QG_PDB2         1                                                                       0                      2048 

1          4               QG_PDB           1                                                                   0                       3072           

در صورتی که بخواهیم سهمیه یک QG را تغییر دهیم، می توانیم از دستور chqg استفاده کنیم:

ASMCMD [+] > chqg -G FLEX QG_PDB quota 4G

Diskgroup altered.

برای مشاهده لیست file groupها، از دستور lsfg استفاده می شود(از ویوی v$asm_filegroup هم می توان برای این منظور استفاده کرد):

ASMCMD [+] > lsfg

File Group         Disk Group            Quota Group  Used Quota MB  Client Name                     Client Type 

DEFAULT_FILEGROUP       FLEX        GENERIC      0                                           

USEFDB_CDB$ROOT          FLEX        GENERIC      5064           USEFDB_CDB$ROOT              DATABASE    

USEFDB_PDB$SEED            FLEX        GENERIC      1512           USEFDB_PDB$SEED               DATABASE    

ORCLPDB1                       FLEX        GENERIC      1776           ORCLPDB1                          DATABASE     

ORCLPDB2                        FLEX        GENERIC      1776           ORCLPDB2                         DATABASE    

ORCLPDB3                       FLEX        GENERIC      1776           ORCLPDB3                       DATABASE    

FILEGRP1                          FLEX        GENERIC      0                    1                                 DATABASE    

ACFS_MNT                        FLEX        GENERIC      6204           ACFS_MNT                         VOLUME 

همچنین برای تعیین خصوصیات دیگر از قبیل سطح redundancy می توانیم از دستور زیر استفاده کنیم:

ASMCMD [+] > lsfg –filegroup ORCLPDB3

حال قصد داریم QG مربوط به ORCLPDB3 را از GENRIC به QG_PDB تغییر دهیم برای این کار از دستور mvfg کمک می گیریم:

ASMCMD [+] > mvfg -G FLEX –filegroup ORCLPDB3 QG_PDB

Diskgroup altered.

با رجوع مجدد به لیست file groupها، خواهیم دید که ORCLPDB3 به QG_PDB منتقل شده است:

ASMCMD [+] > lsfg

File Group         Disk             Group  Quota Group  Used Quota MB  Client Name                    Client Type 

DEFAULT_FILEGROUP       FLEX        GENERIC      0                                           

USEFDB_CDB$ROOT          FLEX        GENERIC      5064           USEFDB_CDB$ROOT                   DATABASE    

USEFDB_PDB$SEED            FLEX        GENERIC      1512           USEFDB_PDB$SEED                    DATABASE    

ORCLPDB1                       FLEX        GENERIC      1776           ORCLPDB1                               DATABASE    

ORCLPDB2                       FLEX        GENERIC      1776           ORCLPDB2                               DATABASE    

ORCLPDB3                      FLEX        QG_PDB       1776        ORCLPDB3                              DATABASE    

FILEGRP1                        FLEX        GENERIC       0                            1                              DATABASE    

ACFS_MNT                      FLEX        GENERIC      6204           ACFS_MNT                               VOLUME   

دستور rmqg برای حذف QG استفاده می شود که در این مثال، با توجه به اینکه PDB3 به QG_PDB وابسته است، با دستور rmqg، حذف این QG شدنی نخواهد بود:

ASMCMD [+] > rmqg -G FLEX QG_PDB

ORA-15032: not all alterations performed

ORA-15438: Quota group QG_PDB has one or more file groups associated. (DBD ERROR: OCIStmtExecute)

 

تغییر خصوصیات فایلها بر اساس file group

با کمک ویژگی FLEX ASM، می توان خصوصیات فایلهای موجود در file groupها را تغییر داد. برای مشاهده خصوصیاتهای فایلها، می توان از دستور lsfg استفاده کرد:

ASMCMD [+] > lsfg -G FLEX –filegroup FILEGRP1

File Group  Disk Group  Property                                   Value              File Type                 

GRPPDB2     FLEX                 PRIORITY                              MEDIUM                            

GRPPDB2     FLEX                 STRIPING                              COARSE         CONTAINER                 

GRPPDB2     FLEX                 STRIPING                              FINE             CONTROLFILE               

GRPPDB2     FLEX                 REDUNDANCY                        MIRROR        DATAFILE                   

GRPPDB2     FLEX                 STRIPING                              COARSE        DATAFILE                  

GRPPDB2     FLEX                 REDUNDANCY                        MIRROR        ONLINELOG                 

GRPPDB2     FLEX                 STRIPING                              COARSE        ONLINELOG                 

برای تغییر خصوصیت فایلها در دیسک گروه بر اساس file group، ابتدا باید file groupای را ایجاد کرد و سپس فایلهای مورد نظر را در یک فایل گروه قرار داد و در نهایت برای خصوصیات انها تصمیم گرفت. برای این کار، ابتدا با کمک دستور mkfg، یک فایل گروه با نام grppdb2 ایجاد می کنیم که شامل فایلهای PDB2 می باشد و سپس با استفاده از دستور chfg خصوصیات مربوط به دیتافایل ان را تغییر می دهیم:

ASMCMD [+] > mkfg ‘<filegroup name=”grppdb2″ dg=”FLEX” client_type=”database” client_name=”ORCLPDB2″></filegroup>’

در دستور زیر، خصوصیت redundancy دیتافایلهای موجود در grppdb2 از MIRROR به HIGH تغییر می کند:

ASMCMD [+] > chfg ‘<filegroup name=”grppdb2″ dg=”FLEX”> <p name=”redundancy” value=”HIGH” file_type=”DATAFILE”/>   </filegroup>’

همچنین می توان سطح افزونگی را از HIGH به unprotected تغییر داد:

ASMCMD [+] > chfg ‘<filegroup name=”grppdb2” dg=”FLEX”> <p name=”redundancy” value=”unprotected” file_type=”DATAFILE“/>   </filegroup>’

همچنین با دستور زیر، نوع STRIPING مربوط به دیتافایل را از COARSE به FINE تغییر می دهیم:

ASMCMD [+] > chfg ‘<filegroup name=”grppdb2″ dg=”FLEX”> <p name=”STRIPING” value=”FINE” file_type=”DATAFILE”/>   </filegroup>’

نکته: برای مشاهده شکل sqlplusای دستورات ASMCMD، می توان از alert_+ASM1.log استفاده کرد. معادل دستورات استفاده شده در asmcmd، در این فایل ثبت می شود. مثال:

tail -n 1000 /grid/base/diag/asm/+asm/+ASM1/trace/alert_+ASM1.log

2017-11-14T16:11:54.376983+03:30

SQL> /* ASMCMD */ALTER DISKGROUP FLEX ADD QUOTAGROUP QG_PDB SET quota = 3G

2017-11-14T16:15:54.639423+03:30

SQL> /* ASMCMD */ALTER DISKGROUP FLEX MODIFY QUOTAGROUP QG_PDB SET quota = 4G

2017-11-14T16:25:50.287502+03:30

SQL> /* ASMCMD */ALTER DISKGROUP FLEX MOVE FILEGROUP ORCLPDB3 TO QG_PDB

2017-11-14T16:30:24.320326+03:30

SQL> /* ASMCMD */ALTER DISKGROUP FLEX DROP QUOTAGROUP QG_PDB

2017-11-15T12:18:45.583972+03:30

SQL> /* ASMCMD */ALTER DISKGROUP FLEX MODIFY FILEGROUP GRPPDB2 SET ‘DATAFILE.REDUNDANCY’ = ‘HIGH’

2017-11-15T12:28:38.795665+03:30

SQL> /* ASMCMD */ALTER DISKGROUP FLEX MODIFY FILEGROUP GRPPDB2 SET ‘DATAFILE.STRIPING’ = ‘FINE’

ASM proxy و FLEX ASM

با نگاهی به ساختار سیستم فایل ACFS پی خواهیم برد که حیات و ممات این سیستم فایل به ASM وابسته است طوری که با اختلال در instance ASM ، ACFS هم از کار خواهد افتاد با این نگاه، ویژگی FLEX ASM علاوه بر سرویس بانک اطلاعاتی، می تواند برای این موضوع هم سودمند باشد که در ادامه نکاتی را در این مورد مطرح خواهیم کرد.

اگر در محیط کلاستر، از سیستم فایل ACFS استفاده شود(در نسخه 12c منظور است)، خواهیم دید که instance جدیدی به نام ASMPROXY و یا APX بر روی سرور اجرا می شود که با هر گونه اختلالی در ان، فضاهای مونت شده مربوط به سیستم فایل ACFS هم دچار مشکل خواهند شد بعبارتی دیگر، هر گونه فراداده(MetaData) مربوط به ACFS، به جای قرارگیری در ASM instance، در این instance قرار خواهند گرفت. ASMPROXY  معمولا ORACLE_SIDای چون +APX<node number> خواهد داشت و وضیعت جاری ان با کمک دستور زیر قابل بررسی می باشد:

[grid@rac1 ~]$  crsctl stat res ora.proxy_advm

NAME=ora.proxy_advm

TYPE=ora.proxy_advm.type

TARGET=ONLINE         , ONLINE

STATE=ONLINE on rac1, ONLINE on rac2

[grid@rac1 ~]$ srvctl status asm -proxy

ADVM proxy is running on node rac2,rac1

همچنین این instance به عنوان یک کلاینت به +ASM متصل می باشد:

 [grid@rac1 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

+APX     CONNECTED        12.2.0.1.0          12.2.0.1.0  +APX1          FLEX     

+ASM     CONNECTED        12.2.0.1.0          12.2.0.1.0  +ASM1          FLEX     

+ASM     CONNECTED        12.2.0.1.0          12.2.0.1.0  +ASM1          OCRVOTE  

_mgmtdb  CONNECTED        12.2.0.1.0          12.2.0.0.0  -MGMTDB        OCRVOTE  

_OCR     CONNECTED                 –                   –  rac1          OCRVOTE  

usefdb   CONNECTED        12.2.0.1.0          12.2.0.0.0  usefdb1        FLEX     

طبیعتا با از کار افتادن +ASM1، +APX1 هم باید از کار بیفتد ولی نتیجه تست زیر، خلاف این مطلب را می رساند:

[grid@rac1 ~]$ ps -eaf|grep pmon

grid     12211     1  0 11:33 ?        00:00:00 asm_pmon_+ASM1

grid     15407     1  0 11:34 ?        00:00:00 apx_pmon_+APX1

oracle   15660     1  0 11:34 ?        00:00:00 ora_pmon_usefdb1

 [grid@rac1 ~]$ kill -9 12211

 [grid@rac1 ~]$ ps -eaf|grep pmon

grid     15407     1  0 11:34 ?        00:00:00 apx_pmon_+APX1

oracle   15660     1  0 11:34 ?        00:00:00 ora_pmon_usefdb1

grid     31349 20312  0 12:11 pts/0    00:00:00 grep –color=auto pmon

همانطور که می بینید، با افتادن +ASM1، +APX1 کماکان به کار خود ادامه می دهد!!! با رجوعی به نود دوم این کلاستر درخواهیم یافت که +APX1، به +ASM2 متصل شده است:

[grid@rac2 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

+APX     CONNECTED        12.2.0.1.0          12.2.0.1.0  +APX1          FLEX     

+APX     CONNECTED        12.2.0.1.0          12.2.0.1.0  +APX2          FLEX     

این مثال نشان می دهد که ویژگی FLEX ASM در این زمینه هم کاربرد دارد و مانع از افتادن APX خواهد شد. شکل زیر را ببینید:

نکته 1: پارامتر instance_type در ASMPROXY instance به ASMPROXY تنظیم شده است:

su – grid

[grid@rac1 ~]$ export ORACLE_SID=+APX1

[grid@rac1 ~]$ sqlplus “/as sysasm”

SQL*Plus: Release 12.2.0.1.0 Production on Mon Nov 13 10:41:28 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production

SQL> show parameter instance_type

instance_type     ASMPROXY

نکته 2: برای راه اندازی مجدد یک ASMPROXY instance می توانیم طریق زیر را طی کنیم:

[grid@rac1 ~]$ export ORACLE_SID=+APX1

[grid@rac1 ~]$ asmcmd shutdown –abort

Proxy instance closed.

 [grid@rac1 ~]$ asmcmd startup

همچنین برای mount مجدد فضای مربوطه از دستور زیر استفاده می کنیم:

/grid/12c/bin/srvctl start filesystem -d /dev/asm/acfs_mnt-502

نکته 3: لاگ مربوط به ASMPROXY را می توان در مسیر زیر یافت:

$GRID_BASE/diag/apx/+apx/+APX1/trace/alert_+APX1.log

FLEX ASM و SINGLE DATABASE

همانطور که اورده شد، FLEX ASM در محیط RAC قابل تحقق می باشد و با وجود چند ASM instance معنی پیدا می کند با این وجود اگر یک بانک اطلاعاتی به صورت single در یک محیط کلاستر شده وجود داشته باشد، کماکان می تواند از این ویژگی استفاده کند. مثال زیر را ببینید.

دستور زیر نشان می دهد، نوع بانک به صورت single می باشد و در حالت open قرار دارد:

[grid@rac1 ~]$ srvctl config database -d single

Database unique name: single

Database name: single

Oracle home: /oracle/single12c

Spfile: +NONFLEX/SINGLE/PARAMETERFILE/spfile.291.959787525

Start options: open

Stop options: immediate

Database role: PRIMARY

Type: SINGLE

Database is administrator managed

[grid@rac1 ~]$ srvctl status asm

ASM is running on rac2,rac1

[grid@rac1 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

+ASM     CONNECTED        12.2.0.1.0          12.2.0.1.0  +ASM1          NONFLEX  

single   CONNECTED        12.2.0.1.0          12.2.0.0.0  single         NONFLEX 

حال با انداختن ASM instance موجود در این نود(+ASM1)، وضیعت بانک اطلاعاتی چه خواهد شد؟؟

[grid@rac1 ~]$ sqlplus “/as sysasm”

SQL*Plus: Release 12.2.0.1.0 Production on Sat Nov 11 16:07:41 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to:

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 – 64bit Production

SQL> shut abort

ASM instance shutdown

با رجوع به alert log، خواهیم دید که single db به +ASM2 متصل شده است:

NOTE: ASMB0 registering with ASM instance as Flex client 0x10004 (reg:1480146318) (reconnect)

2017-11-11T15:51:57.455969+03:30

NOTE: ASMB0 (6780) connected to ASM instance +ASM2, osid: 30183 (Flex mode; client id 0x10004)

همچنین با اتصال به نود، این موضوع تایید می شود:

[grid@rac2 ~]$ asmcmd lsct

DB_Name  Status     Software_Version  Compatible_version  Instance_Name  Disk_Group

+ASM     CONNECTED        12.2.0.1.0          12.2.0.1.0  +ASM2          NONFLEX  

single   CONNECTED        12.2.0.1.0          12.2.0.0.0  single         NONFLEX

Comments (2)

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد.