الانتقال إلى المحتوى

سؤال وجواب في Dba - موضوع متجدد


mageed_ahmed

Recommended Posts

السلام عليكم ورحمة الله وبركاته

استقبلت اليوم طلب من أحد الاعضاء يطلب فيه شرح بالعربية عن ال Materialized Views والشرح ليس من كتابتي انما هو للمهندس حسام فيصل وقد نقلته عنه نظرا لشرحه الوافي فجزاه الله خيرا علي مجهوده الطيب

Materialized Views
في الاصدارات السابقة علي جيل ابائنا كانت تدعي ب بــsnap shots . تستخدم لتخزين نسخ عن كامل جدول معين أو نتيجة إستعلام من أكثر من جدول و قد يحوي على Group by أو Sub query .. إلخ ..
يوجد عدة أنواع : نوع يتم تحديد فواصل زمنية يقوم بتحديث البيانات خلالها ، و نوع آخر أفضله هو Transaction-Based و فيه يقوم الجدول الأساسي بإرسال التغييرات إلى القاعدة الثانية عندما تتم عمليات التغيير على البيانات و يتم الحفظ ، و يمكنك حتى منع عمليات التغيير على النسخ أي تصبح العملية عملية حفظ فقط و لا تسمح بالتغيير ، و نوع آخر يقوم بإرسال التغييرات التي تجرى عليه إلى الجدول الأساسي أي تصبح العملية عكسية و يتم إجراء التعديلات بالإتجاهين و هنا تبدأ المشاكل :
ماذا لو قمنا بحذف سجل من الجدول المنسوخ و كان هذا السجل في الجدول الأساسي يرتبط بعلاقة مفتاح أجنبي ( foreign key ) في الجدول الأساسي ؟؟؟؟ ما الذي سيتم عمله ؟؟ كل هذه الأمور يجب أن تبقى في فكرنا عندما نريد إنشاء Materialized View ...

لإنشاء Materialized View يجب على المستخدم أن يملك إحدى الصلاحيتين :
CREATE MATERIALIZED VIEW or CREATE SNAPSHOT و طبعاً صلاحيات إنشاء الجداول لتخزين النسخ CREATE TABLE or CREATE ANY TABLE ..
الإنشاء :

create materialized view [ user.] name
[ organization index iot_clause]
[ { { segment attributes clauses }
| cluster cluster ( column [, column] ...) }
[ { partitioning clause | parallel clause | build clause } ]
| on prebuilt table [ {with | without} reduced precision ] ]
[ using index
[ { physical attributes clauses| tablespace clause }
[ physical attributes clauses| tablespace clause ]
| using no index ]
[ refresh clause ]
[ for update ] [{disable | enable} query rewrite]
as subquery;



سنقسم تعليمة الإنشاء إلى أربعة أقسام رئيسية :
1- اسم Material view :

create materialized view [ user.] name


2- هنا نحدد قيم عبارة storage التي يعلمها الجميع في إدارة Segments و Extents في الجدول الجديد الذي سنقوم بتخزين البيانات داخله و إذا كان هذا الجدول موجود فإننا نستخدم عبارة on prebuilt table ..

[ organization index iot_clause]
[ { { segment attributes clauses }
| cluster cluster ( column [, column] ...) }
[ { partitioning clause | parallel clause | build clause } ]
| on prebuilt table [ {with | without} reduced precision ] ]
[ using index
[ { physical attributes clauses| tablespace clause }
[ physical attributes clauses| tablespace clause ]
| using no index ]


-الآن :
إذا كان Materialized view من النوع الذي يقوم بتحديث نفسه خوال فواصل زمنية فإننا نحدد عبارة
[ refresh clause ] حيث :

{ refresh
{ { fast | complete | force }
| on { demand | commit }
| { start with | next } date
| with { primary key | rowid }
| using
{ default [ master | local ] rollback segment
| [ master | local ] rollback segment rollback_segment
}
[ default [ master | local ] rollback segment
| [ master | local ] rollback segment rollback_segment
]...
}
[ { fast | complete | force }
| on { demand | commit }
| { start with | next } date
| with { primary key | rowid }
| using
{ default [ master | local ] rollback segment
| [ master | local ] rollback segment rollback_segment
}
[ default [ master | local ] rollback segment
| [ master | local ] rollback segment rollback_segment
]...
]...
| never refresh


نحدد خيار التحديث إما fast فبالتالي سيقوم بإنشاء log يقوم بتسجيل السجلات داخله ثم يقوم بوضعها داخل الجدول بالتالي سيقوم فقط بنقل التغييرات أما complete فيقوم بإعادة خلق re-create لــMaterialized View لإدخال البيانات من جديد أما خيار force فإنه يجبر أوراكل على إستخدام الخيار fast إذا كان ذلك ممكناً و إلا فإنه سيتم إستخدام Complete ...
2- إذا كان النسخ من جدول واحد فإننا نستطيع تحديد on commit بالتالي سيتم نقل التغييرات حفظها على الجدول الرئيسي مباشرة أما الخيار on demand فلن يتم نقل التغييرات إذا طلبنا نقلها يدوياً ..
3- نحدد الفواصل الزمنية لعملية التحديث في عبارة start with date ..
4- نحدد rollback الذي نريد استخدامه ...

4- نحدد إذا كان Materialized من النوع updateable أي التغييرات التي ستتم عليه سيتم نقلها إلى الجدول الرئيسي و إذا لم نحدد ذلك فإنه سيكون Read only أي سيتم نقل التغييرات بإتجاه واحد من الرئيسي إلى المنسوخ فقط ..

[ for update ] [{disable | enable} query rewrite]
as subquery;


سنقوم بإنشاء Materialized View من النوع Read only لنقوم بنسخ البيانات من الجدول employees لدى المستخدم hr في القاعدة db2 إلى حساب scott في القاعدة الثانية orcl بالتالي سنستخدم الوصلة db2hrlink لتنفيذ ذلك ، و سيكون التحديث كل يوم :

1- أولاً نقوم بمنح الصلاحيات للمستخدم Scott من أجل القيام بعملية الإنشاء :

SQL> connect system/oracle@orcl 
SQL> grant create Materialized view to scott;

Grant succeeded.

SQL>



2- ننشئ Materialized View

SQL>connect scott/tiger@orcl  
SQL>  create materialized view copy_fromHRDB2
 2   storage (initial 100K next 100K pctincrease 0)
 3   tablespace users
 4   refresh force
 5   start with sysdate next sysdate+ 1
 6   as
 7   select * from  employees@db2hrlink;


و السؤال كيف سنحضر البيانات ؟؟

SQLl> select * from copy_fromHRDB2;



البيانات أصبحت في القاعدة orcl بعد نسخها من القاعدة db2 ....
التحديث سيتم كل يوم و السب أن حددنا أننا نريد البدء من اللحظة الحالية start with sysdate و التحديث كل يوم sysdate + 1 ... و لكي تتوضح الفكرة لنقم بعملية بسيطة :
1- سنجري تعديلات على الجدول employees في حساب hr في القاعدة db2 :

SQL> connect hr/hr@db2
Connected.
SQL> insert into employees (employee_id  , first_name , last_name , job_id , department_id , email, hire_date ) values(1000 , 'arabteam', 'arabteam','IT_PROG',60,'[email protected]', sysdate);

1 row created.



- سنرى الآن هل سيتم نقل التغيرات إلى النسخة copy_fromhrdb2 الموجودة في القاعدة orcl ؟؟



SQL> connect scott/tiger@orcl
Connected.
SQL> select first_name from copy_fromhrdb2 where first_name='arabteam';

no rows selected



إذاً سجل مستخدمنا arabteam قد تمت إضافته على الأساسي و لكنه لم ينتقل إلى النسخة copy_fromhrdb2 و إنما سينتقل بعد فترة زمنية قدرها 24 ساعة ... ما ذا لو أردنا نقل التغييرات كل 1 دقيقة ؟؟



SQL>  create materialized view copy_fromHRDB2
 2   storage (initial 100K next 100K pctincrease 0)
 3   tablespace users
 4   refresh force
 5   start with sysdate next sysdate+ 1/3600
 6   as
 7   select * from  employees@db2hrlink;



و لكن يجب أن نضع في بالنا مقدار الضغط الذي قد ينتج عن هذه العمليات ....
و السؤال الذي سيطرح نفسه : هل نستطيع إجراء التعديلات على النسخة copy_fromhrdb2 ؟؟؟
لنجرب :




SQL> connect scott/tiger@orcl
Connected.
SQL> insert into copy_fromhrdb2 (employee_id  , first_name , last_name , job_id , department_id , email, hire_date ) values(1200 , 'arabteam2', 'arabteam2','IT_PROG',60,'[email protected]', sysdate);
insert into copy_fromhrdb2 (employee_id  , first_name , last_name , job_id , department_id , email, hire_date ) values(1200 , 'arabteam2', 'arabteam2','IT_PROG',60,'[email protected]', sysdate)
                       *
ERROR at line 1:
ORA-01732: data manipulation operation not legal on this view


SQL>



طبعاً فشلت عملية الإضافة و السبب أن هذا Materialized view هو Read only ....

انتهي الشرح

رابط هذا التعليق
شارك

  • الردود 119
  • البداية
  • اخر رد

أكثر المشاركين في هذا الموضوع

  • mageed_ahmed

    56

  • نور بوظبي

    6

  • honr

    5

  • المقنع2005

    4

ممكن حضرتك تبحثي في المصادر المتوافره وعند عدم وجود اي نتائج سنحاول معك باذن الله

A writeable materialized view is one that is created using the FOR UPDATE clause but is not part of a materialized view group. Users can perform DML operations on a writeable materialized view, but if you refresh the materialized view, then these changes are not pushed back to the master and the changes are lost in the materialized view itself. Writeable materialized views are typically allowed wherever fast-refreshable read-only materialized views are allowed.

materialized_views_10gr2_0505.pdf

رابط هذا التعليق
شارك

س : ما هو الفرق بين a database and an instance

ج : لمعرفة الفرق بينهما يلزم تعريف كل منهما وكذلك العلاقة بينهما

قاعدة البيانات تعرف بأنها مجموعة من الملفات محفوظة علي القرص
* A database is a set of files stored on disk.

أما instanc فهو تأليفه من Oracle background processes و الذاكرة المشاركة
* An instance is a collection of Oracle background processes and shared memory.

العلاقة بينهما

ال instance يمكنه تحميل وفتح قاعدة بيانات واحدة في نفس الوقت

* An instance can mount and open one and only one database.

قاعدة البيانات يمكن فتحها بواسطة Instance واحد أو أكثر في نفس الوقت
* A database may be mounted and opened by one or more instances.


مثال في Real Application Clusters
(or RAC)
تفتح وتحمل قاعدة البيانات بأكثر من instance


أرجوا أن تكون المعلومة مفيده

رابط هذا التعليق
شارك

س : ما هو الفرق بين

V$ and GV$ , also V$and V_$?



ج:
These “$” views are called dynamic performance views. They are continuously updated while a database is open and in use, and their contents relate primarily to performance.

The actual dynamic performance views are identified by the prefix V_$. Public synonyms for these views have the prefix V$. You should access only the V$ objects, not the V_$ objects.

For almost every V$ view, Oracle has a corresponding GV$ (global V$) view. In addition to the V$ information, each GV$ view contains an extra column named INST_ID of datatype NUMBER. The INST_ID column displays the instance number from which the associated V$ view information was obtained.

رابط هذا التعليق
شارك

س: كيف يمكنني معرفة حجم قاعدة البيانات؟
ج: سهله

select round(sum(bytes)/(1024*1024*1024)) GB from dba_extents

/

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله

اخي الحبيب ماجد موضوع مميز وجهد وعطاء كبيرين , أسأل الله عزوجل أن يزدك علما ونورا ...

تابع على بركة الله ...

رابط هذا التعليق
شارك

المهندس ماجد موضوعك روعة وبجد استفدنا كثير من هذا الموضوع المميز ويا ريت تكمل بارك الله بك

عندي استفسارات أتمنى الرد عليها من قبلكم ...


1- ما هي الاضافات الجديدة في database 11g ولم تكن موجودة ب database 10g يا ريت التوضيح بأمثلة لتسهيل الفهم ؟

2- ما أفضل طريقة في backup لقاعدة البيانات سواء كانت archive او not archive ؟

3- هل من الممكن وضع شرح تفصيلي لل RMAN في عملية أخذ نسخة احتياطية والاسترجاع ؟

4- ما هو ال RAC ؟

5- ما هي الأفضل أن تكون قاعدة البيانات في وضع ال archive او not archive ولماذا ؟

6- هل من الممكن شرح تفصيلي لتنزيل قاعدة البيانات والفورم على ال LUNIX REDHAT ؟



أنا أعلم أن استفساراتي تحتاج وقت للاجابة عليها ولكن صدقني هذه الاسئلة كثير من الاعضاء بحاجة للاجابة عليها من قبل مشرف رائع
مثل حضرتك يسهل طريق العلم والمعرفة علينا سائلين المولى عزوجل أن يسهل بهذا العلم طريقه الى الجنة .

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته

سمعا وطاعة للاخ الفاضل المقنع وتباعا وبالترتيب سوف أجيب علي أسئلته

س: ما هي أم الاضافات الجديدة في 11g عن ال 10g

ج: كثير من التحسينات والاضافات لدرجة انها تصل الي 482 ميزة محتلفة ما بين جديد وتحسين في الاصدارات السابقة

أهمها هي أن سرعة تحزين واسترجاع البيانات في الحقوق الضخمة مثل LOBS أصبحت تساوي سرعة ال file System ناهيك عن الثبات والسرعة واوتوماتيكية الضبط الذاتي

الملف المرفق يوضح كثير من هذه الاختلافات في ملفين وورد و عرض تقديمي يرجي الاطلاع عليهما

الي الملتقي في الاجابة علي السؤال عن أفضل طريقة في backup لقاعدة البيانات سواء كانت archive او not archive

أستودعكم الله الذي لا تضيع ودائعه

11g_new_faetures.rar

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته

مع السؤال الثاني لاخينا الفاضل المقنع
ما أفضل طريقة في backup لقاعدة البيانات سواء كانت archive او not archive ؟

الاجابة : بعد قراءة الملف المرفق أرجوا منك أن تجيبنا علي سؤالك بنفسك وفي انتظارك

تحياتي
أحمد

Archive vs noarchive log mode.doc

رابط هذا التعليق
شارك

ماذا أقول كلمة رائع قليلة في حق الشرح المرتب والمنظم بل كل الروعة اللي في العالم
شكر خاص لك من كل قلبي

رابط هذا التعليق
شارك

جزاكم الله خيرا ولا يستحق الثناء الا الله تعالي ثم أهل هذا المنتدي وأعضاؤه لانكم عامل النجاح الاول بجديتكم

السؤال الثالث لاخي المقنع :
س: - هل من الممكن وضع شرح تفصيلي لل RMAN في عملية أخذ نسخة احتياطية والاسترجاع

ش أقصد ج:

بفضل الله دعنا نذكر ما يسر الله لنا

مقدم
ما هو RMAN او recovery manager
Recovery Manager is a tool that: manages the process of creating backups and
Also manages the process of restoring and recovering from them.

لماذا نستخدمه ؟
1. No extra costs …Its available free
2. RMAN introduced in Oracle 8 it has become simpler with newer versions
and easier than user managed backups
3. Proper security
4. You are 100% sure your database has been backed up.
5. Its contains detail of the backups taken etc in its central repository
6. Facility for testing validity of backups also commands like crosscheck
to check the status of backup.
7. Faster backups and restores compared to backups without RMAN
8. RMAN is the only backup tool which supports incremental backups.
9. resulted in improvement of performance during backup and recovery time
10. Parallel operations are supported
11. Better querying facility for knowing different details of backup
12. No extra redo generated when backup is taken. Compared to online

أسئلة متداوله عن RMAN

س : كيف تحتفظ أوراكل بالبيانات

Every time a change in the database occurs, Oracle generates a record of
the change in the redo log buffer in memory. Oracle records both committed
and uncommitted changes in redo log buffers.
Oracle constantly writes the redo log buffers to the online redo log,
which is on disk. Depending on whether Oracle runs in ARCHIVELOG or
NOARCHIVELOG mode, the system can then archive this redo information by
copying the online redo log to other locations on disk. Archived redo logs
are crucial for recovery since they constitute a record of changes to the
database.

س : ماذا عن عمليات النسخ والاسترجاع BACKUP AND RECOVERY OPERATIONS

A backup is a snapshot of a datafile, tablespace, or database at a certain
time. If periodic backups of the database have been made and data is lost,
users can apply the stored redo information to their latest backup to make
the database current again.

س : ما حدود هذه الاستيراتيجية ELEMENTS OF A BACKUP AND RECOVERY STRATEGY
Although backup and recovery operations can be intricate and vary from one
business to another, the basic principles follow these four simple steps:
1. Multiplex the online redo logs
2. Run the database in ARCHIVELOG mode and archive redo logs to multiple
locations
3. Maintain multiple concurrent copies of the control file
4. Take frequent backups of physical datafiles and store them in a safe
place, making multiple copies if possible
As long as users have backups of the database and archive redo logs in
safe storage, the original database can be recreated, even if a fire
destroyed the server hardware.

نأتي للتطبيق وخطوة بخطوة كما طلب أخونا أم أخينا لا أخونا لأنه فاعل ويرفع هنا بالواو
يجب اتباع التعليمات التالية

1- قم بالدخول علي sql كمستخدم sys

1)
Create tablespace RMAN_TS
Datafile ‘Oracle\xxxxx\RMAN_TS.dbf’
Size 40m
Autoextend On
EXTENT MANAGEMENT LOCAL/DICTIONARY
SEGMENT SPACE MANAGEMENT AUTO


2)
By default there is an existing user in the Database Call RMAN

How to find out

Select username from all_users where username like 'RMA%';

If the rman exist then make sure he has the proper permission by issueing
the command

To see if RMAN has a SYSDBA permession
SELECT * FROM SYS.V_$PWFILE_USERS
By default RMAN has no sys privileges

3)
Make sure the RMAN user has the required permission
DBA
CONNECT
RESOURCE
RECOVERY_CATALOG_OWNER

select grantee,granted_role from dba_role_privs where grantee ='RMAN';

If RMAN user does not have those permission then issue this Statement to
grant the RMAN user the required permission.

Grant RMAN the required permission
Grant CONNECT,RESOURCE,RECOVERY_CATALOG_OWNER,SYSDBA to RMAN;

4)
Assign RMAN_TS tablespace to RMAN user as the default tablespace, whit
unlimited Quota by issuing this statement
Alter user RMAN
Default tablespace RMAN_TS
Quota unlimited on RMAN_TS

5)
If you know the password then loging as RMAN user, if you don’t know the
password, while your sill in the sysdba session, issue this command
Alter user RMAN identified by xyz


6)
Login as RMAN USER
Conn RMAN/pwd as sysdba

Connecting to RMAN

Open the command prompt
. from the run command type CMD
Set your Oracle Database
SET ORACLE_SID=YOURDBNAME
Create a catalog
Connect to RMAN using Catalog Recovery
RMAN catalog rman Create catalog


. Exist RMAN
Exit
. Connect to the Target Database
. rman catalog rman/ target rman/ Resynchronize the control file and recovery catalog
. resync catalog;
. Make sure you get this messege
starting full resync of recovery catalog
full resync complete

بعد الاعداد نذهب لاخذ نسخة احتياطية
Note: Whole database backups automatically include the current control
file, but the current control file does not contain a record of the whole
database backup. To obtain a control file backup with a record of the
whole database backup, make a backup of the control file after executing
the whole database backup.
Include a backup of the control file within any backup by specifying the
include current controlfile option.



Run once a week every Thursday night at 12:00 AM وهو المفضل
1)
Full Backup


RMAN> RUN
{
ALLOCATE CHANNEL CH TYPE DISK;
BACKUP FORMAT '\BK\FULL\%d%s%p'
(DATABASE);
RELEASE CHANNEL CH;
}


After the successful backup you should get something like this
channel dbbackup: starting piece 1 at 09-MAR-05
channel dbbackup: finished piece 1 at 09-MAR-05
piece handle= \BK\FULL\FULLDBSUP21 comment=NONE
channel dbbackup: backup set complete, elapsed time: 00:02:58
Finished backup at 09-MAR-05
released channel: dbbackup

Full Backup with Control File


RMAN> RUN
{
ALLOCATE CHANNEL CH TYPE DISK;
BACKUP FORMAT '\BK\FULL\CF\%d%s%p'
(DATABASE INCLUDE CURRENT CONTROLFILE);
RELEASE CHANNEL CH;
}


2)
Incremental Backup

Recommendation:
Three times a week every Saturday, Monday and Wednesday


run
{
allocate channel ch1 type disk;
backup
incremental level = 0
database;
release channel ch
}


Note: This script makes a differential level 1 backup of the SYSTEM
tablespace and datafile yoseph. It will only back up those data blocks
changed since the most recent level 1 or level 0 backup:


run
{
allocate channel ch type disk;
backup
incremental level = 1
tablespace system
datafile '/oracle/dbs/yoseph.dbf';
release channel ch
}



Note: This script makes a cumulative level 2 backup of the tablespace
TBS_2. It will only back up those data blocks changed since the most
recent level 1 or level 0 backup:


run {
allocate channel ch type disk;
backup
incremental level = 2 cumulative # specify cumulative option
tablespace tbs_1;
release channel ch
}



3)
TableSpace Backup

Recommendation:
It depends on the need of each organization


run
{
allocate channel ch type disk
backu fromat '\ '\backup\tablespace\tspcbuk_%d_%t_%S.bak';
backup
(tablespace MyTableSpace);
release channel ch
}



4)
Datafile Backup

Recommendation:
It depends on the need of each organization

Note: Before taking a backup of a Datafile you should query the Dynamic
performance View V$DATAFILE to get the number of the Datafiles.
Connect to Oracle


SQL>select file#, Name from V$Datafile;
Then go back to the RMan Prompt
run
{
allocate channel ch type disk
format 'dfile_%D_%T_%S.bak';
backup
(datafile 11);
release channel ch
}



Archived Redo Logs Backup

Note: The archived redo logs are the key to successful recovery. Back them
up regularly.
You can specify the delete input option in the backup command, which will
delete the archived redo logs after you have backed them up. Thus, you can
back up archived logs to tape and clear your disk space of the old logs in
one step.
Recommendation:
Run 3 times a day during business hours

كما يوجد لدي عرض تقديمي تم عمله للمنتدي الرائع هذا بواسطة الاخ أحمد حسين جعله الله خالصا لوجهه وأثابه علي عرضه الممتع وهو مرفق


تحياتي

orcl_arab_1.rar

رابط هذا التعليق
شارك

مع السؤال الرابع
ما هو ال RAC ؟


الملف مرفق لاحتوائه صور
كذلك يوجد ملف فلاش عن الراك

Oracle_RAC.doc

Oracle_RAC.rar

رابط هذا التعليق
شارك

بجد انك مميز جداااااااا

وهلا تأكدت انه لازم قاعدة البيانات تكون archive حتى اضمن كل الحركات وما يروح من البيانات شي .

وبالنسبة لل RMAN الله يعيني على تطبيقها بس بسألك بتفرق اذا كانت قاعدة البيانات archive او no archive ؟؟؟

وراح اقرأ ملف ال RAC اللي وضعته مع العلم مش عارف كيف بتم تنصيبه على الجهاز او عمل الاعداد له .


بجد جهد كبير بارك الله بك .

رابط هذا التعليق
شارك

بخصوص سؤالك نعم ممكن أن تكون قاعدة البيانات في none archive mode علاوة علي نفعها في ال archive mopde

ومع ذلك يمكن أن تأخذ
cold backup via RMAN)



ولاخذ cold backup أيضا

RMAN> run {
shutdown immediate;
startup mount;
backup database;
alter database open;
}





اخيرا أيهما أفضل كل منهما له احتياجاته فمطلوب منك تارة هذا وتارة هذا ويوقوموا بنفس النتيجة في النهاية الا أن noarchive لا بد أن توقف قاعهدة البيانات اما اذا لم يمكنك ايقافها كما هو الحال في كثير من طبيعة الاعمال ف archive mode هو الامثل

المقارنة مرة أخري

1-no archive mode

Must backup entire database.
DB must be shut down.
Only entire DB can be restored
In case of a failure, all changes sinces the last backup will be lost All commited transactions will be restorable

archive mode
Can backup parts of database (datafiles tablespaces)
hot backups possible
Tablespaces can be restored



بالنسبة للراك سوف نقوم بعمله في دروس عملية قادمه ربما خلال شهر من الان حسب خطتنا في بعض المشاريع التدريبية القادمة لكننا نحضر العتاد المطلوب والله الموفق

رابط هذا التعليق
شارك

السؤال السادس
هل من الممكن شرح تفصيلي لتنزيل قاعدة البيانات والفورم على ال LUNIX REDHAT ؟

قاعدة البيانات المستحسن لها أن تعمل علي لينكس أما الفورم المستحسن لها أن تنزلها علي ويندوز

أبو صالح الرجل الصالح الطيب يهديك شرح وافي لانزال قاعدة البيانات اوراكل علي لينكس فله دعائنا بالتوفيق علي مجهوده الرائع مثله

وباتباع طريقة الفك للاخ عروة في نفس الموضوع ستتكمن ان شاء الله من الحصول علي ملف PDF يشرح ما تريد

في حال عدم المقدرة علي فك الملفات يرجي المتابعة من هناك لمساعدتك

الرابط

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته متنيا أن يرحم شهداء فلسطين وقافلة المساعدات وأن ينصرنا علي عدونا نصرا مبينا اللهم أمين

س: سمعنا عن خاصية جديدة في 11g أن هناك ما يعرف ب Read Only tables فما حقيقة الموضوع

ج : نعم فهي ميزة شيقة اضيفت الي 11g كان في الاصدارات السابقة بالامكان جعل جدول read only باعطاء هذا المستخدم خاصية
select للمستخدم الا أن المالك الاصلي owner لازال قادر علي read write أما هنا تتضح لنا الخاصية

CREATE TABLE read_only_table(

 Readid  NUMBER

);



INSERT INTO read_only_table VALUES (1);

ALTER TABLE read_only_table READ ONLY;

SQL> INSERT INTO read_only_table VALUES (2);

INSERT INTO read_only_table VALUES (2)

           *

ERROR at line 1:

ORA-12081: update operation not allowed on table "KUMAR"." read_only_table "



SQL> DELETE FROM read_only_table;

DELETE FROM read_only_table

           *

ERROR at line 1:

ORA-12081: update operation not allowed on table "KUMAR"." read_only_table "





SQL> UPDATE read_only_table SET Readid = 2;

UPDATE read_only_table SET Readid = 2

      *

ERROR at line 1:

ORA-12081: update operation not allowed on table "KUMAR"." read_only_table "





11g DDL statements that affect the table data are also restricted.





SQL> ALTER TABLE read_only_table ADD (readdesc VARCHAR2(50));

ALTER TABLE read_only_table ADD (readdesc VARCHAR2(50))

*

ERROR at line 1:

ORA-12081: update operation not allowed on table "KUMAR"." read_only_table "



SQL> TRUNCATE TABLE read_only_table reuse storage;

TRUNCATE TABLE read_only_table

              *

ERROR at line 1:

ORA-12081: update operation not allowed on table "KUMAR"." read_only_table "




وبجرد تغييره ل read write

SQL> DELETE FROM read_only_table;



1 row deleted.





SQL> ALTER TABLE read_only_table READ WRITE;



Table altered.


رابط هذا التعليق
شارك

س : كيف يمكنني استرجاع بيانات من جدول وبعد حفظها؟؟

ج : تريد يعني أن تعمل FLASHBACK TABLE الله المستعان

سنقوم باسترجاع بيانات من جدول تم حذفها من وقت معروف



Create table Test_tmp as select * from emp where 1=2;

Insert some values and issue a commit.

Now select the systimestamp from the database.
Select systimestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
09-FEB-07 03.10.47.906882 PM +05:00

Now delete data from the Test_tmp table and commit it.
Delete from test;

Commit;

Now select the systimestamp again from the database.
select systimestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
09-FEB-07 03.15.47.906882 PM +05:00

Now you know that table was truncated at 3:15. So we will perform recovery
/ Flashback till 3:11
INSERT INTO TEST_TMP

(SELECT * FROM TEST AS OF TIMESTAMP TO_TIMESTAMP(\'09-FEB-07 03:11:00\',\'DD-MON-YY HH24: MI: SS\'))

Commit;

Now you can see the data has been restored in the table.
SQL> Select * from TEST_TMP;




تم ذلك علي 10G r2

رابط هذا التعليق
شارك

س: تم تعييني مدير قواعد بيانات في منشاة وأول ما اريد معرفته هل الاوراكل الحالي
64 أم 32 بت

الحل :

اذا كان عدد الخرج 16 حرف فهو 64

select distinct address from v$sql where rownum<2;

ADDRESS
----------------
0000000386D3E060

SQL>


وان كان 8 فهو 32

SQL> select distinct address from v$sql where rownum<2;

ADDRESS
--------
826A774C



تحياتي اليكم

رابط هذا التعليق
شارك

السلام عليكم ورحمة الله وبركاته.

أود ان أشكر استاذي العزيز م/ أحمد عبد المجيد.
وعلى رأي المثل المشهور "من علمنى حرفا ......." وكم علمني من صفحات وليس حروف.
جزاكم الله خيرا وجعله الله في ميزان حسناتك. وبارك الله لكم في روان وعمر .
ر
- عاوز اقول كلمة لجميع زوار المنتدي ان المهندس أحمد عبد المجيد من الشخصيات الجميله جدا اللي نادرا جدا لما الواحد يقابلها في حياته. وخدوم جدا ولا يبخل بأي معلومه.

تلميذك / محمد كمال أحمد.

رابط هذا التعليق
شارك

السلام عليكم وجزاكم الله خيرا لكني والله لست أهلا لهذا الثناء

س : حاول أحد المبرمجين احراجي بسؤال رغم أني مدير قواعد بيانات وقال ان لديه جدول وفيه أرقام 1 2 3 4 5 و .....

وطلب مني تحويل هذه الارقام ل لحروف
يعني
one two three وهكذا

قلت له يا بني هذا خارج نطاقي فأصر

فأجبته بما يلي

لنفرض أن جدولك الذي يحوي الارقام اسمه n2w
ووللترجمة قمت بعمل التالي

set linesize 100
set recsep   off

column numbers format a12
column words   format a80 word_wrapped

set null '(null)'

select
 to_char(i,'999,999,999') numbers ,
 to_char( to_timestamp( lpad(i,9,'0'), 'FF9' ), 'FFSP' ) as words
from n2w
where i between 0 and 9999999
order by i ;

سيكون الناتج

NUMBERS      WORDS
------------ --------------------------------------------------------------------------------
          0 ZERO
          1 ONE
         12 TWELVE
        123 ONE HUNDRED TWENTY-THREE
      1,234 ONE THOUSAND TWO HUNDRED THIRTY-FOUR
     12,345 TWELVE THOUSAND THREE HUNDRED FORTY-FIVE
    123,456 ONE HUNDRED TWENTY-THREE THOUSAND FOUR HUNDRED FIFTY-SIX
  1,234,567 ONE MILLION TWO HUNDRED THIRTY-FOUR THOUSAND FIVE HUNDRED SIXTY-SEVEN
  1,721,057 ONE MILLION SEVEN HUNDRED TWENTY-ONE THOUSAND FIFTY-SEVEN
  1,721,058 ONE MILLION SEVEN HUNDRED TWENTY-ONE THOUSAND FIFTY-EIGHT
  1,721,300 ONE MILLION SEVEN HUNDRED TWENTY-ONE THOUSAND THREE HUNDRED
  1,721,423 ONE MILLION SEVEN HUNDRED TWENTY-ONE THOUSAND FOUR HUNDRED TWENTY-THREE
  1,721,424 ONE MILLION SEVEN HUNDRED TWENTY-ONE THOUSAND FOUR HUNDRED TWENTY-FOUR
  5,373,484 FIVE MILLION THREE HUNDRED SEVENTY-THREE THOUSAND FOUR HUNDRED EIGHTY-FOUR
  5,373,485 FIVE MILLION THREE HUNDRED SEVENTY-THREE THOUSAND FOUR HUNDRED EIGHTY-FIVE
  7,777,777 SEVEN MILLION SEVEN HUNDRED SEVENTY-SEVEN THOUSAND SEVEN HUNDRED SEVENTY-SEVEN
  9,999,999 NINE MILLION NINE HUNDRED NINETY-NINE THOUSAND NINE HUNDRED NINETY-NINE

ولبعض الحالات مثل هذا الرقم
select CAST( to_char( to_timestamp( lpad(i,9,'0'), 'FF9' ), 'FFSP' ) AS VARCHAR2(100) ) as words
from n2w
where i = 777777011 ;

كذلك 

For Numbers Between -999,999,999 and 999,999,999

To transform nulls and negative numbers as well as positive number we can use the following technique.

select
 to_char(i,'999,999,999') numbers ,
 case sign( i )
   when -1 then 'NEGATIVE '
   else null
   end ||
 case
   when i is null then
     'NOT ASSIGNED'
   else
     cast
     (
       to_char
       ( to_timestamp( lpad(abs(i),9,'0'), 'FF9' ), 'FFSP' )
       as varchar2(100)
     )
 end as words
from
 n2w
order by i
;




أو


select
 to_char(&number,'999,999,999') numbers ,
 to_char( to_timestamp( lpad(&number,9,'0'), 'FF9' ), 'FFSP' ) as words
from dual
where &number between 0 and 9999999
/

رابط هذا التعليق
شارك

س : ماذا عن RECYCLEBIN in Oracle

ج تعريف

Oracle has introduced "Recycle Bin" Feature Oracle 10g to store all the dropped objects.
If any table in Oracle 10g is dropped then any associated objects to this table such as indexes,
constraints and other dependant objects are simply renamed with a prefix of BIN$$.


الفائدة منها
A user drops a very important table--accidentally, of course--and it needs to be revived as soon as possible.
Oracle9i Database introduced the concept of a Flashback Query option to retrieve data from a point in time in the past, but it can't flash back DDL operations such as dropping a table.
The only recourse is to use tables pace point-in-time recovery in a different database and then recreate
the table in the current database using export/import or some other method.
This procedure demands significant DBA effort as well as precious time, not to mention the use of a different database for cloning.
But with Oracle 10g Recycle bin Feature the user can easily restore the Dropped Object.

تشغيلها وايقافها

معرفة وضعها الحالي


SQL > SELECT Value FROM V$parameter WHERE Name = 'recyclebin';

Value
-----
On



للتشغيل أو الايقاف

SQL > ALTER SYSTEM SET recyclebin = ON;
or
SQL > ALTER SESSION SET recyclebin = ON;

SQL > ALTER SYSTEM SET recyclebin = OFF;
or
SQL > ALTER SESSION SET recyclebin = OFF;




لمعرفة ما بداخلها

SQL > SHOW RECYCLEBIN;
Or
SQL > SELECT * FROM USER_RECYCLEBIN;



مثال لحذف جدول لنجده داخلها

SQL > CREATE TABLE TEST_RBIN(VAL   NUMBER);

SQL > INSERT INTO TEST_RBIN(VAL) VALUES(10);

SQL > COMMIT;

SQL > DROP TABLE TEST_RBIN;

Print the Recycle bin Entries,

SQL > SHOW RECYCLEBIN;

ORIGINAL NAME      RECYCLEBIN NAME                 OBJECT TYPE           DROP TIME
----------------   ------------------------------  --- ------------     -------------------
TEST_RBIN              BIN$7fq9jEy8RSadimoE4xGjWw==$0  TABLE          2010-05-26:11:27:12




استرجاع الجدول

SQL > FLASHBACK TABLE <<Table_Name >> TO BEFORE DROP;

Example,

SQL > FLASHBACK TABLE TEST_RBIN TO BEFORE DROP;

SQL > SELECT * FROM TEST_RBIN;

      VAL
      ---
      10



ويمكن أن يسترجع الجدول باسم غير اسمه الاول

SQL > FLASHBACK TABLE << Dropped Table Name >> TO BEFORE DROP RENAME TO <<New Table Name >>;

SQL > FLASHBACK TABLE TEST_RBIN TO BEFORE DROP RENAME TO TEST_RBIN1;




ماذا لو تم عمل الجدول ثم تم حذفه ثم تم عمله مجددا ثم حذفه ماذا عن البيانات وهل يمكنني الاسترجاع من الجدول بالاسم الاقدم؟

نعم : يتم الاسترجاع في حالة تصاعدية كما سنري وهذه هي فائدة استرجاع الجدول باسم اخر

QL > CREATE TABLE TEST_RBIN (COL1 NUMBER);

SQL > INSERT INTO TEST_RBIN VALUES (1);

SQL > COMMIT;

SQL > DROP TABLE TEST_RBIN;

SQL > CREATE TABLE TEST_RBIN (COL1 NUMBER);

SQL > INSERT INTO TEST_RBIN VALUES (2);

SQL > COMMIT;

SQL > DROP TABLE TEST_RBIN;

SQL > CREATE TABLE TEST_RBIN (COL1 NUMBER);

SQL > INSERT INTO TEST_RBIN VALUES (3);

SQL > COMMIT;

SQL > DROP TABLE TEST_RBIN;

SQL > SHOW RECYCLEBIN;

ORIGINAL NAME    RECYCLEBIN NAME            	     OBJECT TYPE      DROP TIME
---------------- ------------------------------  ------------     -------------------
TEST_RBIN        BIN$2e51YTa3RSK8TL/mPy+FuA==$0   TABLE        	2010-05-27:15:23:43
TEST_RBIN        BIN$5dF60S3GSEO70SSYREaqCg==$0   TABLE        	2010-05-27:15:23:43
TEST_RBIN        BIN$JHCDN9YwQR67XjXGOJcCIg==$0 TABLE        	2010-05-27:15:23:42

SQL > FLASHBACK TABLE TEST_RBIN TO BEFORE DROP RENAME TO TEST_RBIN1;

SQL > FLASHBACK TABLE TEST_RBIN TO BEFORE DROP RENAME TO TEST_RBIN2;

SQL > FLASHBACK TABLE TEST_RBIN TO BEFORE DROP RENAME TO TEST_RBIN3;

SQL > SELECT * FROM TEST_RBIN1;

     COL1
----------
        3
SQL > SELECT * FROM TEST_RBIN2;

     COL1
----------
        2

SQL > SELECT * FROM TEST_RBIN3;
     COL1
   ----------
        1



تنظيفها
لتنظيف جدول معين

SQL > PURGE TABLE << Table_Name >>


وهذا الامر سيقوم بحذف الجدول ومتعلقاته مثل index

لحذف index مثلا

QL > PURGE  INDEX  <<Index_Name >>;


أخري

SQL > PURGE TABLESPACE <<Table Space Name>>;
or
QL > PURGE TABLESPACE <<Table Space Name>> USER <<User Name>>;




لحذف كل ما بداخلها

SQL > PURGE Recyclebin;



يمكن حذف جدول منها حتي أثناء عملية ال drop

SQL > DROP TABLE  << Table_Name >> PURGE;


الان عرفنا معنا PURGE وهو حذفه من ال R Bin

مثال أخير علي حذف جدول واسترجاعه

SQL >  CREATE TABLE TEST_RBIN (COL1 NUMBER);

SQL >  INSERT INTO TEST_RBIN VALUES (1);

SQL > COMMIT;

SQL > DROP TABLE TEST_RBIN;

View the recycle bin entries with show recycle bin option,

SQL > SHOW RECYCLEBIN;

ORIGINAL NAME    RECYCLEBIN NAME            	     OBJECT TYPE      DROP TIME
---------------- ------------------------------  ------------     -------------------
TEST_RBIN        BIN$2e51YTa3RSK8TL/mPy+FuA==$0   TABLE        	2010-05-27:15:23:43

Clear the table by executing the following Statement

SQL > PURGE TABLE TEST_RBIN; or

SQL > PURGE TABLE “BIN$2e51YTa3RSK8TL/mPy+FuA==$0”

Verify the Recycle bin, it will not have any entries for the table TEST_RBIN,

SQL > SHOW RECYCLEBIN;



من هنا نعلم أن عمل purge لجدول معناه ان البيانات لا يمكن استرجاعها بواسطة أمر FLASHBACK لانه تم حذفه من السلة

بنفس مفهوم أنظمة التشغيل

عند عمل drop لجدول وأختنا مفعلة يتم حفظه في قاعدة البيانات حتي يتم عمل purge

هام جدا
يتم الحذف الاوتوماتيكي للبيانات منها عند حدوث تعديل اوتوماتيكي للذاكرة وهي حالتان
1. A user creates a new table or adds data that causes his/her quota to be exceeded.
2. The tablespace needs to extend its file size to accommodate create/insert operations

أرجوا أن يكون الموضوع مفيد

تحياتي والي لقاء متجدد باذن الله تعالي أراكم علي خير
مهندس أحمد عبد المجيد

رابط هذا التعليق
شارك

انضم إلى المناقشة

يمكنك المشاركة الآن والتسجيل لاحقاً. إذا كان لديك حساب, سجل دخولك الآن لتقوم بالمشاركة من خلال حسابك.

زائر
أضف رد على هذا الموضوع...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   تمت استعادة المحتوى السابق الخاص بك.   مسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

جاري التحميل
×
×
  • أضف...

برجاء الإنتباه

بإستخدامك للموقع فأنت تتعهد بالموافقة على هذه البنود: سياسة الخصوصية