۲ مطلب با کلمه‌ی کلیدی «password» ثبت شده است

تعویض پسورد 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 Flashback

دامیومنت

Setup and Maintenance for Oracle Flashback Database

مقدمه

اوراکل با استفاده از فایلهای redo می‌تواند تا زمانی که فایلهای redo برای داده‌های موردنظر شما دوباره‌نویسی نشده باشند بدون داشتن backup دیتاهای حذف شده شما را برگرداند.

SQL> drop user mahdi cascade;
User dropped.
SQL> create user mahdi identified by qwerty512;
User created.
SQL> grant dba, connect to mahdi;
Grant succeeded.
SQL> connect mahdi
Enter password:
Connected.
SQL> password
Changing password for MAHDI
Old password:
New password:
Retype new password:
Password changed
SQL> create table t1(id number, name varchar2(20));
Table created.
SQL> insert into t1 values(1, 'mohammad');
1 row created.
SQL> insert into t1 values(2, 'mahdi');
1 row created.
SQL> insert into t1 values(3, 'mohsen');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t1;
ID         NAME
---------- --------------------
1 mohammad
2 mahdi
3 mohsen
SQL> delete from t1 where id=2;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from t1;
ID NAME
---------- --------------------
1 mohammad
3 mohsen
SQL> SELECT * FROM t1 AS OF TIMESTAMP TO_TIMESTAMP('2015-05-12 16:55', 'YYYY-MM-
DD HH24:MI:SS');
ID         NAME
---------- --------------------
1 mohammad
3 mohsen
SQL> SELECT * FROM t1 AS OF TIMESTAMP TO_TIMESTAMP('2015-05-12 16:50', 'YYYY-MM-
DD HH24:MI:SS');
no rows selected
SQL> SELECT * FROM t1 AS OF TIMESTAMP TO_TIMESTAMP('2015-05-12 16:51', 'YYYY-MM-
DD HH24:MI:SS');
ID         NAME
---------- --------------------
1 mohammad
2 mahdi
3 mohsen

نکته: توجه داشته باشید اگر بخواهید محدودیتی برای flashback نداشته باشید فقط در صورتی که هارد پرسرعت و فضای کافی ذخیره‌سازی در اختیار دارید می‌توانید دیتابیس را در حالت archive قرار دهید. برای قرار دادن دیتابیس در حالت archive می‌توانید به صورت زیر عمل کنید:

SQL> connect sys as sysdba
Enter password:
Connected.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 3240239104 bytes
Fixed Size 2407880 bytes
Variable Size 1879048760 bytes
Database Buffers 1342177280 bytes
Redo Buffers 16605184 bytes
Database mounted.

نکته: در موقع flashback می‌توانید از دستوراتی نظیر where نیز استفاده کنید:

SQL> SELECT * FROM mahdi.t1 AS OF TIMESTAMP TO_TIMESTAMP('2015-05-12 16:51', 'YY
YY-MM-DD HH24:MI:SS') WHERE id>0;
ID         NAME
---------- --------------------
1 mohammad
2 mahdi
3 mohsen

ذخیره اطلاعات

برای ذخیره اطلاعات می‌توانید به شکل زیر عمل کنید:

SQL> create table t3(id number, name varchar2(20));
Table created.
SQL> INSERT INTO T3 SELECT * FROM mahdi.t1 AS OF TIMESTAMP TO_TIMESTAMP('2015-05
-12 16:51', 'YYYY-MM-DD HH24:MI:SS');
3 rows created.
SQL> select * from t3;
ID         NAME
---------- --------------------
1 mohammad
2 mahdi
3 mohsen
SQL> commit
2 ;
Commit complete.

پیداکردن اختلاف بین ۲ جدول

برای اینکار می‌توانید از minus به شکل زیر استفاده کنید:

SQL> select * from t3 minus select * from mahdi.t1;
ID         NAME
---------- --------------------
2 mahdi

نکته: minus یعنی مجموعه اول را از مجموعه دوم کم کن و خروجی را نمایش بده.

س: اگر ساختار جدول تغییر کرد می‌توان با استفاده از flashback اطلاعات را بازیابی کرد؟

ج: خیر، چون فیلدهایی که در اون بازه زمانی در redo موجود بوده‌اند با ساختار مشخصی از جدول ثبت شده‌اند و اگر بخواهیم در یک جدولی که ساختار یکسانی با آنچه ثبت شده است اطلاعات را ذخیره کنیم به مشکل برخواهیم خورد چون اطلاعات دیگر منطبق بر CTL فایل‌ها نیست.

س: وقتی flashback را enable می‌کنیم اجازه میدیم که flashback از redo فایل archive بگیره؟ 

ج: بله

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