oracle使用中的一些注意点
Oracle的存储结构和mysql区别很大
- Oracle存储模型
逻辑结构在左,物理结构在右,编程人员只处理逻辑结构,让数据库去管理到物理结构的映射
逻辑结构 物理结构
Database
Tablespace(表空间) -———————— OS file
Segment (段)
Extent(区)
Oracle data block(块) ———————— OS block
Database:数据库,一个数据库可以拥有若干个表空间
Tablespace:表空间,表空间不属于用户,用户在建表的时候需要指定这张表建在哪个表空间里
每个用户可以在不同的表空间里建表,一张表由表全名来定位:用户名.表名
同一个表空间下可以有相同的表名。两个不同的用户在同一个表空间下可以创建两名的表
Segment :存在于表空间中,包含若干个区
Extent:由相邻的数据块组成
block:数据库中最小的I/O单元,db_block_size在创建库的时候给出,一般默认为8k,创建完之后一般不能再修改
- 表空间
oracle表空间按照使用类型分为永久性表空间,临时性表空间和回滚表空间,和我们打交道最多的是前两种
oracle 10g版本创建数据库时初始表空间有5个SYSTEM,UNDOTBS1,SYSAUX,TEMP,USERS
(1)永久性表空间
包括创建数据库时系统默认创建的系统表空间以及用户创建的表空间
当用户没有指定表空间时,这个用户使用默认系统表空间(system),和默认临时表空间(temp).
设置默认(临时)表空间的命令:
alter database default [temporary] tablespace tblspace_name
查看用户默认使用的表空间的命令:
select username,default_tablespace,temporary_tablespace
from dba_users
where username = 'ZTSJ';//用户名要大写
查看所有表空间命令:
select * from dba_tablespaces
(2)、临时表空间
用来存放临时性的东西的,比如查询的结果集,临时表,数据库复杂查询操作(比如排序分组查询等)经常要用到临时表空间,查询实例的临时表空间命令上面已经给出
- 如何创建表空间,用户,及授权
创建完 数据库后并不能直接就开始建表,必须先创建该数据库的用户,然后给这个用户指定一个表空间
一个大的数据库中一般有几个表空间,需要给这个数据库创建几个用户并给每个用户指定表空间并授权,这样每个用户就可以独立操作自己的资源,互不干扰。
这个和mysql基本上完全不同,不可以用mysql的方式去类比
1、假设现在建好了将oracle10g安装在了D盘,已经建好了一个名为YbTest的数据库,此时在D:/appAdministratororadata目录下会有一个YbTest目录
2、创建用户之前要先创建临时表空间,若不创建则默认临时表空间为temp
CREATE TEMPORARY TABLESPACE YB_TEMP TEMPFILE 'D:appAdministratororadataYbTestYB_TEMP.DBF' SIZE 32M AUTOEXTEND ON NEXT 32M MASIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
3、创建用户之前先创建数据表空间,若不创建则默认为永久性表空间system(系统表空间)
CREATE TABLESPACE YB_DATA //表空间名字,任意取名 LOGGING DATAFILE 'D:appAdministratororadataYbTestYB_DATA.DBF' //存放位置。YB_DATA.DBF文件名任意取 SIZE 32M //表空间的大小 AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
4、创建用户(用户名密码以及指定临时表空间和数据表空间)
CREATE USER YB IDENTIFIED BY 123123 ACCOUNT UNLOCK DEFAULT TABLESPACE DB_DATA TEMPORARY TABLESPACE DB_TEMP;
5、给YB授权
执行以下两个命令后便可建表
GRANT CONNECT,RESOURCE TO YB; --表示把 connect,resource权限授予YB
GRANT DBA TO YB; --表示把 dba权限授予给YB
- 几个注意点
1、oracle没有表级别的字符集,在建库的时候就已经定好了
2、自增主键,不是用的 AUTO_INCREMENT(mysql的用法)
3、oracle的表名(包括列名)在数据库中都是大写
4、java执行的sql语句表名、列名可以小写,但是执行后在oracle依然是大写
5、oracle的系统表保存的表名列名等字段值都是大写,因此查询这些表的系统信息时需要转为大写作为查询条件查询