با نصب کلاستر به صورت standard ASM(روش رایج در نسخه 11g)، هر نود شامل یک ASM instance و یک db instance خواهد بود که با افتادن ASM instance در یک نود، db instance موجود در ان نود هم به خطا برخواهد خورد و امکان استفاده از ASM instanceهای دیگر برای این db instance ممکن نخواهد بود به عبارت دیگر، هر db instance تنها به ASM instance موجود در سرورش متکی می باشد. در اوراکل 12c ویژگی ای ارائه شد که می تواند این نقصان را برطرف کند، این ویژگی FLEX ASM نام دارد و می توان به کمک ان، همه نودهای موجود در فضای کلاستر را تنها به اعتبار یک ASM instance سرپا نگه داشت البته این ویژگی مزیتهای دیگری هم به همراه دارد که به تعدادی از انها در این نوشتار خواهیم پرداخت.
دو شکل زیر تفاوت بین FLEX ASM و STANDARD ASM را به طور خیلی ساده نشان می دهند که در شکل دوم، با فرض فقدان ASM instance بر روی نود اول، db1 کماکان مشغول به سرویس دهی می باشد:
—STANDARD ASM
–FLEX ASM
این ویژگی، از اوراکل 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
مقاله بسیار خوبی بود. ممنون استاد
بسیار عالی بود آقای یوسف زاده عزیز
سلام …واقعا عالی بود…متشکرم