oracle中的savepoints是什么
什么是savepoint?
Use the SAVEPOINT statement to identify a point in a transaction to which you can later roll back.
给你个例子
SQL> create table test (id number(7));
表已创建。
SQL> insert into test values (3);
已创建 1 行。
SQL> savepoint a;
保存点已创建。
SQL> insert into test values (4);
已创建 1 行。
SQL> select * from test;
ID
----------
3
4
SQL> rollback to a;
回退已完成。
SQL> select * from test;
ID
----------
3
SQL> rollback;
回退已完成。
SQL> select * from test;
未选定行
事务中的Savepoints
你可以在事务上下文中声明称为savepoint的中间标记。Savepoint将一个长事务分隔为较小的部分。
使用savepoint,你可以在长事务中任何点任意标记你的操作。然后你可以选择回滚在事务中当前点之前、声明的savepoint之后执行的操作。比如,你可以在一长段复杂的更新中使用savepoint,如果犯了个错,你不需要重新提交所有语句。
Savepoints在应用程序中同样有用。如果一个过程包含几个函数,那可以在每个函数前创建一个savepoint。如果一个函数失败,返回数据到函数开始前的状态并在修改参数或执行一个恢复操作后重新运行函数就非常容易。
在回滚到一个savepoint后,Oracle释放由被回滚的语句持有的锁。其他等待之前被锁资源的事务可以进行了。其他要更新之前被锁行的事务也可以执行。
当一个事务回滚到一个savepoint,发生下列事件:
1. Oracle仅回滚savepoint之后的语句。
2. Oracle保留这一savepoint,但所有建立于此后的savepoints丢失。
3. Oracle释放在该savepoint后获得的所有表、行锁,但保留之前获得的所有锁。
事务保持活动并可继续。
无论何时一个会话在等待事务,到savepoint的回滚不会释放行锁。为了确保事务如果无法获得锁也不会悬挂(hang),在执行UPDATE或DELETE前使用FOR UPDATE ... NOWAIT。(这里指回滚的savepoint之前获得的锁。该savepoint后获得的行锁会被释放,之后执行的语句也会被彻底回滚。)
相关文档:
author:skate
time:2010-05-25
数据文件管理
1. datafile add
2. datafile delete
3. datafile resize
4. datafile rename
1. datafile add
添加表空间,从而添加datafile
SQL> create tablespace tbs_skate
2 datafile '+datagroup' size 20m;
Tablespace created
SQL> sel ......
author:skate
time:2010-05-25
Oracle数据库管理脚本说明
Oracle 中的数据字典是数据库中的非常重要的一部分,提供了相关数据库的信息,它是所有Oracle用户(从应用的最终用户、应用的设计开发者到数据库管理员)的非常重要的信息来源。数据字典的创建,是在Oracle数据库创建完毕后,运行一些相关的数据库管理脚本来完 ......
前几天帮一个朋友弄ORACLE跨数据库的操作,共享下具体的操作流程:
一、不同IP的数据库(DBLINK)
本地数据库ip 10.56.7.26
远程数据库ip 233.215.219.8
1.在10.56.7.26数据库安装文件中,找到$ORACLE_HOME/network/admin/tnsnames.ora文件,
末尾添加
MEDIADBLINK =
(DESCRIPTION =
&n ......
----本用户所拥有的系统权限:
select * from user_sys_privs;
---本用户读取其他用户对象的权限:
select * from user_tab_privs;
-----添加权限
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE&nbs ......
为了做虚拟机,需要将服务器上的11g的用户的完整数据导出来。而虚拟机上的oracle10g的,直接导出来,无法导入到虚拟机。
所以,试着用10g的客户端来导出数据,
用命令:exp exoa/*****@exoa1 file=20100526.dmp grants=y full=y
执行后,系统提示:
EXP-00008:遇到 ORACLE错误1406
&nb ......