最近在学习Oracle,该博客会慢慢更新。。。
1、获取建表DDL的SQL
select dbms_metadata.get_ddl('TABLE','TEST','SCOTT') from dual;
2、查看系统当中有哪些账号
select * from dba_users;
3、查看当前用户拥有的系统权限
select * from user_sys_privs;
4、查看当前用户拥有的对象权限
select * from user_tab_privs;
5、查看当前用户拥有的角色
select * from user_role_privs;
6、查看角色拥有什么角色
select * from role_role_privs;
7、查看角色拥有什么对象权限
select * from role_tab_privs;
8、查看角色拥有什么系统权限
select * from role_sys_privs;
9、创建账号
create user test identified by oracle;--创建一个账号 test/oracle
10、默认创建的用户是没有登录权限的,需要dba进行授权
grant create session to test;--只是赋予了登录权限,还不能创建表, 可以使用select * from user_sys_privs;语句进行查看,系统权限一般是DBA要干的事情,DBA一般需要掌握80%的权限,初学者请绕过,小心处理。 grant create table to test;执行这句之后test用户就可以创建表了,但是没有想过查询的权限,比如说select * from scott.emp;是会报权限不足错误,需要执行grant select on scott.emp to test;以上grant语句执行都是在超级管理员用户下进行授权的。
11、回收权限
revoke XXX from 账号/角色; 授权的语法是 grant XXX to 账号/角色:
当你入职了,一般会给你分配一个账号(拥有一个角色),遇到权限不足的时候,找DBA给你授权。在Oracle中,SYS权限最高,权限第二高的是dba,可以直接 grant dba to test;不过一般不会这么干!这样执行之后,test用户就能干任何事情,但是不能shutdown immediate/startup
12、查看dba拥有的角色权限
select * from dba_role_privs;
13、查看dba数据库的对象
select * from dba_objects;
14、查看当前用户拥有的对象
select * from user_objects;
15、创建和删除索引
create table test as select * from dba_objects; select count(*) from test;--求test表一共有多少行数据 create index idx_id on test(object_id);--创建索引 索引是用来提升查询性能的,不是绝对的,不一定比逐行扫描快。缺点:占用磁盘空间 --查看用户下的某一张表的索引 select index_name,column_position,descend,column_name from dba_ind_columns where table_owner='SCOTT' and table_name='DEPT' order by 1,2; 删除索引 drop index idx_id;
16、视图
视图的目的: 一、给开发人员偷懒用的,我们可以先定义视图,而不用在查询的时候写一大堆的sql查询语句。 二、控制权限。我们可以定义一个视图,然后授权该访问视图的权限,这样就达到了只能访问部分数据,达到控制权限的功能。 创建视图 create or replace view emp_new as select * from emp where sal<2000; grant select on emp_new to test; 查看视图的源码(SQL) select * from dba_views where view_name='EMP1';--dba_views为数据库所有的视图
17、同义词(synonym)
select or replace synonym sb for emp; 查看同义词的定义 select * from dba_synonyms where synonym_name='SB';--这里是大写 同义词的删除 drop synonym sb;
18、序列
创建序列 create sequence seq_id start with 1 increment by 1 maxvalue 10000000000; 可以通过select * from user_objects;查看新建的序列。 select seq_id,nextval from dual;--启用查询下一次的序列值 select seq_id.currval from dual;--查看当前序列的值 select * from dba_sequences where sequence_name='SEQ_ID';