ওরাকল 10 জি-তে এসকিউএল প্রতিস্থাপন বৈশিষ্ট্য


9

তিন বা চার বছর আগে আমি কোথাও একটি ওরাকল ব্লগে পড়েছিলাম যে কোনও ডিবিএ জরুরি পরিস্থিতির সমাধানের জন্য রিয়েল টাইম এসকিউএল প্রতিস্থাপনের একটি ওরাকল 10 জি বৈশিষ্ট্য ব্যবহার করেছিল। মূলত, তিনি ওরাকলকে এমনভাবে কনফিগার করেছিলেন যে প্রতিবারই এটি একটি নির্দিষ্ট কোয়েরি এ পেয়েছে এটি পরিবর্তে অন্য একটি ক্যোয়ারী বি চালিত করে। কোনও অ্যাপ্লিকেশন কোড পরিবর্তন হয় না, কোনও স্কিমা পরিবর্তন হয় না, কেবল একটি সাধারণ "A এর পরিবর্তে ক্যু বি চালান" ধরণের কনফিগারেশন থাকে।

আমি সেই বৈশিষ্ট্যটি ব্যবহার করার পরিকল্পনা করছি না (আমি কিছু অনাকাঙ্ক্ষিত পরিণতি সম্পর্কে ভাবতে পারি), তবে কৌতূহলের বাইরে এটি কি আসলেই বিদ্যমান? যদি হ্যাঁ, তবে সেই বৈশিষ্ট্যটি কী বলা হয়?


সঞ্চিত রূপরেখা
ফিলি

অথবা এসকিউএল প্রোফাইলসমূহ। দেখুন antognini.ch/papers/SQLProfiles_20060622.pdf এবং oracle-base.com/articles/misc/outlines.php
Philᵀᴹ

1
@ ফিল: আমি ভেবেছিলাম সঞ্চিত রূপরেখাগুলি কেবলমাত্র কার্যকরকরণ পরিকল্পনার জন্য। ওপি যেভাবে বর্ণনা করে সেগুলি ব্যবহার করে কী প্রকৃত প্রশ্নের বিকল্প ব্যবহার করা সম্ভব?
হতাশ

1
হ্যাঁ, আপনি আউটলাইনগুলি ব্যবহার করে এসকিউএল পাঠ্য পরিবর্তন করতে পারেন। আমি 9i এর আগে বেশ কয়েকটি ইঙ্গিত যুক্ত করার জন্য একটি ক্যোয়ারী সংশোধন করতে এটি করেছি। এটি কীভাবে এটি সম্পন্ন করে তা দেখায়: প্রাকটিক্যাল্প্পস.ডি.এ.বিজ্ঞাপন .২০০/0/ ০5 /১ //২ - আমি যতক্ষণ না ইনপুট এবং আউটপুট একই থাকে ততক্ষণ আপনি কেন কোয়েরিটি পরিবর্তন করতে পারবেন না - রূপরেখাগুলি মূল্যায়ন ও প্রতিস্থাপিত হয় পার্স সময়
ফিলি

1
পুনরায় লেখার সক্রিয়করণ সহ একটি পদার্থযুক্ত দৃশ্য হতে পারে।
a_horse_with_no_name

উত্তর:


4

এটি ডিবিএমএস_এডিভিএনএসএডিএসএলডাব্লুআরআইটি প্যাকেজের মতো শোনাচ্ছে । টিম হলের একটি চমৎকার হাঁটার মাধ্যমে যে প্যাকেজ ব্যবহার করা হয়েছে একটি ভিন্ন টেবিল বা দৃশ্য বিরুদ্ধে অ্যাপ্লিকেশানের প্রশ্নের বাতলান

আপনি যদি কেবল ক্যোয়ারী প্ল্যান পরিবর্তন করতে চান তবে কোয়েরিকে অন্য কোনও টেবিলে নির্দেশ না করেন তবে আপনি সঞ্চিত রূপরেখা বা এসকিউএল প্রোফাইল ব্যবহার করতে পারেন।

উদাহরণস্বরূপ, আমার কাছে FOO1 সারি এবং BAR2 সারি সহ টেবিল রয়েছে

SQL> select * from foo;

      COL1
----------
         1

SQL> select * from bar;

      COL1
----------
        66
        77

আমি পুনর্লিখনের সমতুল্যতা বলতে পারি যে এর বিরুদ্ধে প্রশ্নগুলি FOOপরিবর্তে আঘাত করা উচিতBAR

begin
  sys.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE(
    'Rewrite_Foo',
    'select col1 from foo',
    'select col1 from bar',
    false,
    'TEXT_MATCH' );
end;

এখন, যদি আমি query_rewrite_integrityবিশ্বস্ত হয়ে সেট করি, তবে FOOসম্পূর্ণ আলাদা টেবিলটি মারার শেষের বিরুদ্ধে প্রশ্নগুলি ।

SQL> alter session set query_rewrite_integrity=trusted;

Session altered.

SQL> select * from foo;

      COL1
----------
        66
        77

এটি এমন কিছু আকর্ষণীয় ক্যোয়ারী পরিকল্পনা তৈরি করতে পারে যেখানে আপনি যে বিষয়টিকে জিজ্ঞাসা করছেন তা পরিকল্পনায় আর পাওয়া যায় না

SQL> select * from foo;

      COL1
----------
        66
        77


Execution Plan
----------------------------------------------------------
Plan hash value: 4224476444

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     2 |    26 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| BAR  |     2 |    26 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Note
-----
   - dynamic sampling used for this statement (level=2)


Statistics
----------------------------------------------------------
          0  recursive calls
          0  db block gets
          7  consistent gets
          0  physical reads
          0  redo size
        584  bytes sent via SQL*Net to client
        523  bytes received via SQL*Net from client
          2  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
          2  rows processed
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.