当前位置:  数据库>oracle
本页文章导读:
    ▪事务的隔离级别      并发事务带来的问题1)脏读第一个事务尚未commit的内容已经被第二个事务读到2)不可重复读第一个事务执行更新操作,第二个事务内部在第一个事务更新前后两次读到数据不一样3)幻读例如.........
    ▪ORACLE基本的sql语句      一、SQL 基础知识1、DDL(数据定义语言)1)创建数据表--创建数据表create table Test(Id int not null, Age char(20)); --创建数据表create table T_Person1(Id int not null,Name nvarchar(50),Age int null); --创建.........
    ▪ORA-01034:ORACLE not available问题的解决方法        刚装上的oracle9i,上次还能用呢,这次突然用不了. [oracle@R39i oracle]$ sqlplus scott/tiger SQL*Plus: Release 9.2.0.4.0 - Production on Mon Nov 24 11:06:50 2008 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.ERROR.........

[1]事务的隔离级别
    来源:    发布时间: 2013-10-29
并发事务带来的问题

1)脏读

第一个事务尚未commit的内容已经被第二个事务读到

2)不可重复读

第一个事务执行更新操作,第二个事务内部在第一个事务更新前后两次读到数据不一样

3)幻读

例如:第一个事务更新所有行,第二个事务新插入一行数据,通常会出现第一个事务执行完成后仍然会出现“未更新成功的行”

4)第一类丢失更新(回滚丢失)

例如:两个事务更新同一行,其中一个回滚导致前一个更新也丢失

5)第二类丢失更新(覆盖丢失)

例如:两个事务更新同一行,后一个事务更新覆盖前一个事务更新的结果

事务的隔离级别

1)READ_UNCOMMITTED

隔离级别最低,并发性能最好,但是会出现脏读、不可重复读、幻读、丢失更新等问题

2)READ_COMMITTED

锁定正在操作的行,这是大多数数据库默认的隔离级别,如sqlserver、oracle

但是会出现不可重复读、幻读等问题

3)REPEATABLE_READ

锁定所操作的所有行,少数数据库的默认隔离级别是这样,如mysql innodb

但会出现幻读问题

4)SERIALIZABLE

隔离级别最高,并发性能最差,锁表,但可避免所有问题

本文链接


    
[2]ORACLE基本的sql语句
    来源:    发布时间: 2013-10-29

一、SQL 基础知识

1、DDL(数据定义语言)

1)创建数据表

--创建数据表

create table Test(Id int not null, Age char(20));

 --创建数据表

create table T_Person1(Id int not null,

Name nvarchar(50),

Age int null);

 --创建表,添加外键

Create table T_Students(

StudentNo char(4),

CourseNo char(4),

Score int,

Primary key(StudentNo),

Foreign key(CourseNo) References T_Course(CourseNo)

);

 2)修改表结构

--修改表结构,添加字段

Alter table T_Person add NickName nvarchar(50) null;

 --修改表结构,删除字段

Alter table T_Person Drop NickName;

 3)删除数据表

--删除数据表

Drop table T_Person;

 --删除数据表

drop table test

4)创建索引

Create [Unique] Index <索引名> on <基本表名>(<列明序列>);

 2、DML(数据操纵语言)

1)插入语句

insert into T_Person1(Id,Name,Age) values(1,'Vicky',20)

--插入一条据数,字段和值必须前后对应

insert into T_Preson1(Id,Name,Age) values(2,'Tom',19)

insert into T_Person1(Id,Name,Age) values(4,'Jim',19)

insert into T_Person1(Id,Name,Age) values(5,'Green',20)

insert into T_Person1(Id,Name,Age) values(6,'Hanmeimei',21)

insert into T_Person1(Id,Name,Age) values(7,'Lilei',22)

insert into T_Person1(Id,Name,Age) values(8,'Sky',23)

insert into T_Person1(Id,Name,Age) values(newid(),'Tom',19)

 2)更新语句

--修改列,把所有的age字段改为30

update T_Person1 set age=30

 --把所有的Age字段和Name字段设置为...

update T_Person1 set Age=50,Name='Lucy'

update T_Person1 set Name='Frankie' where Age=30

 update T_Person1 set Name=N'中文字符' where Age=20

--中文字符前面最好加上N,以防出现乱码

update T_Person1 set Name=N'成年人' where Age=30 or Age=50

 3)删除语句

delete from T_Person1

--删除表中全部数据

 

delete from T_Person1 where Name='Tom'

--根据条件删除数据

 

4)查询语句

查询语句非常强大,几乎可以查任意东西!

-----------------

---- 数据检索 -----

-----------------

--查询不与任何表关联的数据.

SELECT 1+1; --简单运算
select 1+2 as 结果

 

SELECT newid();--查询一个GUID字符创

 

select GETDATE() as 日期 --查询日期

 

--可以查询SQLServer版本

select @@VERSION as SQLServer版本

 

--一次查询多个

select 1+1 结果, GETDATE() as 日期, @@VERSION as 版本, NEWID() as 编号

 

 

--简单的数据查询.HelloWorld级别

SELECT * FROM T_Employee;

 

--只查询需要的列.

SELECT FNumber FROM T_Employee;

 

--给列取别名.As关键字

SELECT FNumber AS 编号, FName AS 姓名 FROM T_Employee;

 

--使用 WHERE 查询符合条件的记录.

SELECT FName FROM T_Employee WHERE FSalary<5000;

 

--对表记录进行排序,默认排序规则是ASC

SELECT * FROM T_Employee ORDER BY FAge ASC,FSalary DESC;

 

--ORDER BY 子句要放在 WHERE 子句之后.

SELECT * FROM T_Employee WHERE FAge>23 ORDER BY FAge DESC,FSalary DESC;

 

--WHERE 中可以使用的逻辑运算符:or、and、not、<、>、=、>=、<=、!=、<>等.

 

--模糊匹配,首字母未知.

SELECT * FROM T_Employee WHERE FName LIKE '_arry';

 

--模糊匹配,前后多个字符未知.

SELECT * FROM T_Employee WHERE FName LIKE '%n%';

 

--NULL 表示"不知道",有 NULL 参与的运算结果一般都为 NULL.

 

--查询数据是否为 NULL,不能用 = 、!= 或 <>,要用IS关键字

SELECT * FROM T_Employee WHERE FName IS NULL;

SELECT * FROM T_Employee WHERE FName IS NOT NULL;

 

--查询在某个范围内的数据,IN 表示包含于,IN后面是一个集合

SELECT * FROM T_Employee WHERE FAge IN (23, 25, 28);

 

--下面两条查询语句等价。

SELECT * FROM T_Employee WHERE FAge>=23 AND FAge<=30;

SELECT * FROM T_Employee WHERE FAge BETWEEN 23 AND 30;

 

----创建一张Employee表,以下几个Demo中会用的这张表中的数据

----在SQL管理器中执行下面的SQL语句,在T_Employee表中进行练习

create table T_Employee(FNumber varchar(20),

FName varchar(20),

FAge int,

FSalary Numeric(10,2),

primary key (FNumber)

)

 

insert into T_Employee(FNumber,FName,FAge,FSalary) values('DEV001','Tom',25,8300)

insert into T_Employee(FNumber,FName,FAge,FSalary) values('DEV002','Jerry',28,2300.83)

insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES001','Lucy',25,5000)

insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES002','Lily',25,6200)

insert into T_Employee(FNumber,FName,FAge,FSalary) values('SALES003','Vicky',25,1200)

insert into T_Employee(FNumber,FName,FAge,FSalary) values('HR001','James',23,2200.88)

insert into T_Employee(FNumber,FName,FAge,FSalary) values('HR002','Tom',25,5100.36)

insert into T_Employee(FNumber,FName,FAge,FSalary) values('IT001','Tom',28,3900)

insert into T_Employee(FNumber,FAge,FSalary) values('IT002',25,3800)

 

--开始对T_Employee表进行各种操作

--检索所有字段

select * from T_Employee

 

--只检索特定字段

select FName,FAge from T_Employee

 

--带过滤条件的检索

select * from T_Employee

where FSalary<5000

 

--可更改显示列名的关键字as,as—起别名

select FName as 姓名,FAge as 年龄,FSalary as 薪水 from T_Employee

 

 

二、SQL Server 中的数据类型

1、精确数字类型

bigint

int

smallint

tinyint

bit

money

smallmoney

2、字符型数据类型,MS建议用VarChar(max)代替Text

Char

VarChar

Text

3、近似数字类型

Decimal

Numeric

Real

Float

4、Unicode字符串类型

Nchar

NvarChar

Ntext

5、二进制数据类型,MS建议VarBinary(Max)代替Image数据类型,max=231-1

Binary(n) 存储固定长度的二进制数据

VarBinary(n) 存储可变长度的二进制数据,范围在n~(1,8000)

Image 存储图像信息

6、日期和时间类型,数据范围不同,精确地不同

DateTime

SmallDateTime

7、特殊用途数据类型

Cursor

Sql-variant

Table

TimeStamp

UniqueIdentifier

XML

 

三、SQL中的内置函数

 

--------------------------------------

----- 数据汇总-聚合函数 ---------

--------------------------------------

--查询T_Employee表中数据条数

select COUNT(*) from T_Employee

 

--查询工资最高的人

select MAX(FSalary) as Top1 from T_Employee

 

--查询工资最低的人

select Min(FSalary) as Bottom1 from T_Employee

 

--查询工资的平均水平

select Avg(FSalary) as 平均水平 from T_Employee

 

--所有工资的和

select SUM(FSalary) as 总工资 from T_Employee

 

--查询工资大于5K的员工总数

select COUNT(*) as total from T_Employee

where FSalary>5000

 

 

------------------------------

----- 数据排序 -------

------------------------------

--按年龄排序升序,默认是升序

select * from T_Employee

order by FAge ASC

 

--多个条件排序,先什么,后什么,在前一个条件相同的情况下,根据后一个条件进行排列

--where在order by之前

select * from T_Employee

order by FAge ASC, FSalary DESC

 

 

------------------------------

----- 模糊匹配 -------

------------------------------

--通配符查询

--1.单字符通配符_

--2.多字符通配符%

--以DEV开头的任意个字符串

select * from T_Employee

where FNumber like 'DEV%'

 

--以一个字符开头,om结尾的字符串

select * from T_Employee

where FName like '_om'

 

--检索姓名中包含m的字符

select * from T_Employee

where FName like '%m%'

 

 

------------------------------

----- 空值处理 -------

------------------------------

--null表示不知道,不是没有值

--null和其他值计算结果是null

select null+1

 

--查询名字是null的数据

select * from T_Employee

where FName is null

 

--查询名字不为空null的数据

select * from T_Employee

where FName is not null

 

--年龄是23,25,28中的员工

select * from T_Employee

where FAge=23 or FAge=25 or FAge=28

 

 

--或者用in 集合查询

--年龄是23,25,28中的员工

select * from T_Employee

where FAge in (23,25,28)

 

--年龄在20到25之间的员工信息

select * from T_Employee

where FAge>20 and FAge&

    
[3]ORA-01034:ORACLE not available问题的解决方法
    来源:    发布时间: 2013-10-29
 

刚装上的oracle9i,上次还能用呢,这次突然用不了.

[oracle@R39i oracle]$ sqlplus scott/tiger

SQL*Plus: Release 9.2.0.4.0 - Production on Mon Nov 24 11:06:50 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory

[root@R39i root]# id oracle
uid=500(oracle) gid=501(dba) groups=501(dba)
[root@R39i root]# su - oracle
[oracle@R39i oracle]$ lsnrctl start

LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 24-NOV-2008 10:57:29

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

Starting /oracle/product/9i/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 9.2.0.4.0 - Production
System parameter file is /oracle/product/9i/network/admin/listener.ora
Log messages written to /oracle/product/9i/network/log/listener.log
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
   Linux Error: 98: Address already in use

Listener failed to start. See the error message(s) above...

[oracle@R39i oracle]$ lsnrctl status

LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 24-NOV-2008 11:21:13

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
STATUS of the LISTENER
==============================================
[oracle@R39i oracle]$ lsnrctl status

LSNRCTL for Linux: Version 9.2.0.4.0 - Production on 24-NOV-2008 11:21:13

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 9.2.0.4.0 - Production
Start Date                24-NOV-2008 10:52:27
Uptime                    0 days 0 hr. 28 min. 45 sec
Trace Level               off
Security                  OFF
SNMP                      OFF
Listener Parameter File   /oracle/product/9i/network/admin/listener.ora
Listener Log File         /oracle/product/9i/network/log/listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=R39i)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
Service "mydata" has 1 instance(s).
Instance "mydata", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

呵呵,原来监听已经启动了.
[oracle@R39i oracle]$ sqlplus /nolog

SQL*Plus: Release 9.2.0.4.0 - Production on Mon Nov 24 12:01:37 2008

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> connect /as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area 122754448 bytes
Fixed Size                   451984 bytes
Variable Size              88080384 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.

数据库就可以用了。

总结,

1,数据库没有打开时,其它用户是联不上的。
2,如果用sys也打不开数据库,则可能是坏境变量的事了。

可用下面的方法来检查,看是否和你预想的一样。

env |grep ORACLE

本文链接


    
最新技术文章:
▪current online redo log缺失后的恢复
▪ORA-600 2662错误解决实例
▪ORA-00600 2662错误解决方法
▪Oracle Hidden Parameter:_allow_resetlogs_corruption
浙ICP备11055608号-3 iis7站长之家
▪Oracle 隐含参数 _disable_logging 详解
▪ORA-00600 [2662]错误解决过程
▪Oracle里常见的执行计划
▪Oracle里另外一些典型的执行计划
▪Oracle服务器自动备份
▪Oracle固定SQL的执行计划(一)---SQL Profile
▪Oracle固定SQL的执行计划(二)---SPM
▪同一环境下新建Standby RAC库
▪Oracle快速克隆安装
▪Oracle单实例启动多个实例
▪Oracle的PLSQL别名中文出现乱码解决方法
▪ORA-00379: no free buffers available in buffer pool DEFAULT ...
▪RMAN-06023: no backup or copy of datafile 16 found to restor...
▪RMAN还原数据库报错问题解决案例
▪OEL6.8_X86平台部署Oracle 10gR2检测失败问题
▪Oracle 性能优化建议
▪Oracle SQL语句优化心得
▪Oracle慢SQL监控脚本实现
▪Oracle dblink 查询 tns:无法解析指定的连接标识...
▪Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结...
▪Linux6.6及以上版本配置Oracle ASM共享储存-UDEV
▪Oracle 12C 开启数据库归档模式
▪Solairs系统中配置Oracle 12c 开机启动
▪重建DBMS_STATS解决ORA-31626 ORA-21633以及ORA-04063 ORA...
▪Oracle ASMM 与AMM之间相互切换
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3