這篇文章主要為大家展示了“Oracle 12.2中如何聯(lián)機(jī)重定義使用VPD策略的表”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Oracle 12.2中如何聯(lián)機(jī)重定義使用VPD策略的表”這篇文章吧。
創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、成都網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)即墨,10多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792
原始表jy.employees的創(chuàng)建語(yǔ)句如下:
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過程來對(duì)原始表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.
在這個(gè)例子中,表jy.employees表重定義后將會(huì)禁用所有的觸發(fā)器。注意重定義將不會(huì)修改列名或數(shù)據(jù)類型。因此在執(zhí)行start_refef_table過程時(shí)copy_vpd_opt參數(shù)設(shè)置為dbms_redefinition.cons_vpd_auto。
1.用要執(zhí)行聯(lián)機(jī)重定義操作的用戶登錄數(shù)據(jù)庫(kù)
SQL> conn jy/jy@jypdb Connected.
2.驗(yàn)證原始表是否可以執(zhí)行聯(lián)機(jī)重定義
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)機(jī)重定義操作
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.
當(dāng)copy_vpd_opt參數(shù)被設(shè)置為dbms_redefinition.cons_vpd_auto時(shí),只有表的所有者與調(diào)用聯(lián)機(jī)重定義操作的用戶可以在聯(lián)機(jī)重定義期間訪問該表。col_mapping參數(shù)設(shè)置為NULL。當(dāng)copy_vpd_opt參數(shù)設(shè)置為dbms_redefinition.cons_vpd_auto時(shí),col_mapping參數(shù)必須設(shè)置為NULL或'*'。
5.復(fù)制依賴對(duì)象
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.對(duì)中間表禁用所有的觸發(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)機(jī)重定義操作
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.等待任何查詢中間表的語(yǔ)句執(zhí)行完成后將其刪除
SQL> drop table jy.int_employees; Table dropped
到此重定義操作就完成了。
以上是“Oracle 12.2中如何聯(lián)機(jī)重定義使用VPD策略的表”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章名稱:Oracle12.2中如何聯(lián)機(jī)重定義使用VPD策略的表
文章出自:http://vcdvsql.cn/article18/jhgdgp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營(yíng)銷推廣、自適應(yīng)網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、用戶體驗(yàn)、做網(wǎng)站、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)