【Java EE 学习 30】【闪回】【导入导出】【管理用户安全】【分布式数据库】【数据字典】【方案】
2015-08-25 10:09
846 查看
一、闪回
1.可能的误操作
(1)错误的删除了记录
(2)错误的删除了表
(3)查询历史记录
(4)撤销已经提交了的事务。
2.对应着以上四种类型的误操作,有四种闪回类型
(1)闪回表:将表回退到过去的一个时间上
(2)闪回删除:还原Oracle回收站
(3)闪回版本查询:所有历史记录
(4)闪回事务查询:通过一个select 语句得到一个undo_sql,通过该undo_sql闪回
3.事实上oracle数据库还有另外两种闪回类型
(5)闪回数据库
(6)闪回归档日志
4.系统改变号:由时间戳通过某种算法得到的一个整数,该整数唯一的确认了某个时间,通常通过该整数进行闪回操作。使用的函数:timestamp_to_scn
屏幕录制
4.疑问:怎样获取历史记录(以上演示方法在现实生产环境中不可能被使用)
二、闪回删除
1.普通用户有回收站,但是管理员并没有回收站,所以不要使用管理员账户对表进行增删查该操作。管理员只用于管理。
2.普通用户删除表之后(不使用purge命令),表会进入回收站,闪回删除的目的就是将回收站中的表恢复到删除之前的状态。
3.进入到回收站中的表名可以相同,但是回收站会为每个表进行唯一的标识,即recyclebin name
4.普通用户通过select * from tab可以看到回收站中的表。
可以查看每个表中的内容,但是表名要加上双引号。
5.如果回收站中的两个表在删除前表名相同,则如果闪回成功,先闪回先进入回收站中的表。
6.模板代码
如果想要闪回触发器,则使用enable triggers,默认不闪回触发器。
7.闪回删除的步骤
(1)如果没有表名冲突,则使用下面的命令就可以了。
(2)如果有表名冲突,先闪回先进入回收站中的表。
(3)如果当前用户下已经有了一张和回收站中同名的表,则如果不采取重命名的手段,就不能闪回。
(4)闪回重命名
三、闪回版本查询
1.使用视图:flashback_transaction_query
2.查询一张表的历史记录版本模板代码
3.示例
(1)创建表versions_table,并对其进行DML操作
(2)对该表进行闪回版本查询
(3)通过事务号进行闪回事务查询。
四、闪回事务查询
1.闪回事务查询实际上是闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销某个事务。
2.需要使用flashback_transaction_query视图。
3.查询flashback_transaction_query视图需要有select any transaction的权限。
4.以三中的事务为例,撤销修改成小红的操作。
(1)从闪回版本查询中,获取xid号(事务号)
(2)基于xid,在flashback_transaction_query视图中获取响应的事务信息。
(3)使用查询到的sql语句撤销提交的操作。
(4)疑问:最后一步失败了?11g需要命令?alter database add supplemental log data;错误,闪回版本查询为空!
五、导入导出
1.导出:使用exp命令。
(1)表方式,例:
(2)用户方式,例:
(3)全库方式,例:
2.导入
(1)导入一张或者几张表
(2)导入用户下的表
(3)导入数据库
六、管理用户安全。
1.创建用户
(1)创建用户
(2)为用户分配系统权限create session,否则不能登录数据库
(3)为用户分配users表空间并允许用户无限制使用该表空间(不分配表空间无法创建表)。
2.授权
(1)with admin option:不能级联撤销权限
A授予B权限,B再授予C权限,当A从B中将权限撤销的时候,C的权限仍然保留。
(2)with grant option:能够级联撤销权限
A授予B权限,B再授予C权限,当A从B中将权限撤销的时候,C的权限也会被撤销。
3.撤销权限:使用revoke命令
4.角色
(1)创建角色
(2)为角色赋权限
(3)为角色赋予角色的权限
(4)将角色赋予新用户
(5)一般来说,在创建新用户的时候会将connect、resource两个角色赋予新用户。
七、分布式数据库
1.分布式数据库物理上被存放在网络上的多个节点,逻辑上是一个整体。
2.怎样实现分布式数据库之间的通信
(1)利用Net Manager配置本地命名。
(2)在本地定义数据库链路。
参数说明:
[DB_LINK_NAME]:是所要连接的数据库的服务名,也就是该数据库的真实名称(通常就是SID)。
[USRE_NAME]:是所要连接的用户名称。
[PASSWORD]:是所要连接的用户的密码。
[TNS_NAME]:是所要连接的数据库的服务命名。
3.分布式数据库使用示例。
(1)新建数据库服务命名。使用Net Manager的方法略。新建的服务命名为:remote_orcl
(2)新建数据库链接:
(3)查询操作
该操作查询远程数据库emp表中的数据。
4.可以为远程数据库中的表创建同义词,方便访问,而且更加安全。
下次我们便可以使用 from remoteEmp的方式来访问该远程表了。
5.触发器应用场景三:同步数据
目标:同步远程数据库emp表和本地emp表的的薪水字段。
(1)创建触发器
(2)将7369号的员工薪水设置为-9999
(3)查看本地数据库中的emp表和远程数据库中的emp表中的薪水是否已经同步了。
八、数据字典
1.Oracle数据库中的表分为两种
(1)基本表:描述数据库信息,只能由数据库服务器进行修改
(2)用户表:用户自定义的表。
2.数据字典前缀命名规则
user:用户自己的
all:用户可以访问到的
dba:管理员视图
v$性能相关的数据
3.如何使用数据字典
从Dictionary开始,这个表中包含了所有数据字典的表名和说明。
4.user_objects视图和all_objects视图。
(1)通过前者可以查看用户自己创建的所有对象,包括表、视图、触发器、存储过程、同义词、序列、数据库链路等。
(2)通过后者可以查看用户在权限之内能够访问的对象。
5.user_sequences:通过该视图查询序列信息。
6.使用comment语句给表添加注释。
(1)comment on table employees is '注释内容';
(2)查询表注释:select * from user_tab_comments where table_name='表名';
7.user_tables:通过该视图查询所有用户表。
8.user_views:通过该视图查询用户创建的所有视图。
9.user_constraints:查询用户表上的约束。
10.总结:
DICTIONARY
USER_OBJECTS
USER_TABLES
USER_TAB_COLUMNS
USER_CONSTRAINTS
USER_CONS_COLUMNS
USER_VIEWS
USER_SEQUENCES
USER_TAB_SYNONYMS
表注释九、方案
1.方案,即schema,一个用户对应着一个方案,一个方案对应着用户下面的所有数据库对象。
2.使用EM管理方案,即使用EM对表、视图、索引、同义词、触发器、存储过程、存储函数、数据库链路等进行管理,包括增删改查操作。
1.可能的误操作
(1)错误的删除了记录
(2)错误的删除了表
(3)查询历史记录
(4)撤销已经提交了的事务。
2.对应着以上四种类型的误操作,有四种闪回类型
(1)闪回表:将表回退到过去的一个时间上
(2)闪回删除:还原Oracle回收站
(3)闪回版本查询:所有历史记录
(4)闪回事务查询:通过一个select 语句得到一个undo_sql,通过该undo_sql闪回
3.事实上oracle数据库还有另外两种闪回类型
(5)闪回数据库
(6)闪回归档日志
4.系统改变号:由时间戳通过某种算法得到的一个整数,该整数唯一的确认了某个时间,通常通过该整数进行闪回操作。使用的函数:timestamp_to_scn
select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') 时间,timestamp_to_scn(systimestamp) SCN from dual;
SQL> create table flashback_table ( 2 tid number,tname varchar(10)); 表已创建。 SQL> edit 已写入 file afiedt.buf 1 create table flashback_table ( 2* tid number,tname varchar(10)) SQL> SQL> SQL> insert into flashback_table values(&tid,'&tname'); 输入 tid 的值: 1 输入 tname 的值: 小明 原值 1: insert into flashback_table values(&tid,'&tname') 新值 1: insert into flashback_table values(1,'小明') 已创建 1 行。 SQL> 、 SP2-0042: 未知命令 "、" - 其余行忽略。 SQL> / 输入 tid 的值: 2 输入 tname 的值: 小张 原值 1: insert into flashback_table values(&tid,'&tname') 新值 1: insert into flashback_table values(2,'小张') 已创建 1 行。 SQL> / 输入 tid 的值: 3 输入 tname 的值: 小强 原值 1: insert into flashback_table values(&tid,'&tname') 新值 1: insert into flashback_table values(3,'小强') 已创建 1 行。 SQL> edit 已写入 file afiedt.buf 1* insert into flashback_table values(&tid,'&tname') SQL> SQL> SQL> select * from flashback_table; TID TNAME ---------- -------------------- 1 小明 2 小张 3 小强 SQL> commit 2 ; 提交完成。 SQL> select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') 时间,timestamp_to_scn(systimestamp) SCN; select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') 时间,timestamp_to_scn(systimestamp) SCN * 第 1 行出现错误: ORA-00923: 未找到要求的 FROM 关键字 SQL> select to_char(systimestamp,'yyyy-mm-dd hh24:mi:ss*ff') 时间,timestamp_to_scn(systimestamp) SCN from dual; 时间 SCN ---------------------------------------------------------- ---------- 2015-08-25 11:01:03*597000 1569572 SQL> delete from flashback_table where tid=2; 已删除 1 行。 SQL> commit 2 ; 提交完成。 SQL> select * from flashback_table; TID TNAME ---------- -------------------- 1 小明 3 小强 SQL> flashback table flashback_table to scn 1569572; flashback table flashback_table to scn 1569572 * 第 1 行出现错误: ORA-08189: 因为未启用行移动功能, 不能闪回表 SQL> alter table flashback_table enabel row movement; alter table flashback_table enabel row movement * 第 1 行出现错误: ORA-01735: 无效的 ALTER TABLE 选项 SQL> alter table flashback_table enable row movement; 表已更改。 SQL> SQL> SQL> SQL> SQL> SQL> flashback table flashback_table to scn 1569572; 闪回完成。 SQL> select * from flashback_table; TID TNAME ---------- -------------------- 1 小明 2 小张 3 小强 SQL>
屏幕录制
4.疑问:怎样获取历史记录(以上演示方法在现实生产环境中不可能被使用)
二、闪回删除
1.普通用户有回收站,但是管理员并没有回收站,所以不要使用管理员账户对表进行增删查该操作。管理员只用于管理。
2.普通用户删除表之后(不使用purge命令),表会进入回收站,闪回删除的目的就是将回收站中的表恢复到删除之前的状态。
3.进入到回收站中的表名可以相同,但是回收站会为每个表进行唯一的标识,即recyclebin name
4.普通用户通过select * from tab可以看到回收站中的表。
可以查看每个表中的内容,但是表名要加上双引号。
5.如果回收站中的两个表在删除前表名相同,则如果闪回成功,先闪回先进入回收站中的表。
6.模板代码
flashback table [schema.]table_name[,...n] to {[scn] | [timestamp] [[enable | disable] triggers]};
如果想要闪回触发器,则使用enable triggers,默认不闪回触发器。
7.闪回删除的步骤
(1)如果没有表名冲突,则使用下面的命令就可以了。
flashback table test to before drop;
(2)如果有表名冲突,先闪回先进入回收站中的表。
(3)如果当前用户下已经有了一张和回收站中同名的表,则如果不采取重命名的手段,就不能闪回。
(4)闪回重命名
flashback table test to before drop rename to test1;
三、闪回版本查询
1.使用视图:flashback_transaction_query
2.查询一张表的历史记录版本模板代码
select column_name[,column_name,...] from table_name versions between [SCN|TIMESTAMP] [expr|MINVALUE] and [epxr|MAXVALUE] as of [SCN|TIMESTAMP] expr;
3.示例
(1)创建表versions_table,并对其进行DML操作
create table version_table( tid number, tname varchar(10) ); insert into version_table values(1,'小张'); commit; insert into version_table values(2,'小明'); commit; insert into version_table values(3,'小强'); commit; update version_table set tname='小红' where tid=1; commit;
(2)对该表进行闪回版本查询
col tid for 999; col tname for a10; col 开始时间 for a30; col 结束时间 for a30; col 操作 for a2; col 事务号 for a16;
select tid,tname,versions_starttime 开始时间,versions_endtime 结束时间,versions_operation 操作,versions_xid 事务号 from version_table versions between scn minvalue and maxvalue order by 1,4
(3)通过事务号进行闪回事务查询。
四、闪回事务查询
1.闪回事务查询实际上是闪回版本查询的一个扩充,通过它可以审计某个事务甚至撤销某个事务。
2.需要使用flashback_transaction_query视图。
3.查询flashback_transaction_query视图需要有select any transaction的权限。
--管理员授予权限 grant select any transaction to scott;
4.以三中的事务为例,撤销修改成小红的操作。
(1)从闪回版本查询中,获取xid号(事务号)
select tid,tname,versions_starttime 开始时间,versions_endtime 结束时间,versions_operation 操作,versions_xid 事务号 from version_table versions between scn minvalue and maxvalue order by 1,4
(2)基于xid,在flashback_transaction_query视图中获取响应的事务信息。
select undo_sql from flashback_transaction_query where xid='04000B00DA030000'
(3)使用查询到的sql语句撤销提交的操作。
(4)疑问:最后一步失败了?11g需要命令?alter database add supplemental log data;错误,闪回版本查询为空!
五、导入导出
1.导出:使用exp命令。
(1)表方式,例:
exp scott/tiger@localhost:1521/orcl file=d:/temp/1.dmp log=d:/temp/log.logtables=emp,dept
(2)用户方式,例:
exp scott/tiger@localhost:1521/orcl file=d:/temp/1.dmp log=d:/temp/log.log
(3)全库方式,例:
exp sys/密码@localhost:1521/orcl file=D:/temp/temp.dmp log=D:/temp/log.log full=y
2.导入
(1)导入一张或者几张表
imp hr/hr@localhost:1521/orcl file=d:/temp/temp.dmp log=d:/temp/temp.log tables=emp,dept fromuser=scott touser=hr commit=y ignore=n
(2)导入用户下的表
imp hr/hr@localhost:1521/orcl file=d:/temp/temp.dmp log=d:/temp/temp.log fromuser=scott touser=hr commit=y ignore=n
(3)导入数据库
imp sys/密码@localhost:1521 file=D:/temp/temp.dmp log=D:/temp/temp.log full=y imgnore=y destroy=y
六、管理用户安全。
1.创建用户
(1)创建用户
create user kdyzm identified by root
(2)为用户分配系统权限create session,否则不能登录数据库
grant create session to kdyzm;
(3)为用户分配users表空间并允许用户无限制使用该表空间(不分配表空间无法创建表)。
alter user kdyzm quota unlimited on users;
2.授权
(1)with admin option:不能级联撤销权限
A授予B权限,B再授予C权限,当A从B中将权限撤销的时候,C的权限仍然保留。
(2)with grant option:能够级联撤销权限
A授予B权限,B再授予C权限,当A从B中将权限撤销的时候,C的权限也会被撤销。
3.撤销权限:使用revoke命令
4.角色
(1)创建角色
create role kdyzm_role
(2)为角色赋权限
grant create session to kdyzm_role;
(3)为角色赋予角色的权限
create role general_role ; grant create table,kdyzm_role to general_role;
(4)将角色赋予新用户
create user newuser identified by new; grant general_role to newuser;
(5)一般来说,在创建新用户的时候会将connect、resource两个角色赋予新用户。
七、分布式数据库
1.分布式数据库物理上被存放在网络上的多个节点,逻辑上是一个整体。
2.怎样实现分布式数据库之间的通信
(1)利用Net Manager配置本地命名。
(2)在本地定义数据库链路。
CREATE DATABASE LINK [db_link_name] CONNECT TO [user_name] IDENTIFIED BY [password] USING '[tns_name]';
参数说明:
[DB_LINK_NAME]:是所要连接的数据库的服务名,也就是该数据库的真实名称(通常就是SID)。
[USRE_NAME]:是所要连接的用户名称。
[PASSWORD]:是所要连接的用户的密码。
[TNS_NAME]:是所要连接的数据库的服务命名。
3.分布式数据库使用示例。
(1)新建数据库服务命名。使用Net Manager的方法略。新建的服务命名为:remote_orcl
(2)新建数据库链接:
create database link remote_link connect to scott identified by tiger using 'remote_orcl';
(3)查询操作
select * from emp@remote_link ;
该操作查询远程数据库emp表中的数据。
4.可以为远程数据库中的表创建同义词,方便访问,而且更加安全。
create synonym remoteEmp for emp@remote_link;
下次我们便可以使用 from remoteEmp的方式来访问该远程表了。
5.触发器应用场景三:同步数据
目标:同步远程数据库emp表和本地emp表的的薪水字段。
(1)创建触发器
create or replace trigger synsal after update on emp for each row begin update remoteEmp set sal=:new.sal where empno=:new.empno; end; /
(2)将7369号的员工薪水设置为-9999
update emp set sal=-9999 where empno=7369; commit;
(3)查看本地数据库中的emp表和远程数据库中的emp表中的薪水是否已经同步了。
八、数据字典
1.Oracle数据库中的表分为两种
(1)基本表:描述数据库信息,只能由数据库服务器进行修改
(2)用户表:用户自定义的表。
2.数据字典前缀命名规则
user:用户自己的
all:用户可以访问到的
dba:管理员视图
v$性能相关的数据
3.如何使用数据字典
从Dictionary开始,这个表中包含了所有数据字典的表名和说明。
4.user_objects视图和all_objects视图。
(1)通过前者可以查看用户自己创建的所有对象,包括表、视图、触发器、存储过程、同义词、序列、数据库链路等。
(2)通过后者可以查看用户在权限之内能够访问的对象。
5.user_sequences:通过该视图查询序列信息。
6.使用comment语句给表添加注释。
(1)comment on table employees is '注释内容';
(2)查询表注释:select * from user_tab_comments where table_name='表名';
7.user_tables:通过该视图查询所有用户表。
8.user_views:通过该视图查询用户创建的所有视图。
9.user_constraints:查询用户表上的约束。
10.总结:
DICTIONARY
USER_OBJECTS
USER_TABLES
USER_TAB_COLUMNS
USER_CONSTRAINTS
USER_CONS_COLUMNS
USER_VIEWS
USER_SEQUENCES
USER_TAB_SYNONYMS
表注释九、方案
1.方案,即schema,一个用户对应着一个方案,一个方案对应着用户下面的所有数据库对象。
2.使用EM管理方案,即使用EM对表、视图、索引、同义词、触发器、存储过程、存储函数、数据库链路等进行管理,包括增删改查操作。
相关文章推荐
- eclipse导入注释模板
- Java二分查找算法
- Tapestry 5.3.8 + Spring 4.0.5 小例子(二)
- spring 连接sqlserver数据库
- b36e Java中Map的containKey() 方法
- Eclipse注释模板设置详解
- java基本数据类型所占字节数
- Java从入门到精通(实例版) 例9.11访问构造方法
- java 实现CRC32和MD5
- java资源文件解读
- Struts2入门示例
- Spring 扫描不到 Mybatis的Mapper的interface
- leetcode Reverse Integer java基本编程学习笔记(一)
- 各种排序算法的分析及java实现
- Java中用浮点型数据Float和Double进行精确计算时的精度问题
- Android-eclipse-NDK&JNI
- eclipse工程手动迁移android-studio
- 数据库SQL Server2012笔记(七)——java 程序操作sql server
- 安装JDK及环境变量设置
- Java生成六位验证码(发短信验证)