也学Oracle之辟谷篇

Oracle系统函数
概述:sys_context('userenv','param')函数:通过该函数,可以查询一些重要信息。比如你在使用哪个数据库
说明:1)host:返回数据库所在主机的名称
          2)lanuage:语言
          3)db_name:当前数据库名称
          4)terminal:当前会话客户所对应的终端标识符
          5)session_user:当前会话客户所对应的数据库用户名
          6)current_schema:当前会话客户所对应的默认方案名
          7)nls_date_format:当前会话客户所对应的日期格式

select sys_context('userenv','db_name') from dual;        --查询当前所使用的数据库名称
select sys_context('userenv','session_user') from dual;   --查询当前在操作数据库的用户
select sys_context('userenv','current_schema') from dual; --查询当前在操作的数据库方案



动态性能视图
用于记录当前例程的活动信息。它的所有者为SYS。一般情况下,由dba或特权用户来查询动态性能视图
当启动Oracle Server时,系统会建立动态性能视图;当停止Oracle Server时,系统会删除动态性能视图
Oracle的所有动态性能视图都是以v_$开始的,并且Oracle为每个动态性能视图都提供了相应的以v$开始的同义词
例如v_$datafile的同义词为v$datafile



数据字典
概述:这是Oracle数据库中最重要的组成部分,它记录了数据库的系统信息,它是只读表和视图的集合,它的所有者为SYS用户
          通过查询数据字典可以取得这些系统信息:对象定义情况、对象占用空间大小、列信息、约束信息......
          用户只能在数据字典上执行select操作,而其维护和修改是由系统自动完成的
分类:它包括数据字典基表和数据字典动态视图,可以粗略的理解为基表存放静态数据,而动态视图存放动态数据
          数据字典基表存储数据库的基本信息,普通用户无法直接访问数据字典的基表
          数据字典动态视图是基于数据字典基表所建立的视图,普通用户可以select数据字典动态视图取得系统信息
数据字典动态视图:它主要包括user_xxx、all_xxx、dba_xxx三种类型
                               在建立用户以及给用户授予权限或角色时,Oracle会把相应的信息存放到数据字典中
                               通过查询dba_users可以显示所有数据库用户的详细信息
                               通过查询dba_sys_privs可以显示用户所具有的系统权限
                               通过查询dba_tab_privs可以显示用户所具有的对象权限
                               通过查询dba_col_privs可以显示用户所具有的列权限
                               通过查询dba_role_privs可以显示用户所具有的角色

--user_tables
select table_name from user_tables; --用于显示当前用户所拥有的所有表,它只返回用户所对应方案的所有表

--all_tables
select table_name from all_tables;  --用于显示当前用户可以访问的所有表,它会返回当前用户方案的所有表,以及该用户可以访问的其它方案的表

--dba_tables
--它会显示所有方案拥有的数据库表。但查询该数据字典视图,要求用户必须是dba角色或者有select any table系统权限
--比如当system用户查询数据字典视图dba_tables时,会返回system、sys、scott....方案所对应的数据库表
select * from dict where comments like '%grant%';                            --显示当前用户可以访问的所有数据字典视图
select * from global_name;                                                   --显示当前数据库名称
select tablespace_name from dba_tablespaces;                                 --显示表空间的信息
select file_name,bytes from dba_data_files where tablespace_name='表空间名'; --显示表空间所包含的数据文件

--角色和权限:一个角色可以包含多个权限
select * from dba_roles;                             --查询Oracle中所有的角色,一般是dba
select distinct privilege from dba_tab_privs;        --查询Oracle中所有对象权限,一般是dba
select * from system_privilege_map order by name;    --查询Oracle中所有的系统权限,一般是dba
select tablespace_name from dba_tablespaces;         --查询数据库的表空间
select * from role_sys_privs where role='CONNECT';   --查询CONNECT角色所具有的系统权限
select * from dba_sys_privs where grantee='CONNECT'; --查询CONNECT角色所具有的系统权限
select * from dba_tab_privs where grantee='CONNECT'; --查询CONNECT角色所具有的对象权限



权限
概述:执行特定类型sql命令或者访问其它方案对象的权利。权限包括系统权限和对象权限两种。
系统权限:用于控制用户可以执行的一个或一组数据库操作
                 Oracle9i提供了100多种系统权限。而且Oracle版本越高,其提供的系统权限就越多
                 新建用户没有任何权限,甚至连登录数据库的权限都没有。所以需要为其指定相应的权限
                 通常由dba或者具有grant any privilege权限的其它用户执行授予操作
                 授予系统权限时,可以带有with admin option选项,指明被授予的用户或角色还可以将该系统权限授予其它用户或角色
                 常用的系统权限有如下几种
                 create session-----------连接数据库
                 create table-------------用户可在自身方案中建表
                 create any table---------用户可在任何方案中建表
                 create view--------------建视图
                 create procedure--------建过程、函数、包
                 create trigger------------建触发器
                 create cluster------------建簇
                 create public synonym--建同义词

--回收系统权限
--通常由dba来完成,若使用其它用户来回收权限,则要求其具有相应系统权限及转授系统权限的选项(with admin option)
grant create session, create table to Michael with admin option; --使用SYSTEM用户为Michael授予权限
grant crate session to Mahone;                                   --使用Michael用户为Mahone授予登录数据库的权限
revoke create session from Michael;                              --系统权限是不会级联回收的,即此时Mahone还是能够登录数据库的
revoke select on emp from myjava;                                --回收myjava用户对scott的emp表的查询权限。注意:谁赋的权,就要由谁收回
对象权限:指访问其它方案对象的权利。用户可以直接访问自己方案的对象,但要访问别的方案的对象,则必须具有对象的权限
                 常用的有:alter、insert、delete、update、select、index(索引)、references(引用)、execute(执行包、过程、函数的权限)
--授予对象权限
--在Oracle9i前,授予对象权限是由对象的所有者或者具有相应的(with grant option)权限的用户来操作的
--从Oracle9i起,dba用户(SYS、SYSTEM)可以将任何对象上的对象权限授予其它用户
--对象权限可以授予用户、角色和public。授予权限时若带有with grant option选项,则可以将该权限转授其它用户
--但是,with grant option选项是不能授予给角色的,它只能授予给用户
grant update on emp(sal) to Michael;          --授予Michael用户只可以修改scott.emp表的sal字段的权限
grant alter on emp to Michael;                --授予Michael用户修改scott.emp表结构的权限
grant execute on dbms_transaction to Michael; --授予Michael用户执行包dbms_transaction的权限
grant index on scott.emp to Michael;          --授予Michael用户可以在scott方案中的emp表上建立索引的权限

--回收对象权限
--对象权限的回收是会被级联回收的
grant connect to myjava with admin option;       --如果是系统权限,就加入with admin option
grant select on emp to myjava with grant option; --如果是对象权限,就加入with grant option
grant select on scott.emp to myjava22;           --级联回收机制:若scott回收myjava对emp表的查询权限,那么得到myjava授权的myjava22也会失去select权限



角色
概述:相关权限的命令集合。使用角色的主要目的就是为了简化权限的管理
分类:角色分为预定义角色和自定义角色
预定义角色:指Oracle所提供的角色,每种角色都用于执行一些特定的管理任务。常用的预定义角色有connect、resource、dba
                     connect:具有应用开发人员需要的大部分权限。多数情况下,只要给新创建的用户授予connect和resource角色就够了
                                     它包含了以下系统权限
                                     alter session、create cluster、create database link、create session、create table、create view、create sequence
                     resource:具有应用开发人员所需要的其它权限。比如建立存储过程、触发器等。注意该角色隐含了unlimited tablespace系统权限
                                      它包含了以下系统权限
                                      create cluster、create indextype、create table、create sequence、create type、create procedure、create trigger
                     dba:具有所有的系统权限,以及with admin option选项。默认的dba用户为SYS和SYSTEM,他们可以将任何系统权限授予其它用户
                               但要注意,dba角色不具备sysdba和sysoper的特权(启动和关闭数据库)
自定义角色:一般由dba或者具有create role系统权限的其它用户来建立。建立角色时,可以指定验证方式,即不验证和数据库验证
                     1)不验证:如果角色是公用的角色,可以采用不验证的方式建立角色
                                     SQL>create  role  角色名  not  identified;
                     2)数据库验证:此时建立角色需要为其提供口令。角色名和口令存放在数据库中。当激活该角色时,必须提供口令
                                             SQL>create  role  角色名  identified  by  口令;
精细访问控制:指用户可以使用函数、策略实现更加细微的安全访问控制
                        如果使用精细访问控制,则当在客户端发出SQL语句时,Oracle会自动在SQL语句后面追加谓词(where子句),并执行新的SQL语句
                        通过这样的控制,可以使得不同的数据库用户在访问相同表时,返回不同的数据信息

---------------------------------------------------------------------------------------------------------------------
--授权角色
--新建立角色时,该角色没有任何权限。为了使得角色能够完成特定任务,必须为其授予相应的系统权限和对象权限

--1)给角色授权和给用户授权没有太多区别,但要注意,系统权限的unlimited tablesapce和对象权限的with grant option选项是不能授予角色的
grant create session to 角色名 with admin option;
grant select on scott.emp to 角色名;
grant insert,update,delete on scott.emp to 角色名;
grant select on emp to myjava; --授权myjava用户可以查询scott的emp表。此时必须是scott或者更高权限如dba方才进行该操作
                               --此时应该使用select * from scott.emp来查询,否则还是查不到数据
grant all on emp to myjava;    --授权myjava用户拥有scott相对于emp表的所有权限,其查询、修改、删除表数据的权限

--2)分配角色给某个用户。通常由dba或具有grant any role系统权限的其它用户来完成
grant 角色名 to Michael with admin option; --授予Michael用户一个角色,且Michael可以将该角色继续授予给其它用户
grant resource to myjava;                  --授权myjava用户可在任意表空间下建表
grant connect to myjava;                   --授权myjava用户拥有登录权限
grant dba to myjava;                       --授权myjava用户拥有DBA权限

---------------------------------------------------------------------------------------------------------------------
--删除角色:使用drop role命令。通常由dba或具有drop any role系统权限的其它用户来执行
drop role 角色名; --此时该角色所被授予的用户,将同时会失去该角色所包含的权限

---------------------------------------------------------------------------------------------------------------------
--显示角色
--当以用户的身份连接到数据库时,Oracle会自动激活默认的角色
--通过dba_role_privs可以显示某个用户具有的所有角色以及当前默认的角色
select * from dba_role_privs where grantee='用户名'; --显示某个用户具有的所有角色以及当前默认的角色
select * from dba_roles;                             --显示所有角色,包括预定义和自定义的角色
select * from role_sys_privs where role='角色名'     --显示角色所具有的系统权限
select * from dba_tab_privs where grantee='角色名';  --显示角色所具有的对象权限
---------------------------------------------------------------------------------------------------------------------



数据库表的逻辑备份与恢复
逻辑备份:使用工具export将数据对象的结构和数据导出到文件的过程
逻辑恢复:当数据库对象被误操作而损坏后,使用工具import利用备份的文件把数据对象导入到数据库的过程
                 物理备份可在数据库open的状态下进行,也可在关闭数据库后进行,但逻辑备份与恢复只能在open的状态下进行
导出:具体分为导出表、导出方案、导出数据库三种方式。导出使用exp命令来完成,该命令常用的选项如下
          userid---用于指定执行导出操作的用户名、口令、连接字符串
          tables---用于指定执行导出操作的表
          owner----用于指定执行导出操作的方案
          full=y---用于指定执行导出操作的数据库
          inctype--用于指定执行导出操作的增量类型
          rows-----用于指定执行导出操作是否要导出表中的数据
          file-----用于指定导出的文件名

---------------------------------------------------------------------------------------------------------------------
--导出表

--导出自己的表
exp userid=scott/hongyu@jadyer tables=(emp,dept) file=d:\table_emp_dept.dmp

--导出其它方案的表:此时该用户需要dba权限或者exp_full_database权限,比如system用户就可导出scott的表
exp userid=system/manager@jadyer tables=(scott.emp) file=d:\table_emp.dmp

--导出表的结构
exp userid=scott/hongyu@jadyer tables=(emp) file=d:\structure_emp.dmp rows=n

--直接导出方式
--这种方式比默认的常规方式速度要快。当数据量大时,可以考虑使用这种方法
--这时需要数据库的字符集要与客户端字符集完全一致,否则会报错。。。
exp userid=scott/hongyu@jadyer tables=(emp) file=d:\data_emp.dmp direct=y

---------------------------------------------------------------------------------------------------------------------
--导出方案
--指使用export工具导出一个方案或者多个方案中的所有对象(表、索引、约束等等)和数据,并存放到文件中

--导出自己的方案
exp userid=scott/hongyu@jadyer owner=scott file=d:\schema_scott.dmp

--导出其它的方案:此时该用户需要dba权限或者exp_full_database权限,比如system用户就可以导出任何方案
exp userid=system/manager@jadyer owner=(system,scott) file=d:\schema_system_scott.dmp

---------------------------------------------------------------------------------------------------------------------
--导出数据库
--利用export工具导出数据库中的对象及数据,要求该用户具有dba权限或者exp_full_database权限
exp userid=system/manager@jadyer full=y inctype=complete file=d:\database_bak.dmp
---------------------------------------------------------------------------------------------------------------------
导入:使用工具import将文件中的对象和数据导入到数据库中。 但导入的文件必须是export所导出的文件
          与导出相似, 导入也分为导入表、导入方案、导入数据库三种方式,该命令常用的选项如下
           userid---用于指定执行导出操作的用户名、口令、连接字符串
          tables---用于指定执行导入操作的表
          fromuser-用于指定源用户
          touser---用于指定目标用户
          file-----用于指定导入的文件名
          full=y---用于指定执行导入整个文件
          inctype--用于指定执行导入操作的增量类型
          rows-----用于指定是否导入表行(数据)
          ignore---如果表存在,则只导入数据
---------------------------------------------------------------------------------------------------------------------
--导入表

--导入自己的表
imp userid=scott/hongyu@jadyer tables=(emp) file=d:\table_emp.dmp

--导入表到其它用户:此时要求该用户具有dba或者imp_full_database权限
imp userid=system/manager@jadyer tables=(emp) file=d:\table_emp touser=scott

--导入表的结构:只导入表的结构,而不导入数据
imp userid=scott/hongyu@jadyer tables=(emp) file=d:\table_emp rows=n

--导入数据:如果对象(比如表)已经存在,可以只导入表的数据
imp userid=scott/hongyu@jadyer tables=(emp) file=d:\table_emp ignore=y

---------------------------------------------------------------------------------------------------------------------
--导入方案
--使用import工具将文件中的对象和数据导入到一个或者多个方案中
--若要导入其它方案,则要求该用户具有dba或者imp_full_database权限

--导入自身的方案
imp userid=scott/hongyu file=d:\schema_scott.dmp

--导入其它的方案
imp userid=system/manager file=d:\schema_system.dmp fromuser=system touser=scott

---------------------------------------------------------------------------------------------------------------------
--导入数据库
--默认情况下,会导入所有对象结构和数据。此时甚至连实例都不用指定,它会自动创建一个实例
imp userid=system/manager full=y file=d:\database_bak.dmp
---------------------------------------------------------------------------------------------------------------------

你可能感兴趣的:(oracle,数据库,session,table,database,System)