如果说Redo是用来保证在故障时事务可以被恢复,那么Undo则是用来保证事务可以被回退或者撤销。
在修改操作中,对于回退段的操作存在多处,在事务开始时,首先需要在回滚段表空间获得一个事务槽,分配空间,然后创建前镜像,此后事务的修改才能进行,Oracle必须以此来保证事务是可以回退的。
如果用户提交了事务,Oracle会在日志文件记录提交,并且写出日志,同时会在回滚段中把该事务标记为已提交;如果用户回滚事务,则Oracle需要从回滚段把前镜像数据读取出来,修改数据缓冲区,完成回滚,这个过程本身也要产生Redo,所以回退这个操作是很昂贵的。
在Oracle性能优化中,有一个性能指标称为平均事务回滚率(Rollback per transaction),用来衡量数据库的提交与回滚效率。可以在Statspack中找到这个指标。
该参数计算公式为:
Round(User rollbacks/(user commits+user rollbacks),4)*100%
其中user commits和user rollbacks数据来自系统的统计信息,可以从v$sysstat视图中得到,
SQL> select name,value from v$sysstat
2 where name in ('user commits','user rollbacks');
NAME &n ......
using System;
using System.Collections.Generic;
using System.Text;
using System.Data.OracleClient;
using System.Data;
namespace OilAddSystem{
/// <summary>
/// 提供对Oracle数据库操作的方法
/// </summary>
public class ClassOracle {
/// <summary>
/// 数据库连接字符串
/// </summary>
private string strOraConn;
/// <summary>
/// 构造方法
/// </summary>
/// <param name="strConn">连接字符串</param>
public ClassOracle( string strOraConn )
  ......
Oracle 11g DataGuard 配置
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
Red Hat Enterprise Linux Server release 5.3 (Tikanga)
一、测试环境准备
1.主库和备库oracle版本一致,运行在相同平台如linux,服务器硬件可以不一样。
2.Primary 数据库必须运行于归档模式,并且务必确保在primary 数据库上打开FORCE LOGGING,以避免用户通过nologging 等方式避免写redo 造成对应的操作无法传输到standby 数据库。
3.Primary 和standby 数据库均可应用于单实例或RAC 架构下,并且同一个data guard 配置可以混合使用逻辑standby 和物理standby.
4.建议数据库必须采用相同的存储架构。比如存储采用ASM/OMF 的话,那不分primarty 或是standby也都需要采用ASM/OMF。
5.standby库的环境和primary一致。
二、调整主库
1.将主数据库改为强制产生日志模式
alter database force logging;
2. 创建密码
orapwd file=$ORACLE_HOME/dbs/orapwtest password=test entries=3
3. 修改主库的初始化参数
db_unique_name ='test01'
db_name指定数据库的名称,db_unique_name指定了数据库(主库和备库)的不同名称,是对db_name的唯一的标识。其实 ......
2008年06月01日 星期日 14:52
Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。
视图是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表。
视图是存储在数据字典里的一条select语句。 通过创建视图可以提取数据的逻辑上的集合或组合。
视图的优点:
1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。
2.用户通过简单的查询可以从复杂查询中得到结果。
3.维护数据的独立性,试图可从多个表检索数据。
4.对于相同的数据可产生不同的视图。
视图分为简单视图和复杂视图:
简单视图只从单表里获取数据
复杂视图从多表
简单视图不包含函数和数据组
复杂视图包含
简单视图可以实现DML操作
复杂视图不可以.
视图的创建:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
其中:
OR REPLACE :若所创建的试图已 ......
1.创建WEB Application工程WebAjax。
2.建立目录文件AjaxCommon.js如下:
// 声明XmlHttpRequest成员变量
var xmlHttpReq_Obj = null;
// 初始化获取XmlHttpRequest对象
///<param>handler :回调函数名</param>
function GetXmlHttpObject(handler) {
var xmlHttpObj = null;
try {
// Microsoft
xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
// 设置回调函数
if(xmlHttpObj != null) {
xmlHttpObj.onreadystatechange = handler;
}
} catch (e){
try
{
// Mozilla | Netscape | Safari
xmlHttpObj = new XMLHttpRequest();
// 设置回调函数
if(xmlHttpObj != null) {
xmlHttpObj.onload = handler;
xmlHttpObj.onerror = handler;
}
} catch (e) {
}
}
if(xmlHttpObj == null) {
alert("Error initialing XMLHttpRequest!");
}
return xmlHttpObj;
}
// 发送请求
///<param>xmlHttpObj :XmlHttpObject对象</param>
///<param>url :请求url</param>
function SendXmlHttpRequest(xmlHttpObj,url) ......
1.创建WEB Application工程WebAjax。
2.建立目录文件AjaxCommon.js如下:
// 声明XmlHttpRequest成员变量
var xmlHttpReq_Obj = null;
// 初始化获取XmlHttpRequest对象
///<param>handler :回调函数名</param>
function GetXmlHttpObject(handler) {
var xmlHttpObj = null;
try {
// Microsoft
xmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");
// 设置回调函数
if(xmlHttpObj != null) {
xmlHttpObj.onreadystatechange = handler;
}
} catch (e){
try
{
// Mozilla | Netscape | Safari
xmlHttpObj = new XMLHttpRequest();
// 设置回调函数
if(xmlHttpObj != null) {
xmlHttpObj.onload = handler;
xmlHttpObj.onerror = handler;
}
} catch (e) {
}
}
if(xmlHttpObj == null) {
alert("Error initialing XMLHttpRequest!");
}
return xmlHttpObj;
}
// 发送请求
///<param>xmlHttpObj :XmlHttpObject对象</param>
///<param>url :请求url</param>
function SendXmlHttpRequest(xmlHttpObj,url) ......
由于公司需要,这段时间开始接触wap的开发。目前实现的功能比较简单,wap所用的是wml语言,配合使用wml script来显示页面。由于功能比较简单就用php来写动态脚本。用php来输出wml标签。当初在学习的时候有些不懂的地方,在网上的资料也不是很多,于是整理了个小例子供大家参考。
下面的例子主要实现的是在用户登录时可以选择用户名保存的时间,如果存在已经保存的用户名和密码,则在下拉列表中显示出来。当用户选择下拉列表中的用户名时,在用户名框和密码框中显示对应的用户名和密码。密码是经过MD5加密后存储的。
下面看代码:
如果用户选择保存用户名和密码,则将用户名和经过MD5加密后的密码以“用户名|密码”的格式进行保存。如果有多组用户名和密码,则将用户名和密码放在数组中。
注意:php cookie中是无法保存数组格式的,因此先将数组转化成字符串。如:
$arrayusername_str=implode(",",$arrayusername);//将数组转换为字符串,每个数组元素之间用“,&rdq ......