看了网上一些资料,发现对Oracle中的锁有多种分类方法,从各个不同的角度对锁进行分析。
预备知识:
DDL(DATABASE
DEFINITION LANGUAGE):数据库定义语言,如create table、drop table.....
DML(DATABASE
MODIFICATION LANGUAGE):数据库修改语言,如insert、delete、update......
ORACLE锁具体分为以下几类:
1. 按用户与系统划分,可以分为自动锁与显示锁
a)
自动锁:
当进行一项数据库操作时,缺省情况下,系统自动为此数据库操作获得所有有必要的锁。
b)
显示锁:
某些情况下,需要用户显示的锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显示锁是用户为数据库对象设定的。
2.
按锁级别划分,可分为共享锁与排它锁
a)
共享锁:
共享锁使一个事务对特定数据库资源进行共享访问——另一事务也可对此资源进行访问或获得相同共享锁。共享锁为事务提供高并发性,但如拙劣的事务设计+共享锁容易造成死锁或数据更新丢失。
b)
排它锁:
事务设置排它锁后,该事务单独获得此资源,另一事务不能在此事务提交之前获得相同对象的共享锁或排它锁。
3.
按操作划分,可分为DML锁、DDL锁
a) DML锁又可以分为,行锁、表锁、死锁
......
1、SQL 语句基础
下面给出SQL语句的基本介绍。
1.1、SQL语句所用符号
操作符
用途
例子
+ -
表示正数或负数,正数可省去 +
-1234.56
+
将两个数或表达式进行相加
A=c+b
-
将两个数或表达式进行相减
34-12
*
将两个数或表达式进行相乘
12*34
/
除以一个数或表达式
18*11
NULL
空值判断
Where name is null;
||
字符串连接
‘101-’||tel_num
=
等于测试
Select * from emp where name=’赵元杰’;
!= 或<>或^=
不等于测试
Select * from emp where name !=’赵元杰’;
<
小于测试
Select * from emp where sal < 5000;
>
大于测试
Select * from emp where sal > 5000;
<=
小于等于测试
Select * from emp where sal <= 5000;
>=
大于 ......
oracle的体系
oracle的体系很庞大,要学习它,首先要了解oracle的框架。在这里,简要的讲一下oracle的架构,让初学者对oracle有一个整体的认识。
1、物理结构(由控制文件、数据文件、重做日志文件、参数文件、归档文件、密码文件组成)
控制文件:包含维护和验证数据库完整性的必要信息、例如,控制文件用于识别数据文件和重做日志文件,一个数据库至少需要一个控制文件
数据文件:存储数据的文件
重做日志文件:含对数据库所做的更改记录,这样万一出现故障可以启用数据恢复。一个数据库至少需要两个重做日志文件
参数文件:定义Oracle 例程的特性,例如它包含调整SGA 中一些内存结构大小的参数
归档文件:是重做日志文件的脱机副本,这些副本可能对于从介质失败中进行恢复很必要。
密码文件:认证哪些用户有权限启动和关闭Oracle例程
2、逻辑结构(表空间、段、区、块)
表空间:是数据库中的基本逻辑结构,一系列数据文件的集合。
段:是对象在数据库中占用的空间
区:是为数据一次性预留的一个较大的存储空间
块:ORACLE最基本的存储单位,在建立数据库的时候指定
3、内存分配(SGA和PGA)
SGA ......
/*
功能:编号生成器设计初探
环境:JDEVELOPER+STRUTS+EJB+ORACLE
作者:chinayaosir
博客:http://blog.csdn.net/chinayaosir
*/
/****************************************************************************/
/*1.ORACLE函数清单*/
TO_CHAR(sysdate,'YY-MM-DD') //DATE TO STRING
TO_CHAR(1234,'9999') //NUMBER TO STRING
TO_NUMBER(STRING) //STRING TO NUMBER
SUBSTR(STRING,BEGIN,COUNT) //GET SUB STRING IN STRING
LENGTH(String) //GET LENGTH OF STRING
/****************************************************************************/
/*2.ORACLE函数清单应用例子*/
select TO_CHAR(sysdate,'YYYY-MM-DD') as today,
substr(TO_CHAR(sysdate,'YYYY-MM-DD'),1,4) AS year,
LENGTH(TO_CHAR(sysdate,'YYYY-MM-DD')) as length,
TO_CHAR(123456789,'999999999') as numberno
from DUAL;
/********************************************** ......
---删除用户及其用户下面的所有对象
drop user ca cascade;
---删除表空间及其表空间里的所有内容
drop tablespace ATMV INCLUDING CONTENTS;
drop tablespace INDX INCLUDING CONTENTS;
----创建表空间,指定数据文件,初始化100M 自增加50M
create tablespace ATMV datafile 'C:/ATMV.dat' size 100m autoextend on next 50m maxsize unlimited;
create tablespace INDX datafile 'C:/INDX.dat' size 100m autoextend on next 50m maxsize unlimited;
-----创建用户,指定表空间
create user ca identified by atm123 default tablespace ATMV;
---给用户授权
grant dba to ca;
---运行
@C:/CreateNameSpace.sql ......
#include"stdio.h"
#include"math.h"
#include"iostream"
//#include"assert.h"
using namespace std;
//#include"conio.h"
//#include"io.h"
#define FAIL -1
#define Init 0
#define N 10101000
#define M 1010
#define ML 11111
#define AS 128
#define INF (int)((unsigned int)(-1)>>2)
#define _max(a,b) (a>b?a:b)
#define _min(a,b) (a<b?a:b)
long lrs[N]={0};
long bk[N]={0};
long belong[N]={0};
int cac[ML][M]={0};
int trans[AS][ML];
long m,n,ml0;
char p[N];
inline int LengthCommonSuffix(int p1, int p2)
{
if (p2 == bk[p1]) return lrs[p1];
while (bk[p1] != bk[p2])
p2 = bk[p2];
return _min(lrs[p1], lrs[p2]);
}
inline int LengthRepeatedSuffix(int p1, int s)
{
if (s == Init) return 0;
return LengthCommonSuffix(p1, s - 1) + 1;
}
void Oracle_on_line(char *p, int n)
{
void Analy(int,int,int);
&nbs ......