oracle 商用的大型数据库【mysql 也是关系型数据库 xdbms - 面向对象的数据库 - NHN China 】
rdbms 关系型数据库 ----- 一般使用
【基本的数据库】
1 用的最多
2 olap (oracle) 和 ldap (oracle) 都是基于 oracle rdbms
3 oracle 的功能“很”强大 、 “很”麻烦
数据库的记录条数都是没有限制的,但是数据库的性能与记录条数是成反比的。
PostgreSql 5M 速度明显变慢 ,优化以后 10M . . . . .
MySql 类似
Oracle 记录条数对性能的影响先对要小好多 【记录少的时候,没有快到哪里去,多的时候也没有慢到哪里去,优化比较复杂 】
IBM DB2 UDB 记录条数对性能的影响先对要小好多 【记录少的时候,没有快到哪里去,多的时候也没有慢到哪里去 ,优化比较复杂 】
oralce的麻烦:
1 优化复杂
2 记录锁机制 【经常由于记录锁导致查询非常慢,由于自身SQL导致的,10g ~ 11G 非常明显 】
3 BUG 【JDBC驱动程序的BUG ,10G 自带的驱动有严重Bug ,需要用 11G自带的驱动程序替代,并不是特别的多 】
oralce的强大:
1 扩展基本sql,最典型的层次查询
2 JDBC对 SUN的JDBC 规范做了很好的支持,一开始就提供了Type-3,Type-4的驱动 ,提供了SQL-J
以及 Java Package支持,XML支持.....
【 T-1 T-3 本地驱动
T-2 T=4 网络驱动
T-1 T=2 模拟(Java)驱动
T-3 T=4 Java驱动
T-1 Jdbc-Odbc 桥
】
3 性能非常好,速度很快,另外支持分区表、裸设备、数据库文件系统等功能。
olap 数据仓库 --不包含
【数据挖掘 : 大型需要进行数据分析的时候用: 类似M161项目(飞信)-电信级 --数据量非常大 】
执令: MK GB .....
代码: 162100.....
内容: 聊天内容
自己的手机 ---- 发送到地方移动网关 ---- 北京移动 -----保存所有内容 ----- 检查客户端 ---- 地方移动网关
|
2005 一天的数据量 20M条 用户数量 4M
每个月同比上月的增长率 --- 用关系型数据库 -- sqlserver 2000 -- 统计不出来 【20M 】
sqlserver 2000 olap -- 1小时 【20M 】
2009 一天的数据量 ? 条 用户数量 400M
ldap 目录服务 --不包含 -- windows 的 Active Directory 用来提供高速查询服务
【outlook Express :windows 邮件客户端 -- 地址本: -- 从windows Active Directory 中查找用户 】
【快速检索的目录服务:类似于NCIIS项目(公安部的全国公民身份信息系统--用户数14亿) 】
用户登录 --
用户名 + 密码
---- > 对密码加密
---- > 到数据库里面执行一条 select 语句 【10M ~20M SQL查询的时间是可以接受的(数据库做优化的前提)】
---- > 结果查到一条 验证通过 / 否则失败
使用Ldap进行查询
数据库
C1 C2 C3 x
1 x x x
2
3
y
olap 数据以切片的方式来保存 【数据仓库 工具 - 数据挖掘和数据分析-功能 -- 数据的预测--应用 】
x
y z
olap 一张表 = rdbms 一张表的不确定数目的状态的集合
时间 注册用户
2008-12-5 AAA
每个月同比上月的增长率 --- 用关系型数据库 -- sqlserver 2000 -- 统计不出来 【20M 】
sqlserver 2000 olap -- 1小时 【20M 】
10000条 【10M 】
--------------------------------------------------------------------------------------------------------------------
sqlplus "/ as sysdba" 只能在本机使用,用来连接缺省的oracle数据库,使用操作系统认证,作为SYSDBA这个角色【数据库系统管理员】
连接数据库
startup = startup open 在sqlplus 命令行中启动数据库实例,装载数据库并且打开
startup mount 在sqlplus 命令行中启动数据库实例,装载数据库
startup force 在sqlplus 命令行中强行启动数据库实例,【仅限于数据库出问题了,没有办法关闭、启动的时候用这种方式】
shutdown 在sqlplus 命令行中等待所有链接关闭后,关闭数据库实例
shutdown immediate 在sqlplus 命令行中立刻关闭数据库实例
sqlplus "/@orcl as sysdba" 只能在本机使用,用来连接指定实例名称的oracle数据库,使用操作系统认证,作为SYSDBA这个角色【数据库系统管理员】
连接数据库,此时oracle必须处于 start状态
-----------------------------------------------------------------------------------------------------------------------
寻找实例名:
C:/oracle/product/10.2.0/db_1/NETWORK/ADMIN/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WWW-D33920E002E)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
在services.msc窗口中 oracleserviceSID 服务中的SID就是实例名称
------------------------------------------------------------------------------------------------------------------------------
sqlplus 执行过程
1 使用@“字符串” -- 字符串= tnsnames.ora中的链接描述符名称【客户端】
2 使用 tnsnames.ora中的链接描述符中的 host 和 service_name 寻找、链接数据库【客户端】
3 使用 Listener进行监听(1521) 【服务器】
4 Listener收到请求后,在
(ORACLE_HOME = C:/oracle/product/10.2.0/db_1) 数据库安装的地址
(PROGRAM = extproc) 使用的"Program"
5 链接
-----------------------------------------------------------------------------------------------------------------------
1) 找到实例名称
2) 启动数据库
3) 关闭数据库
Oracle 数据库软件
数据库 - orcl - 实例
oracle数据库 【完整的概念,包括两部分:数据库软件和数据库实例】
提供服务的是实例
数据库实例包括: 表空间、表、视图、触发器、(存储)过程、函数、序列、用户、方案、数据类型、xml、日志.....
数据实例实际上是数据库软件的一个具体的实现【类似于java里面类与对象的概念】
实例
数据库进程 - 实例-【类似于java类里面的static内容: 链接(connection) 锁 (lock) 内存(memory) 字符集(charset).....】
数据库方案(以用户作为单位,一个用户如果拥有了对象之后,就会建立自己的方案,方案里包括的内容有
【表、视图、触发器、(存储)过程、函数、序列、数据类型(用户自定义的数据类型)....】)
数据库安全
用户、授权.....
表空间、日志.....
Oracle 进行连接的时候
sqlplus "orcl_user/password@orcl"
1 对于用户登录后所进行的操作均需要授权 ,缺省情况下,如果使用 【create user orcl_user identified by "password"; 】
建立用户的时候,用户没有任何权限,所有的都需要授权。
2 需要使用用户名、密码 除此之外还需要一个可以连接的授权【权限】 connect 【grant connect to orcl_user;】
3 需要授予资源的权限 【 1 tablacespace 的使用 2 table、all table 的创建、删除、更新等权限】
grant resource to orcl_user; 可以给用户所有的tablespace的使用权
oracle 数据库的链接 --- connect --- > session [一个链接需要对应一个会话]
创建一个链接就是创建一个服务器与客户端的会话
connect 权限包括了 回话的所有权限
查看用户的数据库表的方法【select table_name from user_tables ;】
创建表的方法:
create table table_name (
column_1 number primary key,
column_1 varchar2(32)
);
删除用户的时候用 drop user oracle_user [在该用户不包含任何对象的时候,可以直接删除成功,否则删除失败]
drop user oracle_user cascade [删除用户及其所有对象]
以上命令均不可以恢复
查看表结构的方法: desc table_name;
删除表的方法:
drop table table_name;
------------------------------------------------------------------
在 oracle中,“;”表示一条sql语句的结束,在缺省情况下,一条sql结束后,该sql会被执行
在 oracle中,“/”表示执行一条语句,在正常情况下,使用“/”来执行一条已经输入的命令
------------------------------------------1-------------------------------------------------
一个用户通过网络连接到数据库的操作
1: 在服务器端sqlplus "/ as sysdba";
2: 在服务器端的sqlplus中:startup
3: 在服务器端的sqlplus中:create user abc identified by "password";
4: 在服务器端的sqlplus中:grant connect to abc;
5: 在服务器端的sqlplus中:grant resource to abc; [仅有这两个权限不可以使用 oracle 的 OEM - Oracle Enterpirse Manager ]
6: 在客户端检查是否安装了oracle 的客户端或者服务器端,如果使用sqlplus 则必须安装两者中的某一个[如果
仅仅是开发使用,有oracle的驱动就可以了,注意: windows的非java应用程序依旧需要安装oracle的运
行端,System.data.OracleSqlClient]
7: 在客户端查找 tnsnames.ora文件,修改内容,建立新的“连接描述符”
8: 在客户端 sqlplus "abc/password@连接描述符";
9: 退出sqlplus 使用: exit;
------------------------------------------2--------------------------------------------------------
连接到数据库后建立自己的数据库方案【表】
1: create table table_name (
column_1 datatype_define [primary key],
column_2 datatype_define not null,
column_3 datatype_define ,
... ...
column_n datatype_define
);
2:insert into table_name ( column_1,column_3,......column_(n-x)) values (c_1_v,c_3_v,........c_(n-x)_v);
insert into table_name values (c_1_v,c_2_v,........c_n_v);
insert into talbe_name select c_1_v,......c_n_v from xxx;
insert into table_name values(c_1_seq.nextval,.......); //引入序列 1、2、3、4、5
administrator/123456
--------------------------------------------------------------------------------------------------
Oracle 中主要的数据类型
Varchar2 变长字符串 4000个汉字 varchar2(1~4000)
Number 数字 Number = Number(10) =Number(10,0)
Number(总长度,小数点后有几位)
DATE 日期 DATE 进行操作的时候必须使用函数 TO_DATE('2009-11-11','yyyy-mm-dd')
CLOB 大的字符数据对象 2G CLOB Stream
BLOB 大的二进制数据对象 2G BLOB Stream
------------------------------------------3--------------------------------------------------------
连接到数据库后建立自己的数据库方案【序列】 SEQUERENCE 0?x ~ INT.MAX?n 循环使用/一直增加
在oracle中,数据类型中没有自增字段 : GUID - UUID 32个16进制数字组成的唯一标识码
------------------------------------------4---------------------------------------------------------
连接到数据库后建立自己的数据库方案【视图】
-------------------------------------------5--------------------------------------------------------
连接到数据库后建立自己的数据库方案【过程】
----------------------------------------------------------------------------------------------------
连接到数据库后建立自己的数据库方案【函数】