這篇文章主要為大家展示了“Oracle 12.2中如何聯(lián)機重定義使用VPD策略的表”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Oracle 12.2中如何聯(lián)機重定義使用VPD策略的表”這篇文章吧。
創(chuàng)新互聯(lián)公司-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比瓊山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式瓊山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋瓊山地區(qū)。費用合理售后完善,十年實體公司更值得信賴。原始表jy.employees的創(chuàng)建語句如下:
SQL> create table jy.employees( 2 employee_id number(6) primary key, 3 first_name varchar2(20), 4 last_name varchar2(25) 5 constraint emp_last_name_nn not null, 6 email varchar2(25) constraint emp_email_nn not null, 7 phone_number varchar2(20), 8 hire_date date constraint emp_hire_date_nn not null, 9 job_id varchar2(10) constraint emp_job_nn not null, 10 salary number(8,2), 11 commission_pct number(2,2), 12 manager_id number(6), 13 department_id number(4), 14 constraint emp_salary_min check (salary > 0), 15 constraint emp_email_uk unique (email) 16 ); Table created.
使用下面的jy.auth_emp_dep_100函數(shù)來創(chuàng)建VPD策略
SQL> create or replace function jy.auth_emp_dep_100( 2 schema_var in varchar2, 3 table_var in varchar2 4 ) 5 return varchar2 6 as 7 return_val varchar2 (400); 8 unm varchar2(30); 9 begin 10 select user into unm from dual; 11 if (unm = 'jy') then 12 return_val := null; 13 else 14 return_val := 'department_id = 100'; 15 end if; 16 return return_val; 17 end auth_emp_dep_100; 18 / Function created.
執(zhí)行dbms_rls_add_policy過程來對原始表jy.employees表使用jy.auth_emp_dep_100函數(shù)來指定VPD策略
SQL> begin 2 dbms_rls.add_policy( 3 object_schema => 'jy', 4 object_name => 'employees', 5 policy_name => 'employees_policy', 6 function_schema => 'jy', 7 policy_function => 'auth_emp_dep_100'); 8 end; 9 / PL/SQL procedure successfully completed.
在這個例子中,表jy.employees表重定義后將會禁用所有的觸發(fā)器。注意重定義將不會修改列名或數(shù)據(jù)類型。因此在執(zhí)行start_refef_table過程時copy_vpd_opt參數(shù)設置為dbms_redefinition.cons_vpd_auto。
1.用要執(zhí)行聯(lián)機重定義操作的用戶登錄數(shù)據(jù)庫
SQL> conn jy/jy@jypdb Connected.
2.驗證原始表是否可以執(zhí)行聯(lián)機重定義
SQL> begin 2 dbms_redefinition.can_redef_table('hr','employees',DBMS_REDEFINITION.CONS_USE_PK); 3 end; 4 / PL/SQL procedure successfully completed.
3.創(chuàng)建中間表jy.int_employees
SQL> create table jy.int_employees( 2 employee_id number(6), 3 first_name varchar2(20), 4 last_name varchar2(25), 5 email varchar2(25), 6 phone_number varchar2(20), 7 hire_date date, 8 job_id varchar2(10), 9 salary number(8,2), 10 commission_pct number(2,2), 11 manager_id number(6), 12 department_id number(4)); Table created.
4.開始聯(lián)機重定義操作
SQL> begin 2 dbms_redefinition.start_redef_table( 3 uname => 'jy', 4 orig_table => 'employees', 5 int_table => 'int_employees', 6 col_mapping => NULL, 7 options_flag => DBMS_REDEFINITION.CONS_USE_PK, 8 orderby_cols => NULL, 9 part_name => NULL, 10 copy_vpd_opt => DBMS_REDEFINITION.CONS_VPD_AUTO); 11 end; 12 / PL/SQL procedure successfully completed.
當copy_vpd_opt參數(shù)被設置為dbms_redefinition.cons_vpd_auto時,只有表的所有者與調(diào)用聯(lián)機重定義操作的用戶可以在聯(lián)機重定義期間訪問該表。col_mapping參數(shù)設置為NULL。當copy_vpd_opt參數(shù)設置為dbms_redefinition.cons_vpd_auto時,col_mapping參數(shù)必須設置為NULL或'*'。
5.復制依賴對象
SQL> declare 2 num_errors pls_integer; 3 begin 4 dbms_redefinition.copy_table_dependents( 5 uname => 'jy', 6 orig_table => 'employees', 7 int_table => 'int_employees', 8 copy_indexes => DBMS_REDEFINITION.CONS_ORIG_PARAMS, 9 copy_triggers => TRUE, 10 copy_constraints => TRUE, 11 copy_privileges => TRUE, 12 ignore_errors => FALSE, 13 num_errors => num_errors); 14 end; 15 / PL/SQL procedure successfully completed.
6.對中間表禁用所有的觸發(fā)器
SQL> alter table jy.int_employees disable all triggers; Table altered.
7.可選操作同步中間表
SQL> begin 2 dbms_redefinition.sync_interim_table( 3 uname => 'jy', 4 orig_table => 'employees', 5 int_table => 'int_employees'); 6 end; 7 / PL/SQL procedure successfully completed.
8.完成聯(lián)機重定義操作
SQL> begin 2 dbms_redefinition.finish_redef_table( 3 uname => 'jy', 4 orig_table => 'employees', 5 int_table => 'int_employees'); 6 end; 7 / PL/SQL procedure successfully completed.
9.等待任何查詢中間表的語句執(zhí)行完成后將其刪除
SQL> drop table jy.int_employees; Table dropped
到此重定義操作就完成了。
以上是“Oracle 12.2中如何聯(lián)機重定義使用VPD策略的表”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)-成都網(wǎng)站建設公司行業(yè)資訊頻道!
新聞名稱:Oracle12.2中如何聯(lián)機重定義使用VPD策略的表-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://www.rwnh.cn/article24/psoje.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、域名注冊、企業(yè)建站、ChatGPT、關鍵詞優(yōu)化、虛擬主機
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容