وبلاگ وحید نوروزی



با سلام

در محیط multitenant ، اگر تمایل دارید که پس از start شدن دیتابیس cdb ، دیتابیس های pdb تیز بصورت اتوماتیک open شوند، می توانید از trigger زیر استفاده کنید:

CREATE OR REPLACE TRIGGER open_pdbs 
  AFTER STARTUP ON DATABASE 
BEGIN 
   EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN'; 
END open_pdbs;
/

همچنین می توانیم بجای اینکه تمامی pdb ها open شوند، بخشی از آنها که مدنظر ماست را open کنیم. برای اینکار کافی است بجای all نام آنها را برده و با کاما "،" آنها را جدا کنیم.


----------------------------------------------------------------------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.


سلام. اگر پارامتر STANDBY_FILE_MANAGEMENT در استندبای برابر manual باشد، زمانی که بخواهیم در دیتابیس اصلی دیتافایلی را اضافه کنیم، این کار بصورت اتوماتیک در استندبای رخ نمی دهد و باعث از کار افتادن استندبای تا حل این موضوع خواهد شد.

File #7 added to control file as 'UNNAMED00007' because
the parameter STANDBY_FILE_MANAGEMENT is set to MANUAL
The file should be manually created to continue.
Errors with log +FRA/testdg/archivelog/2018_09_04/thread_2_seq_155.574.985946453
MRP0: Background Media Recovery terminated with error 1274
Errors in file /u01/app/oracle/diag/rdbms/testdg/testdg2/trace/testdg2_mrp0_13384.trc:
ORA-01274: cannot add datafile '+DATA/testdb/datafile/audit_tbs.275.985944109' - file could not be created
برای حل این مشکل دستور زیر را می زنیم:

alter database create datafile 7 as '+data';
Database altered.
و برای اینکه این مشکل دیگر پیش نیاید ، STANDBY_FILE_MANAGEMENT را درحالت auto  قرار می دهیم.


----------------------------------------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.




سلام. Sql loader یکی از ابزارهایی هست که سرعت بسیار بالایی در ورود اطلاعات به دیتابیس داره. بعضی اوقات فکر می کنم که بخشی از اطلاعات را از حفظ می زنه :| .

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

DATE,NUMBER_TEST,PHONE,TEXT_TEST
2018/08/23-11:10:17,121,78903456789,1_row
2018/08/24-11:11:17,131,78903256789,2_row
2018/08/22-11:12:17,141,78903456789,3_row
2018/08/27-11:13:17,151,78903456789,4_row
2018/08/24-11:14:17,161,78903456789,5_row
2018/08/29-11:15:17,171,78903456789,6_row
2018/08/21-11:20:17,181,78903456789,7_row
2018/08/24-11:30:17,191,78903356789,8_row
2018/08/20-11:40:17,101,78903436789,9_row
2018/08/24-11:50:17,111,78903456789,10_row
2018/08/22-12:10:17,121,78903456789,11_row
2018/08/21-13:10:17,131,78903456789,12_row
2018/08/13-14:10:17,141,78903453339,13_row
2018/08/14-15:10:17,161,78903456739,14_row
2018/08/25-15:11:17,171,78903456389,15_row
2018/08/29-12:10:17,181,78903453789,16_row
2018/08/21-11:10:27,191,78903456789,17_row
در sqlldr به یک فایل کنترل احتیاج داریم که اطلاعات جدول توش باشه و نحوه تبدیل داده رو بهش بگه:
[oracle@db11g-node2 ~]$ cat sqlldr.ctl
OPTIONS (
  SKIP=1,
  PARALLEL=true,
  DIRECT=true,
  SKIP_INDEX_MAINTENANCE=true
)
LOAD DATA
APPEND
INTO TABLE VAHID_TEST_SQLLDR
        FIELDS TERMINATED BY ","
        TRAILING NULLCOLS
  (
ID sequence,
DATE date  'yyyy/mm/dd,hh24:mi:ss',
NUMBER_TEST,
PHONE,
TEXT_TEST,
TEXT_CONSTANT constant 'vahidnowrouzi.blog.ir'
)
در فایل بالا چند نکته مهم هست. یک وجود خطی که sequence رو برامون میسازه. اول که خواستم شروع کنم، sequence ساختم و بصورت sequence1.nextval جلوی id قرار دادم . هر کاری که کردم نشد. (اگر کسی این روش رو تست کرده و جواب گرفته، لطفاٌ بگه که روش صحیح اون رو هم اضافه کنم) تا اینکه به لینک زیر برخوردم :

https://docs.oracle.com/cd/E11882_01/server.112/e22490/ldr_field_list.htm#SUTIL1234

توی این مطلب توضیح جامعی اومده و گفته که با ذکر کلمه sequence این امر بصورت خودکار ساخته میشه. 
مطلب دوم در فایل بالا خواندن تاریخ با فرمت مربوطه هست که می تونه به فیلدی که از نوع Date ساخته شده ، وارد بشه.
مطلب سوم مربوط میشه به اضافه کردن عبارات ثابت که در قسمت text_constant اومده.
دقت کنید که اگر csv که میخواید وارد کنید، در قسمت های که به عنوان متن هستند دارای علامت " باشند، عیناً وارد میشه.
جدولی که برای ورود این اطلاعات ساخته شده به شکل زیر هست:
CREATE  TABLE VAHID_TEST_SQLLDR
   ( "ID" NUMBER(20,0), 
"DATE" DATE, 
"NUMBER_TEST" NUMBER(3,0), 
"PHONE" VARCHAR2(20 BYTE), 
"TEXT_TEST" VARCHAR2(50),
    "TEXT_CONSTANT" VARCHAR2(50)
   );
و دستور رو بصورت زیر اجرا می کنیم:
 sqlldr vahid/vahid data=/home/oracle/sqlldr.data control=/home/oracle/sqlldr.ctl log=/home/oracle/sqlldr.log bad=/home/oracle/sqlldr.bad
قسمت log و bad فایلهایی رو ایجاد می کنند که در صورتی که مشکلی وجود داشته باشه، بر اساس اونها قابل پیگیری و حل مشکل میشن.

امیدوارم مفید واقع بشه.


--------------------------------------------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.






سلام. برای همه ما پیش اومده که مثلاً بخواهیم backup ی که گرفتیم رو با دستور scp به سرور دیگه ای انتقال بدیم. در این حین به علت قطع شدن session ممکنه تو حجم بالا، عملیات انتقال با مشکل مواجه بشه. برای این کار می توان از ارسال این دستور به background به روش زیر استفاده کرد:

nohup scp file_to_copy user@server:/path/to/copy/the/file > nohup.out 2>&1

پس از این مرحله پسورد رو وارد می کنیم و بعد ctrl+z را می زنیم. حالا دستور را با دستور bg به background می فرستیم. برای اینکه اون رو به foreground برگردونیم، می تونیم با زدن دستور jobs لیست کارهای background را ببنیم و با زدن شماره اون job روبروی دستور fg اون رو ببنیم.


منبع: http://charmyin.github.io/scp/2014/10/07/run-scp-in-background/



-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.


سلام. چند روز پیش توی لاگهای دیتابیس یکی از مشتری ها، DEADLOCK دیدم و بهشون گفتم که مشکل رو حل کنید. بعد که  بیشتر دقت کردم، دیدم که enq: TX - allocate ITL entry داره که زیر مجموعه CONFIGURATION حساب میشه. برای پیدا کردن ربط اون به deadlock باید چند تا مطلب رو مرور کنیم. 

مطلب اول. ITL:

در اوراکل زمانی که برای یک سطر lock توسط یک transaction رخ می دهد، اطلاعات مربوط به آن در header آن block ی قرار می گیرد که داده در آن است. حال زمانی که transaction دیگری می خواهد با همان row کار کند، باید باز هم به سراغ همان  block header برود و با اطلاعاتی که در حال حاضر در این قسمت موجود است ، متوجه lock بودن آن سطر می شود. بنابراین به پروسسی که در تئوری به عنوان lock manager ممکن است درست کار کند، دیگر نیازی نیست. به این ساختار داده ای ،  Interested Transaction List یا به اختصار ITL گفته می شود که در آن اطلاعات transaction و rowid نگه داری می شود. هر ITL چندین slot برای transactionها دارد. زمانی که transactionِ ی برای اولین بار به سراغ block می آید، شماره rowid در یکی از slotها قرار می گیرد. همینطور زمانی که همین transaction و یا transaction دیگری بخواهد با سطرهای این block کار کند، در slot بعدی قرار می گیرد.


مطلب دوم، initrans:

در زمان ساخت جدول، این پارامتر مشخص می کند که در ابتدا چند slot در   ITL وجود داشته باشد.


مطلب سوم، maxtrans:

زمانی که transaction جدیدی برای lock کردن سطری در همین block می آید، slot جدیدی در ITL تشکیل می شود و این تعداد تا MAXTRANS می تواند ادامه یابد.


مطلب چهارم، pctfree:

میزان درصدی که اوراکل برای هر بلاک برای update های بعدی در یک بلاک خالی می گذارد، یعنی اگر pctfree برابر 10 باشد، داده ها تا 90 درصد بلاک را پر خواهند کرد و تنها 10 درصد را برای update های بعد خالی می گذارند.


حالا ببنیم که ITL WAIT چطور پیش میاد. زمانی که در یک block نمی توان slot جدید ایجاد شود، transaction تازه ورود باید منتظر خالی شدن slot های قبلی بشود و بنابراین wait پیش می آید. یک بلاک بلافاصله بعد از بوجود آمدن به شکل زیر است:

چون initrans در ابتدا بصورت پیشفرض یک است ، بنابراین تنها یک slot در ITL وجود دارد. حالا فرض کنیم تعداد INSERT در این بلاک انجام می شود.

حالا transaction اول row1 را update می کند ولی commit نمی کند و بنابراین slot مربوط به آن باقی می ماند،

trnsaction بعدی row2 را update می کند و باز هنوز commit نکرده است. نتیجه می شود:

نتیجه این می شود که با اینکه در مثال ما maxtrans را برابر 11 در نظر گرفته ایم، جایی برای itl slot جدید نخواهد بود.


حالا به سراغ deadlock می رویم که بر اساس داکیومنت شماره 2266279.1 دلیل آن این است که transaction 1 یک ITL بر روی بلاک A دارد و یک تقاضا برای گرفتن ITL بر روی بلاک B و در همین زمان transaction 2 یک ITL بر روی بلاک B دارد و نقاضا برای گرفتن بلاک A که نتیجه deadlock می شود.


راه حل:

افزایش initrans و pctfree در جداول و ایندکسهایی که در این deadlock در گیر هستند. پیشنهاد اوراکل initrans=30 و pctfree=30% است. پس از این تغییرات باید جدول و ایندکسها را move و rebuild کرد.

نکته: دقت داشته باشید که در صورتی که بخواهید این جدول را move کنید، جدول lock خواهد شد و همچنین در زمان rebuild تعدادی متناسب با حجم ایندکس، archive log تولید می گردد. بنابراین زمان و حجم مناسب برای اینکار را انتخاب کنید.


منابع:

http://www.proligence.com/itl_waits_demystified.html

ORA-60 Deadlock 'ENQ: TX - ALLOCATE ITL ENTRY' Error - Doc ID 2266279.1

http://www.orafaq.com/wiki/PCTFREE


----------------------------------------------------------------------------------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.



سلام

یکی از کارهایی که باید چندین بار در محیط تست انجام داد و براش آماده بود، Switchover هست. هر دیتابیس می تواند یکی از دو role شامل primary و یا standby را داشته باشد. عملیات switchover به ما اجازه می دهد بدون از دست دادن داده و یا reset log نقش این دو دیتابیس را عوض کنیم.

عملیات switchover کاربردهای زیادی دارد که از آن جمله می توان به downtime از پیش تعیین شده برای نگه داری، تعمیر سخت افزار، جابجایی فیزیکی سرورها و اشاره کرد.

در این مطلب ما دو rac با نسخه 11.2.0.4 داریم. ابتدا بر روی هر کدام از دیتابیس ها، دستور زیر را برای به دست آوردن اطلاعات و نقش فعلی آنها می زنیم:

select name,open_mode,db_unique_name,switchover_status,database_role from v$database;

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

NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    READ WRITE           testdb                         TO STANDBY 
         PRIMARY
و نتیجه دیتابیس استندبای به ترتیب زیر:
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    MOUNTED              TESTDG                         NOT ALLOWED          PHYSICAL STANDBY

همانطور که در خروجی های بالا دیده می شود، نام دیتابیس ها یکی است و unique_name آنها متفاوت است. ضمناً در قسمت switchover_status تنها دیتابیس اصلی است که قابلیت تبدیل شدن به استندبای را دارد که با توجه به محتوای database_role می توان به این موضوع پی برد.
چند توصیه ایمنی قبل از شروع عملیات switchover : بهتر است قبل از شروع عملیات، برنامه های متصل به دیتابیس را قطع کرده و Session ای روی دیتابیس از این طریق نباشد. پس از این کار چندین بار Switch logfile می کنیم و از sync بودن دیتابیس اصلی و گارد با روش زیر اطمینان حاصل می کنیم:
on primary:
archive log list

on standby:
select process ,sequence# , status , thread# from gv$managed_standby;
 select thread#, max(sequence#) from v$archived_log where applied='YES' group by thread#;
با مقایسه مقادیر بدست آمده از جستجوهای بالا از SYNC بودن دیتابیس های اصلی و استندبای اطمینان حاصل می کنیم.
حالا شروع می کنیم:
بر روی دیتبایس اصلی دستور زیر را می زنیم:
 alter database commit to switchover to physical standby;
در صورتی که با خطای وجود active session مواجه شدیم، دستور بالا را بصورت زیر می زنیم:
alter database commit to switchover to physical standby with session shutdown ;

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

shut immediate;
startup mount;

حالا اگر جستجوی اول کار را بر روی دیتابیس اصلی جدید (استندبای قدیمی) اجرا کنیم، می بینیم که وضعیت switchover_status تغییر پیدا کرده است:

 select name,open_mode,db_unique_name,switchover_status,database_role from v$database;
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    MOUNTED              TESTDG                         TO PRIMARY           PHYSICAL STANDBY

دستور زیر را بر روی دیتابیس اصلی جدید (استندبای قدیمی) اجرا می کنیم:
 alter database commit to switchover to primary ;
و سپس آنرا یکبار دیگر خاموش و سپس startup می کنیم:
shut immediate;
startup;
یکبار دیگر جستجوی زیر را بر روی دیتابیس اصلی جدید (استندبای قدیمی) تکرار می کنیم:
 select name,open_mode,db_unique_name,switchover_status,database_role from v$database;
NAME      OPEN_MODE            DB_UNIQUE_NAME                 SWITCHOVER_STATUS    DATABASE_ROLE
--------- -------------------- ------------------------------ -------------------- ----------------
TESTDB    READ WRITE           TESTDG                         RESOLVABLE GAP       PRIMARY

نگران نباشید. با روشن کردن دیتابیس استندبای جدید (اصلی قدیمی) و انجام دستور log switch بر روی دیتابیس اصلی جدید (استندبای قدیمی) مشکل resolvable gap هم حل خواهد شد.
پس از روشن کردن استندبای جدید (اصلی قدیمی) برای انجام وظایف اسندبای دستور زیر را بر روی آن اجرا می کنیم:
recover managed standby database using current logfile disconnect;
کارهای که برای تست sync بودن انجام داده بودیم را دوباره انجام می دهیم.


باز هم توصیه می کنم چندین و چند بار این عملیات رو در محیط تست انجام بدهید تا ملکه ذهن بشود.

-----------------------------------------------------------------------------------------------------------------------------------
لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.


سلام مجدد.

در قسمت

قبل نصب grid به اتمام رسید. در این قسمت کار رو به اتمام می رسونیم.

اول باید فایلهای مربوطه به دیتابیس رو در مسیر دلخواهمون extract کنیم. من معمولاً یک date رو در انتهای دو دستور unzip می گذارم که از صحت عملکرد دو unzip قبل با این روش مطمئن بشم.



گزینه i wish  را uncheck  می کنیم.:

گزینه skip software update را انتخاب می کنیم.


در اینجا فقط نرم افزار دیتابیس را نصب می کنیم:


بر روی تمامی node ها نصب را انجام خواهیم داد پس node دوم را هم انتخاب می کنیم:


تنظیمات مربوط به ssh را وارد می کنیم و بر روی setup کلیک می کنیم.


زبان مورد نظر را وارد می کنیم 


گزینه enterprise را انتخاب می کنیم:


مسیرهای مورد نظر را قبول می کنیم.


گروه های پیشنهاد شده را قبول می کنیم:


مشکل ntp را ignore می کنیم. بهتر این است که وقت بگذارید و این مشکل را مرتفع کنید.


دستور install را می زنیم:


اسکریپتهای مربوط  به root را با کاربر root اجرا می کنیم:


پس از اتمام نصب برای ساخت دیسکهای دیگر Asm با کاربر grid وارد می شویم و تنظیمات مربوطه را در bash_profile. در مسیر home/grid/ وارد می کنیم:


با زدن دستور Asmca به محیط آن وارد می شویم. دیسک ocr را از قبل ساخته ایم:


بر روی Create  کلیک کرده و با انتخاب redundancy از نوع external و انتخاب دیسک Data01 ، گروه data را می سازیم.


سپس گروه fra را نیز با همین روش می سازیم. نتیجه بصورت ذیل خواهد شد:


تحت کاربر اوراکل در مسیر home/oracle/ فایل bash_profile. را بصورت زیر ویرایش می کنیم:


دستور dbca را اجرا می کنیم. 

نکته: برای اینکه تغییرات جدید در shell حاضر اعمال شود، باید دستور home/oracle/.bahs_profile/ . را اجرا کنیم.


گزینه create را انتخاب می کنیم.


گزینه general را انتخاب می کنیم:


تمامی node ها را انتخاب می کنیم و دیتابیس را نامگذاری می کنیم:


گزینه ها را بصورت پیش فرض قبول می کنیم:


پسورد مدنظر خود را انتخاب و وارد می کنیم:


در قسمت Storage type ما ASM را انتخاب می کنیم و دیسک گروه data را برای این کار قرار می دهیم.


برای recovery area دیسک گروه fra را انتخاب می کنیم. همچنین archive را enable  می کنیم.


برای تستهای بعدی sample schema را فعال می کنیم:


character set را al32utf8 در تست ما قرار می دهیم. در محیط های واقعی درصورتی که بخواهیم دامپ از جایی بیاوریم، حتماً با صادر کننده دامپ در این زمینه هماهنگ باشیم.


بر روی next کلیک می کنیم


بر روی finish کلیک می کنیم:


نصب به اتمام رسید. در صورتی که بخواهیم پسوردی را تغییر دهیم، می توانیم در این مرحله هم انجام دهیم.


امیدوارم این مجموعه آموزش مفید واقع بشه.


----------------------------------------------------------------------------------------------------------------------

خواهشمند است در هنگام رانندگی به احترام عابرین پیاده بایستیم.


سلام. قسمت

قبل preinstallation به اتمام رسید و حالا به سراغ نصب Grid می رویم.




دستور Date پس از دستور unzip برای اطمینان از صحت عملکرد unzip است . اگر نخواهید اینکار را انجام دهید می توانید از ?$ echo استفاده کنید. حالا گزینه skip را انتخاب می کنیم.



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



گزینه advanced را انتخاب می کنیم.



زبان انگلیسی را انتخاب می نمائیم.



نام کلاستر را انتخاب می نمائیم و نام scan را بر اساس نامی که در dns وارد نموده ایم وارد می نمائیم.



اطلاعات دومین node را با زدن کلید add اضافه می نمائیم .



پس از  زدن کلید ssh connectivity و وارد نمودن اطلاعات مورد نیاز، setup را می زنیم.



در صورتی که همه چیز درست باشد با پیغام زیر مواجه می شویم.



در صفحه بعد کارتهای شبکه متناسب را انتخاب می کنیم.




گزینه Asm  را انتخاب می کنیم



با توجه به اینکه تنها یک دیسک را در نظر گرفته ایم برای هر گروه ، گزینه external را انتخاب کرده و نام دیسک را ocr می گذاریم و دیسک 2 گیگابایتی را به آن اختصاص می دهیم.



رمز عبور مدنظر خود را وارد کنید.



گزینه عدم استفاده از ipmi را انتخاب می کنیم.



با توجه به اینکه مراحل preinstallation را صحیح انجام داده ایم، گروه ها در جای درست خود قرار گرفته اند:



مسیرهای مناسب را می دهیم.



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



مراحل check انجام می شود و در صورتی که مشکلی وجود داشته باشد اطلاع داده می شود:



آنهایی که قابل رفع شدن توسط خود اوراکل هستند ، با زدن گزینه fix and check again و با اجرای اسکریپت توسط root بر طرف خواهند شد.



خطایی که درباره ntp به من داده بود رو با توجه به sync بودن crony ، نادیده گرفتم. اگر دوستان نظری دارند که می تونه این رو هم برطرف کنم، بگن که تصحیح کنم. اما به نظرم مشکلی برام ایجاد نخواهد کرد. 



خلاصه ای از اطلاعات ارائه می شه در این مرحله:



اسکریپتهای نشان داده شده رو به ترتیب گفته شده بر روی node های یک و دو اجرا می کنیم.



با توجه به اینکه ntp را ignore کرده بودیم ، با خطا در انتهای نصب مواجه می شویم که اگر لاگ رو بخونید ، می بینید که فقط در همین مورد هست و مشکل خاصی نداره.



نصب به اتمام رسید. در قسمت بعد به سراغ ساخت دیسک گروه های دیگر و نصب اوراکل می رویم.




-------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.


سلام

یکی از سازمان ها بر اساس درخواست نهاد ناظر، درخواست lock کردن کاربر sys رو دادند. نسخه دیتابیسی که تو این سازمان نصب شده 12.2 هست. 

اگر مستقیم دستور alter user sys account lock رو بزنیم با خطا مواجه می شیم:

sys@testcdb(78)> alter user sys account lock;
alter user sys account lock
*
ERROR at line 1:
ORA-40365: The SYS user cannot be locked while the password file is in its current format.

چاره چیست؟

ابتدا با اجرای دستور زیر اطلاعاتی از دیتابیس به دست می آوریم:

[oracle@db12cprimary-node1 ~]$ srvctl config database -d testcdb
Database unique name: testcdb
Database name: testcdb
Oracle home: /u01/app/oracle/product/12.2.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/TESTCDB/PARAMETERFILE/spfile.273.999485507
Password file: +DATA/TESTCDB/PASSWORD/pwdtestcdb.257.999485035
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
.

در قدم اول پسورد فایل موجود را پاک می کنیم:

[oracle@db12cprimary-node1 ~]$ orapwd dbuniquename=testcdb delete=y

حالا پسورد فایل جدید را با ذکر فرمت می سازیم:

[oracle@db12cprimary-node1 ~]$ orapwd file='+data'  dbuniquename=testcdb password=Vahid_1234 entries=20 format=12.2

دوباره وضعیت دیتابیس را چک می کنیم:

[oracle@db12cprimary-node1 ~]$ srvctl config database -d testcdb
Database unique name: testcdb
Database name: testcdb
Oracle home: /u01/app/oracle/product/12.2.0/dbhome_1
Oracle user: oracle
Spfile: +DATA/TESTCDB/PARAMETERFILE/spfile.273.999485507
Password file: +DATA/TESTCDB/PASSWORD/pwdtestcdb.257.1016598059
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
.

حالا می توانیم کاربر sys را lock کنیم:

sys@testcdb(59)> alter user sys account lock;


User altered.
 
در این حالت اگر از طریق listener بخواهیم به این کاربر متصل شویم، با پیغام account is locked مواجه می شویم.
 
[oracle@db12cprimary-node1 ~]$ sqlplus sys@testcdb as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sun Aug 18 05:57:11 2019

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

Enter password:
ERROR:
ORA-28000: the account is locked

همچنین اطلاعات کاربر بصورت زیر است:

sys@testcdb(1)> select username , account_status from dba_users where username='SYS';

USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SYS                            LOCKED

آما، در همین حال نیز می توان با دستور زیر به دیتابیس با کاربر SYS متصل شد:

[oracle@db12cprimary-node1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Sun Aug 18 05:59:52 2019

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

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

sys@testcdb(1)> show user
USER is "SYS"

شاد باشید.

------------------------------------------------------------------------------

در هنگام رانندگی به احترام عابرین پیاده بایستیم.

 

 


با سلام

در محیط multitenant ، اگر تمایل دارید که پس از start شدن دیتابیس cdb ، دیتابیس های pdb تیز بصورت اتوماتیک open شوند، می توانید از trigger زیر استفاده کنید:

CREATE OR REPLACE TRIGGER open_pdbs 
  AFTER STARTUP ON DATABASE 
BEGIN 
   EXECUTE IMMEDIATE 'ALTER PLUGGABLE DATABASE ALL OPEN'; 
END open_pdbs;
/

همچنین می توانیم بجای اینکه تمامی pdb ها open شوند، بخشی از آنها که مدنظر ماست را open کنیم. برای اینکار کافی است بجای all نام آنها را برده و با کاما "،" آنها را جدا کنیم.

راه دیگری برای اینکار وجود دارد که وضعیت فعلی دیتابیس های pdb  را ذخیره کنیم:

alter pluggable database pdb_name save state;


همچنین می توانیم تمامی pdb ها را در همین حالت قرار دهیم.
 

alter pluggable database all save state;



و یا بعضی ها را استثنا کنیم:
 

alter pluggable database all except pdb_name1, pdb_name2 save state;

 

----------------------------------------------------------------------------------------------------------------------------

لطفاً در هنگام رانندگی به احترام عابرین پیاده بایستیم.


سلام به همه

در نسخه های 19 ، آخرین نسخه قابل دانلود برای عموم نسخه 19.3 هست و پچ های بعدی مانند 19.4 یا 19.5 و در زمان انتشار این مقاله 19.6 بصورت پچ در اختیار قرار دارند که باید از سایت support.oracle.com تهیه نمود.  به این پچها Release Update یا به اختصار RU می گویند.

امکانی وجود دارد که می توان بجای اینکه دیتابیس را ابتدا نصب و سپس پچ RU را روی آن اعمال کرد، همزمان با نصب اینکار را انجام داد و در زمان نصب صرفه جویی نمود  و همچنین از خطاهایی و مشکلاتی که ممکن است در زمان پچ پیش می آید ، جلوگیری کرد. جالب این است که این عملیات بسیار ساده است.

ادامه مطلب


سلام

این خطا رو دیدید؟

Connect identifier for DB_UNIQUE_NAME vahiddb not configured
RMAN-06820: warning: failed to archive current log at primary database

 

که نتیجش این میشه که بک آپ ما میشه COMPLETED WITH WARNINGS. درسته که خطا نداده اما در زمانی که بخواید این بک آپ رو برگردونیم، به چند تا آرشیو لاگ احتیاج پیدا میکنیم که گرفته نشده.

ادامه مطلب


آخرین ارسال ها

آخرین وبلاگ ها

آخرین جستجو ها