مشاوره و پشتیبانی #پایگاه داده #هوش تجاری

ORAchk و EXAchk نسخه 12.2.0.1.3 بتا ریلیز شد

اخیراً ورژن بتایی از ORAchk 12.2.0.1.3 و EXAchk 12.2.0.1.3 ریلیز و برای دانلود در دسترس قرار داده شده

ORAchk:

https://support.oracle.com/epmos/faces/DocContentDisplay?id=1268927.2&parent=linkedin&sourceId=beta12_2_0_1_3

EXAchk:

https://support.oracle.com/epmos/faces/DocContentDisplay?id=1070954.1&parent=linkedin&sourceId=beta12_2_0_1_3

ویژگی‌های جدید:

  • آپگرید دیتابیس به 12.2 با اطمینان کامل
  • بهبود سرعت کوئری‌های SQL
  • ارسال ایمیل‌های هشدار و کنترل کننده با آنالیز دیتا
  • جلوگیری از خرابی‌ها و قطعی‌های Clusterware
  • محافظت در برابر مشکلات بحرانی در Exadataها و مشکلات دیسکهای پرسرعت Samsung NVM
  • جلوگیری از مشکلات و خرابی‌ها در file systemها و مشکلات حساس SuperClusterها

ادامه مطلب...
۰۲ ارديبهشت ۹۶ ، ۱۲:۳۴ ۰ نظر
مهدی غفاری

دستورالعمل کار با RMAN در Oracle Database 11g به روش حل مسئله

به توصیه یکی از دوستام که خیلی برام عزیزه میخوام کتاب زیر رو بخونم

دوستم بهم توصیه کرده که از اولین چیزهایی که یک DBA باید بهش مسلط باشه RMAN یا همون بک‌آپ و ریکاوری هستش

هرچی فک میکنم در حقیقت درست میگه چون از ابتدایی‌ترین کارها نصب دیتابیس و بک‌آپ و ریستور هستش

تو این سری طولانی از مطالب میخوایم تمام فصلهای کتاب زیر رو باهم مرور کنیم 

دریافت
حجم: 6.75 مگابایت

۰۷ فروردين ۹۶ ، ۱۵:۱۲ ۰ نظر
مهدی غفاری

انتقال SPFILE از file system به ASM در ORACLE RAC11g

  • ما یک رک ۲ نود داریم [rac1] و [rac2]
  • دستورات زیر رو از نود ۱ یعنی [rac1] اجرا میکنیم

مرحله اول: ساختن یک SPFILE در ASM و دیسک گروپ‌ه «RACDB_DATA+»

SQL> connect / as sysdba
SQL> show parameter spfile

NAME TYPE VALUE
------- ------- ------------------------------
spfile string /u01/app/oracle/product/11.2.0/db_1/dbs/spfileracdb11.ora

SQL> create pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initracdb11.ora' from spfile='/u01/app/oracle/product/11.2.0/db_1/dbs/spfileracdb11.ora';
#### OR Simply ####
SQL> create pfile from spfile
File created.

SQL> create spfile='+RACDB_DATA' from pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initracdb11.ora';
File created.

SQL> exit

مرحله دوم: چک کردن SPFILE در ASM

[grid@rac1 ~]$ asmcmd

ASMCMD> ls RACDB_DATA/racdb1/spfile*
spfileracdb1.ora

ASMCMD> exit

مرحله سوم: ویرایش initracdb11.ora در rac1 و initracdb12.ora در rac2 برای اشاره به مسیر جدید SPFILE در ASM

[oracle@rac1 dbs]$ echo "SPFILE='+RACDB_DATA/racdb1/spfileracdb1.ora'" > /u01/app/oracle/product/11.2.0/db_1/dbs/initracdb11.ora
[oracle@rac1 dbs]$ ssh rac2 "echo \"SPFILE='+RACDB_DATA/racdb1/spfileracdb1.ora'\" > /u01/app/oracle/product/11.2.0/db_1/dbs/initracdb12.ora"

مرحله چهارم: آپدیت OCR با مسیر جدید SPFILE

[oracle@rac1 dbs]$ srvctl modify database -d racdb1 -p +RACDB_DATA/racdb1/spfileracdb1.ora

مرحله پنجم: ویرایش اسم‌های تمام SPFILEهای موجود در ORACLE_HOME/dbs$

[oracle@rac1 dbs]$ mv /u01/app/oracle/product/11.2.0/db_1/dbs/spfileracdb11.ora /u01/app/oracle/product/11.2.0/db_1/dbs/spfileracdb11.ora_bak

[oracle@rac1 dbs]$ ssh rac2 "mv /u01/app/oracle/product/11.2.0/db_1/dbs/spfileracdb12.ora /u01/app/oracle/product/11.2.0/db_1/dbs/spfileracdb12.ora_bak"

مرحله ششم: شروع مجدد تمام Instancesها برای سوییچ به SPFILE جدید

[oracle@rac1 dbs]$ srvctl stop database -d racdb1
[oracle@rac1 dbs]$ srvctl start database -d racdb1

[oracle@rac1 dbs]$ srvctl status database -d racdb1
Instance racdb11 is running on node rac1
Instance racdb12 is running on node rac2

مرحله هفتم: اتصال به دیتابیس و چک کردن مسیر SPFILE جاری

[oracle@racdb1 dbs]$ connect / as sysdba

SQL> SHOW parameter spfile

NAME TYPE VALUE
------ ----------- ------------------------------
spfile string +RACDB_DATA/racdb1/spfileracdb 1.ora

امیدوارم مفید بوده باشه

منبع:

https://emarcel.com/moving-spfile-from-file-system-to-asm-oracle-rac11g/#

۰۶ فروردين ۹۶ ، ۰۸:۴۳ ۰ نظر
مهدی غفاری

حذف کامل Cygwin

ممکنه نیاز داشته باشیم بعد از کلی کار که توی "deploy کردن agent ویندوز با cygwin در OEM 13C" انجام دادیم Cygwin رو پاک کنیم.

خب برای اینکار setup نرم‌افزار رو اجرا کنید و تو مرحله انتخاب پکیج‌ها تیک همه پکیج‌هایی که نصب کردیم رو بردارید و next, next, finish

متاسفانه یسری فایل‌ها رو نصاب پاک نمیکنه که ما باید دستی برای حذفشون اقدام کنیم:

C:\> takeown /f C:\cygwin /r /d y
C:\> icacls C:\cygwin /t /grant everyone:F
C:\> sc \\localhost delete sshd

حالا تمام فایل‌های نصب پاک شدن. آخرین مرحله پاک کردن متغیرهای cyg_server و sshd هستش که میتونیم از مسیر زیر بهشون برسیم(مطمئن بشید به صورت مطمئن پاک بشن):

HKEY_CURRENT_USER\Software\Cygwin and HKEY_LOCAL_MACHINE\SOFTWARE\Cygwin

منبع:

http://www.carajandb.com/en/blogs/blog-swinkler-en/190-oem-12c-agent-deploy-on-windows-no-problem-with-cygwin

۰۳ فروردين ۹۶ ، ۱۳:۲۰ ۰ نظر
مهدی غفاری

نمایش کل متن sql از v$sql

خیلی وقتها که میخوایم وضعیت SQL STATEMENTهایی که یوزرها زدن رو ببینیم از ویوی V$SQL و معمولاً از کوئری‌ای شبیه زیر استفاده میکنیم:

select v.SQL_TEXT,
v.PARSING_SCHEMA_NAME,
v.FIRST_LOAD_TIME,
v.DISK_READS,
v.ROWS_PROCESSED,
v.ELAPSED_TIME,
v.service
from v$sql v
where to_date(v.FIRST_LOAD_TIME,'YYYY-MM-DD hh24:mi:ss')>ADD_MONTHS(trunc(sysdate,'MM'),-2)

نکته: WHERE تو کوئری بالا به صورت اختیاریه ولی درکل یادمون باشه میتونیم با استفاده از فیلد FIRST_LOAD_TIME رو تاریخ و زمان اجرای اون کوئری مانور بدیم تا گزارشهای بهتری داشته باشیم.

همونطور که می‌بینید ما اکثر مواقع از فیلد SQL_TEXT استفاده میکنیم ولی با توجه به اینکه میدونیم محدودیت کاراکتری VARCHAR2 دقیقا ۱۰۰۰ کاراکتره احتمالا خیلی از دستورات رو نمیتونیم به صورت کامل ببینیم

اینجاست که بهتره بدونیم V$SQL و V$SQLAREA شامل فیلدی به اسم SQL_FULLTEXT هستن که این فیلد تمام دستور SQL کاربر رو تو دیتاتایپ CLOB ذخیره میکنه پس میشه رشته‌ها رو تا حداکثر سایزی که یک STATEMENT میتونه باشه رو نشون داد(۴۰۰۰ کاراکتر) بیاین باهم ببینیم که چجوری میشه رشته‌ها رو از این فیلد استخراج کرد.

set linesize 132 pagesize 999
column sql_fulltext format a60 word_wrap
break on sql_text skip 1

select
replace(translate(sql_fulltext,'0123456789','999999999'),'9','')
SQL_FULLTEXT
from v$sql
where sql_text like '%TEXT IDENTIFIER%'
group by replace(translate(sql_fulltext,'0123456789','999999999'),'9','')
/

خروجی این دستور میتونه به این شکل باشه:

SQL_FULLTEXT 
------------------------------------------------------------ 
select /*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
... query text ...
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa */ from b

امیدوارم براتون مفید باشه

۰۱ فروردين ۹۶ ، ۱۳:۲۹ ۰ نظر
مهدی غفاری

بازیابی دیتافایل از دست رفته

فرض کنید که datafile ای به نام undotbs01.dbf را که در مسیر /oradata/orcl/ قرار دارد را به اشتباه حذف کرده ایم، در این صورت می توانیم با طی کردن سناریوی زیر، datafile را برگردانیم:

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/oradata/orcl/system01.dbf
/oradata/orcl/sysaux01.dbf
/oradata/orcl/undotbs01.dbf
/oradata/orcl/users01.dbf
/oradata/orcl/example01.dbf
/oradata/orcl/APEX_1830835646138963.dbf

6 rows selected.

ادامه مطلب...
۱۰ بهمن ۹۵ ، ۱۶:۰۲ ۰ نظر
مهدی غفاری

نحوه حذف UNDO Tablespace

خب همونطور که می‌دونید حذف کردن tablespace undo به این سادگی‌ها نیست. یه بار که میخواستم به دلایلی اینکارو انجام بدم فهمیدم که اصلاً حذف tablespace undo راحت نیست و همش با خطای زیر مواجه میشدم:

SQL> select tablespace_name,file_name from dba_data_files;

TABLESPACE_NAME                FILE_NAME
------------------------------ ---------------------------------------------------------------------
USERS                          D:\ORACLE\ORADATA\NOIDA\USERS01.DBF
UNDOTBS1                       D:\ORACLE\ORADATA\NOIDA\UNDOTBS01.DBF
SYSAUX                         D:\ORACLE\ORADATA\NOIDA\SYSAUX01.DBF
SYSTEM                         D:\ORACLE\ORADATA\NOIDA\SYSTEM01.DBF
EXAMPLE                        D:\ORACLE\ORADATA\NOIDA\EXAMPLE01.DBF

ادامه مطلب...
۰۵ بهمن ۹۵ ، ۱۴:۳۷ ۰ نظر
مهدی غفاری

تعویض پسورد SYS در محیط DataGuard

خب اگه شما پسورد کاربر SYS رو با دستور ALTER USER SYS IDENTIFIED BY NEWPASSWORD در دیتابیسprimary عوض کنید SYNC از طرف سرور Primary متوقف می‌شود و آرشیولاگهای جدید به سمت دیتابیس Standby فرستاده نمی‌شودند. در این حالت شما خطای زیر رو در فایل alertlog می‌بینید:

------------------------------------------------------------------
Check that the primary and standby are using a password file
and remote_login_passwordfile is set to SHARED or EXCLUSIVE,
and that the SYS password is same in the password files.
returning error ORA-16191
------------------------------------------------------------------

این به این دلیله که شما از دستور ALTER USER برای تعویض پسورد کاربر SYS استفاده کرده‌اید و پسورد شما هم در فایل پسورد و هم در دیتادیکشنری به درستی در سرور Primary آپدیت شده ولی در سرور Standby تغییرات اعمال نشده‌اند.

شما با دستور زیر می‌تونید پسورد SYS رو در سرور Standby آپدیت کنید:

orapwd file=$ORACLE_HOME/dbs/orapwSID password=newpassword;

فراموش نکنید که فایل قبلی رو حذف کنید (توصیه میشه فقط اسم فایل رو عوض کنید تا اگه به مشکلی خوردید بتونید از فایل قبلی استفاده کنید، من خودم آخر فایلها یه پسوند old اضافه میکنم.)

نکته: حواستون باشه اصلاً مهم نیست پسورد SYS سمت Primary رو عوض کردید یا Standby در آخر باید این پسوردها یکی باشن

۰۵ بهمن ۹۵ ، ۱۱:۰۷ ۱ نظر
مهدی غفاری

ابزار پیکربندی Oracle Database Gateway

ابزار ارائه شده برای کانفیگ Oracle Database Gateway توانایی پیکربندی سریع gateway رو داره با این ابزار می‌تونید به سادگی Gateway رو برای SQL Server، Sybase، DRDA، Informix, Teradata و ODBC کانفیگ کنید.

ادامه مطلب...
۰۳ بهمن ۹۵ ، ۱۲:۲۸ ۰ نظر
مهدی غفاری

خاموش و روشن کردن OEM 13C

خب شاید بدونید که OEM با استفاده از سرویس gcstartup استارت خودکار خود رو موقع بالا اومدن سرور میزنه. ۲ تا از مسیرهایی که برای استارت زدن استفاده میکنه تو فایل /etc/oragchomelist مشخص شده

/u01/app/oracle/product/oemfmw_13c
/u01/app/oracle/product/agent_13c/agent_13.1.0.0.0:/u01/app/oracle/product/agent_13c/agent_inst

اگه نصبتون رو به صورت simple جلو رفتید auto-start ما یه مشکل کوچیک داره، در حقیقت اگه دیتابیس OEM شما روی همون سرور OEM باشه موقع بالا اومدن سرور OEM فقط کامپوننت‌های خودش رو start میزنه و دیتابیس رو start‌ نمیکنه

شما می‌تونید این عملکرد OEM رو با گذاشتن # جلوی خطوط فایل /etc/oragchomelist (همین فایل بالا) متوقف کنید و از اسکریپتی که در ادامه میگم استفاده کنید. اگه میخواین از همین سرویس OEM استفاده کنید و کارها رو به خودش بسپارید حتماً اسکریپتی تهیه کنید که دیتابیس رو به محض بالا اومدن سرور start کنه وگرنه هر دقعه بعد از ریستارت سرور سرویسهای OEM بالا میان ولی باید دیتابیس و باقی کامپوننتها رو دستی استارت کنید. اگه دیتابیس OEM بالا نباشه به همچین خطایی بر میخورید:

یکی از راهکارها اینه که تمام سرویسهای OEM رو stop کنیم و بیایم دستی دیتابیس رو start‌ کنیم و listener رو اوکی کنیم بعد بیایم تمام کامپوننتهای OEM رو start کنیم.

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

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

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1
export OMS_HOME=/u01/app/oracle/product/oemfmw_13c
export AGENT_HOME=/u01/app/oracle/product/agent_13c/agent_inst

# Start everything
$ORACLE_HOME/bin/dbstart $ORACLE_HOME

$OMS_HOME/bin/emctl start oms

$AGENT_HOME/bin/emctl start agent

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

#!/bin/bash
export ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/db_1
export OMS_HOME=/u01/app/oracle/product/oemfmw_13c 
export AGENT_HOME=/u01/app/oracle/product/agent_13c/agent_inst # Stop everything $OMS_HOME/bin/emctl stop oms -all $AGENT_HOME/bin/emctl stop agent $ORACLE_HOME/bin/dbshut $ORACLE_HOME

۲۹ دی ۹۵ ، ۲۱:۵۵ ۰ نظر
مهدی غفاری