Oracle数据库相应的系统权限和对象权限介绍
系统权限:系统权限允许用户执行一个或一类特殊的数据库操作。
对象权限:用户维护数据库对象的权限,如表、视图、函数。
与索引相关的系统权限
create any index; --创建任何模式下对象的索引
alter any index;
drop any index;
与表相关的系统权限
create table;
create/delete/drop/select/alter/update any table;
与会话相关的系统权限
create session;
alter session;
与表空间相关的系统权限
create tablespace;
alter tablespace;
drop tablespace;
unlimited tablespace; --允许使用所有表空间
授予用户系统权限
grant 系统权限 to user|role|public --所有用户
with admin option; --加上这句代表可以被授权的用户可以给其他用户授权。
回收用户系统权限
revoke 系统权限 from user|role|public;
授予对象权限
grant alter on table|sequence|procedure to user with grant option; --被授权的用户可以给其他用户授权
grant all on table|sequence|procedure to user; --将当前用户的某个数据库对象的所有权限赋予新用户。
garnt update(column1,column2) on table to user; --更新某列的权限
grant select|update|delete on table|view to user;
grant execute on procedure to user;
回收对象权限
revoke 对象权限 on 对象 from user;
视图
视图是一种虚表,它不存数据。
授予用户创建视图的权限
grant create view to user;
创建视图
create or replace force|noforce view view_name --replace 如果视图存在,则重建。force 不论基表是否存在,强制建立视图。
as
select * from aa
with check option|with read only;
create or replace view view_name --replace 如果视图存在,则重建
("column1","column2")
as
select column1,column3 from aa;
视图的执行过程
1、首选读取数据字典,获得视图的定义,找到视图引用的表。
2、从数据字典中查看当前用户对于表的引用权限。
3、执行视图SQL语句。
删除视图
drop view view_name;
物化视图
与普通视图相反,物化视图会物理存储数据,占用存储空间,可以进行分区和创建索引。
查询重写:重写SQL语句,该参数和SQL语句优化有很大关系。
show parameter query_rewrite;
物化视图同步
物化视图刷新方式:on commit(基表变化提交时,自动刷新),on demand(需要手工同步,手动执行dbms_mview.refresh);
物化视图刷新类型
complete:无论基表中修改了多少数据,重新执行下创建视图的SQL语句。
fast:只同步变化的数据。
force:先使用fast,如果失败再使用complete
never:从不更新。
dbms_mview.refresh('物化视图名', 'F') --快速刷新,也就是增量刷新
dbms_mview.refresh('物化视图名', 'C')--完全刷新
创建物化视图
授权
grant create materialized view to scott;
grant query rewrite to scott;
创建基于基表的物化视图日志
create materialized view log on table_name;
创建物化视图
create materialized view view_name
build immediate|deffered --立即创建|延迟创建
refresh fast on commit --有可能会报没有主键的错,在这里加上 with rowid
enable query rewrite
as
select * from aa;
删除物化视图
drop materialized view view_name;
序列号
序列号是oracle使用序列生成器自动产生用户可以在事务中使用的唯一序号
1、序列号是独立于表的对象,由oracle自动维护。
2、序列号可以由多个用户共享使用。
3、在SQL语句中使用序列号就可以使用它产生的序列号。
创建序列号
create sequence sequence_name
start with n -- 从n开始
increment by m --序列号的增长幅度,默认为1
maxvalue p|nomaxvalue --定义序列号最大值
minvalue p|nominvalue
cache q|nocache --预先分配q个序列号在内存中
cycle r|nocycle --循环
sequence_name.currval --当前序列值
sequence_name.nextval --下一序列值
序号列不可逆,如果先增加后删除,则序号列会不连续。
修改序列号
alter sequence sequence_name
increment by m
maxvalue p|nomaxvalue
minvalue p|nominvalue
cache q|nocache
cycle r|nocycle;
删除序列号
dop sequence sequence_name;
同义词
公有同义词所有用户都可以使用,私有同义词只有指定的用户才可以使用。
创建公有同义词
create public synonym 同义词 for 表名;
创建私有同义词
create synonym 同义词 for 表名;
删除同义词
drop public synonym 同义词;
drop synonym 同义词;
切换用户模式
alter session set current_schema=scott;
数据库闪回
闪回数据库必须位于归档模式
archive log list; --查看归档模式
如果不是归档模式,先关闭数据库,然后启动到mount 状态,更改为归档模式。
shutdown immediate;
startup mount;
alter database archivelog;
查看数据库闪回功能是否开启
select * from v$database;
启动数据库闪回功能
alter database flashback on; --mount 状态下
alter database flashback off; --mount 状态下 闪回日志会自动删除
alter tablespace tablespace_name flashback on; --mount 状态下
alter tablespace tablespace_name flashback off; --mount 状态下
查看默认归档位置
show parameter db_recovery_file_dest;
数据库可闪回的最远时间
show parameter db_flashback_retention_target;
修改数据库可闪回的最远时间 --计量单位为 分钟
alter system set db_flashback_retention_target=2880 scope=both;
查看数据库可闪回的最远时间
select * from v$flashback_database_log;
闪回数据库的5种方法 --mount 状态下
rman:flashback database to time=to_date('','');
rman:flashback database to scn=10000;
rman:flashback database to sqeuence=100;
sql:flashback database to scn=10000;
sql:flashback database to timestamp(sysdate-1/24);
闪回后可以先使数据库只读,验证数据后再打开数据。
alter database open read only;
alter database open resetlogs;
闪回删除
show parameter recyclebin;
alter system set recyclebin=on scope=both;
查看删除的表
show recyclebin;
select * from recyclebin;
闪回删除的表
flashback table a to before drop;
flashback table a to before drop rename to a1;
永久删除表
drop table a purge;
闪回表
将表中的数据闪回到某个时间点。
flashback table a to timestamp(sysdate-1/24);
改功能是使用需开启以下两个功能:undo以及行移动功能
show parameter undo;
alter system set undo_retention=86400 scope=spfile; --未必会保存86400
alter tablespace undo_space retention guarantee; --强制保存86400,没有新的空间会报错。
alter table a enable row movement;
闪回查询
select * from TEST as of timestamp sysdate-1/24;
select * from TEST as of SCN 1257245;
数据库当前scn查询
select current_scn from v$database;
select dbms_flashback.get_system_change_number from dual;