测试oracle 存储过程 分区 索引
当前用户的存储过程访问其他用户表的权限demo
主要步骤:
1、
在用户itlife365 下创建表test 和索引
-- Create table
create table itlife365.TEST
(
id NUMBER,
name VARCHAR2(100)
)
tablespace USERS
;
-- Create/Recreate indexes
create index itlife365.TEST_ID on ljs.TEST (ID)
tablespace USERS
;
2、检查当前索引的状态
SQL> connect itlife365/itlife365
已连接。
SQL> select status from user_indexes where table_name='TEST';
STATUS
----------------
UNUSABLE
SQL>
使用itlife365用户授权,授予scott访问itlife365.test 表的权限:
grant alter any index to scott ;
grant create any index to scott ;
grant create any table to scott ;
3、测试不知道用户的存储过程执行情况
在用户scott下创建用户存储过程test,对表itlife365.test_id的索引进行禁用
create or replace procedure test is
v_ddl_sql varchar2(1024);
begin
--禁用分区索引
v_ddl_sql := 'alter index itlife365.test_id unusable';-- 需要赋予权限
--v_ddl_sql := 'alter index test_id unusable';--不同用户下需要指定用户,否则会报ORA-01418:指定的索引不存在
-- v_ddl_sql := 'alter index itlife365.text_id rebuild partition id_' ||lpad(i, 2, '0') || ' online nologging';--分区的时候
--v_ddl_sql := 'alter index test_id rebuild online nologging';
EXECUTE IMMEDIATE v_ddl_sql;
end test;
3、在scott用户下执行存储过程
4、在itlife365用户下检查当前索引的状态
/*--查询索引状态情况*/
select di.status from dba_indexes di where di.index_name='TEST_ID';
STATUS
N/A
/*分区*/
select di.status,di.* from dba_ind_partitions di where di.index_name='TEST_ID';
USABLE
UNUSABLE