1、Oracle 数据库用户(user)的创建、删除以及授予权限

1.1、默认用户

/*

用户名 密码

sys 安装时确认

system manager

scott tiger

注:Oracle10g 后的版本sys和system都是安装时设定的,而scott是默认锁定的

*/

1.2、创建用户

create user user_name identified by password;

--详解:

/*

创建一个用户名称为user_name,密码为password的用户;

注:密码必须由字母开头

如果以数字或其他符号开头会出现错误:ORA-00988: 口令缺失或无效

如果以下划线“_”开头会出现错误:ORA-00911: 无效字符

*/

1.3、删除用户

drop user user_name [cascade];

--详解

/*

drop user user_name;

仅仅删除用户

drop user user_name cascade;

删除用户的同时,删除此用户名下所有的

使用cascade参数可以删除该用户的全部objects。

1、如果用户的schema中有表,则在删除表的时候自动删除与该表相关的主键和外键。

2、如果用户的schema中有表,则在删除表的时候自动删除与该表相关的索引。

3、删除用户时,下列在其他用户中的objects不会被删除,只会被置为无效

4、其他用户建立的基于被删除用户的物化视图不会被删除,只是不能在刷新了。

5、用户模式下的所有触发器全部被删除

6、被删除用户建立的其他用户不会被删除

*/

有时候想强制删除一个已经连接的Oracle用户,不能直接删除,可以用Kill会话信息。

oracle查看当前有哪些用户连接,可以执行以下语句:

select username,sid,serial# from v$session; ---查询用户会话

select sid,serial# from v$session where username='C##HEBEI';--- 查看某一个指定用户的会话信息

alter system kill session ' sid,serial# ';---删除相关用户会话

1.4、赋予用户权限

1.4.1三个常用的系统权限的赋予语句

--格式:grant 系统权限 to { public | role | username };

grant create session to lisi;

--创建会话权限,可以进入用户进行相关数据库操作

grant create table to lisi;

--创建表的权限

grant unlimited tablespace to lisi;

--使用表空间的权限

grant create session to public;

--对所有用户授予创建会话权限,public代表所有用户

--删除以上权限,不做解释

revoke create session from lisi;

revoke create table from lisi;

revoke unlimited tablespace from lisi;

1.4.2创建常用的对象权限

--示例

--创建用户,并制定表空间

create user username identified by password

default tablespace test_data

temporary tablespace test_temp;

--给用户授予权限

grant

create session, create any table, create any view ,create any index, create any procedure,

alter any table, alter any procedure,

drop any table, drop any view, drop any index, drop any procedure,

select any table, insert any table, update any table, delete any table

to username;

1.4.3用户授权

首先,grant XXX to user;,grant是授权的作用,这里的XXX可以是一个角色role,也可以是权限。

其次,connect和resource是两个系统内置的角色,和dba是并列的关系。

参考一些帖子的说法,权限可以分为两类:

系统权限:系统规定用户使用数据库的权限。(系统权限是对用户而言)。

实体权限:某种权限用户对其它用户的表或视图的存取权限。(是针对表或视图而言的)。

接下来看系统权限,

DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。

RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。

CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。

对于普通用户:授予connect, resource权限。

对于DBA管理用户:授予connect,resource, dba权限。

且系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)。普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户的权限也可以被回收。

1.5、查询用户

查看数据库里面所有用户默认的表空间:select * from dba_users order by username;

前提是你是有dba权限的帐号,如sys、system。

查看所有用户信息:select * from all_users;

查看当前用户信息:select * from user_users;

查看用户下所有的表:select * from user_tables;

查看当前用户连接:select * from V$Session;

查看某表的创建时间:

select object_name,created from user_objects where object_name=upper('&table_name');

查看后台进程:SELECT * FROM v$bgprocess WHERE paddr <> '00';

查看所有的数据表空间:select * from dba_data_files order by tablespace_name;

1.6、修改用户密码

alter user 用户名 identified by 新密码;

2、表空间

2.1、查询表空间

select * from v$datafile t;--查询DBF文件

Select * from dba_data_files;--查询数据表空间状态

Select * from dba_temp_files;--查询临时表空间状态

select * FROM v$services; --查询当前数据库容器类型(查询是CDB?还是PDB?)

select * from DBA_TABLESPACES; --查询当前数据库表空间类型

--查询Oracle表空间和数据文件信息:

select b.file_id 文件ID号,b.file_name 物理文件名,

b.tablespace_name 表空间,b.bytes/1024/ 1024 大小M,

(b.bytes-sum( nvl(a.bytes,0 )))/1024/ 1024 已使用M,

sum(nvl(a.bytes,0))/1024/1024||'M' 剩余空间,

substr((b.bytes-sum (nvl(a.bytes, 0)))/(b.bytes)*100 ,1, 5) as 利用率

from dba_free_space a,dba_data_files b

where a.file_id=b.file_id

group by b.file_id,b.tablespace_name,b.file_name,b.bytes

order by b.file_id;

--查看当前用户每个表占用空间的大小:

select segment_name,sum(bytes)/1024/1024 from user_extents group by segment_name;

--查看每个表空间已使用空间的大小:

select tablespace_name,sum(bytes)/1024/1024 from dba_segments group by tablespace_name;

查看表空间级别的日志记录模式:

select tablespace_name,logging,force_logging from dba_tablespaces;

2.2、修改表空间

更改数据表空间undo的大小:

alter database datafile 'D:\app\oracle\oradata\orcl\TEST_DATA.DBF' resize 102400M;

修改临时表空间temp的大小:

alter database tempfile 'D:\app\oracle\oradata\orcl\linshi_temp.dbf' resize 20480M;

将用户的默认数据表空间设为test:

alter user 用户名 default tablespace test;

将用户的默认临时表空间设为tmp:

alter user 用户名default temporary tablespace tmp;

将系统的默认数据表空间设为test:

alter database default tablespace test;

将系统的默认临时表空间设为tmp:

alter database default temporary tablespace tmp;

修改用户aa的默认数据表空间为tbs:

alter user aa default tablespace tbs;

修改用户aa的默认临时表空间为tmp:

alter user aa temporary tablespace tmp;

通过 ALTER DATABASE 命令来修改数据库默认的表空间类型:

ALTER DATABASE SET DEFAULT bigfile TABLESPACE;

ALTER DATABASE SET DEFAULT smallfile TABLESPACE;

2.3、删除表空间

--删除非空表空间,包含物理文件

drop tablespace tablespace_name including contents and datafiles;

--删除非空表空间,但是不包含物理文件

drop tablespace tablespace_name including contents;

--删除空表空间,包含物理文件

drop tablespace tablespace_name including datafiles;

--删除空的表空间,但是不包含物理文件

drop tablespace tablespace_name;

--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS

drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;

--删除临时表空间的一个数据文件:

alter database tempfile ‘/u01/app/oracle/oradata/orcl/temp02.dbf’ drop;

--删除表空间的某个数据文件:

alter tablespace tablespace_name drop datafile file_name;

3、SQL plus连接远程Oralce数据库

Windows系统,输入cmd,进入命令行程序。

sqlplus 用户名/密码@192.168.208.120:1521/orcl

4、修改数据库链接数

查看当前数据库链接数:

linux系统:

show parameter open_links

windows系统:

select name,value from v$parameter where name like '%link%';

备注:Oracle默认最多允许dblink数量是4个。

修改每个session最多允许的dblink数量:alter system set open_links=100 scope=spfile;

修改每个实例最多允许的dblink个数:alter system set open_links_per_instance=100 scope=spfile;

注意:重启后生效。

5、查询Oracle占用内存情况

select 'SGA' AS NAME,ROUND(sum(value)/1024/1024,2)||'M' AS "SIZE(M)" from v$sga

UNION

select 'PGA' AS NAME,ROUND(value/1024/1024,2)||'M' AS "SIZE(M)" from v$pgastat where name='total PGA allocated'

UNION

select 'TOTAL' AS NAME,((SELECT ROUND(sum(value)/1024/1024,2) from v$sga)+(select ROUND(value/1024/1024,2) from v$pgastat where name='total PGA allocated'))||'M' AS "SIZE(M)" FROM DUAL

UNION

SELECT NAME,TO_CHAR(VALUE) FROM V$PGASTAT WHERE NAME='process count';

6、日志记录模式(LOGGING 、FORCE LOGGING 、NOLOGGING)

6.1、三种日志记录模式的含义

LOGGING:当创建一个数据库对象时将记录日志信息到联机重做日志文件。LOGGING实际上是对象的一个属性,用来表示在创建对象时是否记录REDO日志,包括在做DML时是否记录REDO日志。一般表上不建议使用NOLOGGING,在创建索引或做大量数据导入时,可以使用NOLOGGING。

FORCE LOGGING:简言之,强制记录日志,即对数据库中的所有操作都产生日志信息,并将该信息写入到联机重做日志文件。

NOLOGGING:正好与LOGGING、FORCE LOGGING 相反,尽可能的记录最少日志信息到联机日志文件。

FORCE LOGGING可以在数据库级别、表空间级别进行设定、而LOGGING与NOLOGGING可以在数据对象级别设定。

在使用DATA GUARD 时,要求使用强制记录日志模式。注:FORCE LOGGING并不比一般的LOGGING记录的日志多,数据库在FORCE LOGGING状态下,NOLOGGING选项将无效,因为NOLOGGING将破坏DATAGUARD的可恢复性.FORCE LOGGING强制数据库在任何状态下必须记录日志。

6.2、与归档模式及非归档模式之间的关系

日志记录模式与归档模式之间并不能等同,归档模式是指对系统产生的日志是否进行归档或不归档。

归档模式下,将日志记录到日志文件,并进行归档。非归档模式下,同样将日志记录到日志文件,只不过不归档而已,容易丢失日志。

日志的记录模式则不论是否处于归档或非归档,可以对日志进行记录,强制记录,或少记录日志。

归档模式中的LOGGING或FORCE LOGGING 支持介质恢复,而NOLOGGING 模式不支持介质恢复。

基于NOLOGGING模式操作所产生的日志远小于LOGGING模式产生的日志,即NOLOGGING模式最小化日志记录。

6.3、优先级别

当数据库使用FORCE LOGGING时,具有最高优先级别,其次是表空间级别的FORCE LOGGING。即是当一个对象指定NOLOGGING时,而表空间或数据库级别的日志模式为FORCE LOGGING,则该选项不起作用,直到表空间或数据库级别的FORCE LOGGING解除。

一般建议将整个数据库设置为FORCE LOGGING或基于表空间级别设定FORCE LOGGING,而不建议两者都设置为FORCE LOGGING。

当数据库或表空间使用非强制日志模式时,则日记记录优先级别由低到高为:数据库、表空间、数据对象。