Java基础——Oracle(三)
一、Oracle内部结构
1.表空间
表空间是数据库的逻辑划分,一个表空间只属于一个数据库,每个表空间由一个或多个数据文件组成,表空间中其他的逻辑结构的数据存储在这些数据文件中,一般oracle系统安装后,会自动建立多个表空间,
oarcle11g 的主要表空间 //附(10 g 也是一样的)
1).example :示例表空间,用于存放示例数据库的方案对象信息及其培训资料
2).system: 是系统表空间,用于存放oracle系统内部表和数据字典的数据,如表名,列名,用户名等,一般不赞成将用户创建的表,索引等存放在system表空间中
3).sysaux: 是辅助系统表空间,主要存放oracle系统内部的常用样例用户的对象,如存放cmr用户的表和索引等。从而减少系统表空间的负苛,它一般不存诸用户的数据,由oracle系统内部自动维护
4).undotbsi: 是重做表空间,存放数据库中有关重做的相关信息数据,当用户对数据表进行修改(insert,update,delete)。oracle系统自动用重做表空间来临时存放修改前的数据,当所做的修改完成并提交后,系统根据需要保留,修改前数据的时间长短来释放重做表空间的部分空间。
5).users: 是用户表空间,存放永久性用户对象的数据和私有信息,因此也称为数据表空间,每个数据库都应该有一个用户表空间,以便在创建用户时将其分配给用户。
除了oracle系统默认创建的表空间以外,用户可以根据应用系统的规模及其所要存放的对象的情况创建多个表空间,以区分用户数据和系统数据。
/* 以下略
2.表
存放用户数据的对象
3.约束条件
可以为表的一个列创建约束条件(Constraint)
1).主键约束
2).默认约束
3).检查
4).唯一
5).外键
4.分区 (Partition)
在非常大的数据库中,可以通过把一个大表的数据分成多个小表来简化数据库的管理,这些小表叫做分区,除了对表分区外,还可以对索引进行分区,分区不仅简化了数据库的管理,还改善了其应用性能,在oracle中,能够细分分区,创建子分区,例如,可以根据一组值分割一个表,然后再根据另外一种方法分割分区。
5.索引
为了能够找到数据,表中的每一行都要用一个RowID表标识,RowID告诉数据库这一行的准确位置,包扩所在的文件,该文件中的块和该块中行地址。
6.用户
用户账号虽然不是数据库中的一个物理结构,但它于数据库中的对象有着重要的关系,这是因为用户拥有数据对象,例如sys用户拥有数据字典表,用户system拥有访问数据字典表的视图
为数据库创建对象必须(例如表)必须在用户账号下进行,可以对每一个用户账号进行自定义,以便将一个特定的表空间做为它的默认表空间
7.方案
用户账号拥有的对象集称为用户的方案(Schmea)
8.同义词
为了给不同的用户使用数据库对象时提供一个简单的唯一标识数据库对象的名称,可以为数据库对象创建同义词,
9.权限及角色
10.段,盘区和数据块
依照不同的数据处理性质,可能需要在数据表空间内划分出不同的区域,以存放不同数据,这些区域称为段(Segment),例如,存放数据的区域称为"数据区段",存放索引的称为"索引区段",由于段是一个物理实体,所以必须它把分配到数据库的一个表空间中(放在表空间的一个数据文件中),而段其实就是由许多盘区(Exctent)给合而成的,当段中的空间用完时,该段就获得另外的盘区。数据块(Data Block) 是最小的存储单元,Oracle 数据库是操作系统块的倍数。
二、 Oracle外部结构
1.数据文件
每个oracle数据库都有一个或多个数据文件(dataFile),而一个数据文件只能属于一个表空间,数据文件创建后可以改变大小,创建新的表空间要创建新的数据文件,数据文件一旦加入表空间,就不能从这个表空间移走,也不能和其他表空间发生联系
2.重做日志文件 (Redo Log Files)
oracle保存所有数据库事务的日志,这些事务被记录在联机日志文件(OnLine Rodo Log FIle)中,数据破坏了可以用这些日志来恢复。一个数据库至少需要两个重做志文件,oracle以循环的形式向日志文件写入,第一个日志被添满后,就向第二个写入,然后依次类推,所有日志文件被写满后,又回到第一个,用新的事务的数据进行重写。
3.控制文件 (Control Files)
用以记录与描述数据库的外部结构,它包括
1) oracle数据库名称与建立时间
2) 数据文件与重置日志文件名称及所在位置
3) 日志文件记录序列码( log sequence Nmuber)
每当数据库被激活时,oracle会在实例激活后立刻读取控制文件内容,待所有数据库外部结构文件的在信息都收集完比,数据库才会启动,为避兔控制文件毁坏导致数据库系统停止,建议用户至少配置两个控制文件,并存放在不同的磁盘上。
三、Oracle 中的用户(这里是学习的重点)
--- sys 用户
超级用户,最有最高权限,具有sysdba 角色,数据字典的拥有者,超级权限拥有者(SYSDBA),它具有 createDatabase 权限(只有它有!)
初始密码是 change_on_install,此用户不能删除。
--- system 用户
管理操作员,权限非常大,具有sysopert 角色,但没有 createDatabase 权限
它默认的密码是 manager ,此用户不能被删除。
--- scott 用户
含有样例表 EMP 与 DEPT ,可以修改密码,用户可以被删除,在产品环境下,建议删除或锁定,它是一个普通用户。
默认密码是 tiget,默认是锁定的,可以将其解锁后使用。
解锁方式 :
使用 高权限用户登录, alter user scott account unlock;
与scott平级的还有:ADAMS/WOOD, JONES/STEEL, CLARK/CLOTH and BLAKE/PAPER.
--- outln用户
优化计划的存储大纲用户,密码是outln
建议创建后立即修改密码,此用户不能被删除。
--- HR/HR用户
(Human Resources), OE/OE (Order Entry), SH/SH (Sales History).
实验、测试用户,含有例表EMPLOYEES与DEPARTMENTS
可以修改密码,用户可以被删除,在产品环境建议删除或锁定。
--- DBSNMP用户
密码:DBSNMP
数据库中用于智能代理(Intelligent Agent)的用户,用来监控和管理数据库相关性能的用户,如果停止该用户,则无法提取相关的数据信息;可以改变密码,需要放置新密码到snmp_rw.ora文件,如果不需要Intelligent Agents,可以删除。
--- SYSMAN用户
是Oracle数据库中用于EM管理的用户,如果你不用该用户,也可以删除。(EM:enterprise manage 网页形式的 图形化 管理方式,类似SqlServer的企业管理器可以对oracle进行管理、优化等)
四、初始用户和表空间的创建
打开sqlplus
创建表空间,创建一个用户
1) 先在磁盘上创建目录 f:/my_oracle_data2
2) 创建临时表空间
SQL> create temporary tablespace user_temp //临时表空间的名字(user_temp)是自己取的 tempfile 'f:\\my_oracle_data2\user_temp.dbf' size 50m //初始大小 autoextend on //设置自增 next 50m maxsize 20480m //设置临时表空间 每次自增50兆 最大值是20480兆 extent management local; //表示表空间采用本地表空间管理 ,与之对应的是数据字典表空间管理(缺点多,9i以后废弃)
3) 创建表空间
create tablespace user_data2 logging datafile 'f:\\my_oracle_data2\user_data.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local;
4) 创建用户,并指定了表空间
create user sa identified by "sa" default tablespace user_data2 temporary tablespace user_temp; //创建用户的密码 指定用户是哪个表空间的 用户默认的临时表空
这里如果用这个用户登录 conn sa/sa 将出现如下错误
ORA-01045: user SA lacks CREATE SESSION privilege; logon denied 原因是没权限
授权 grant connect,resource to sa;
最后将会在指定的目录里找到我们创建的表空间:
附注: connect,resource 是角色名称,有了它们可以连接数据库,并在表空间中建表了
附:查询所有的表空间和数据文件对应情况
select * from DBA_DATA_FILES
输出如下:
SQL> conn system/aaaaaaaa as sysdba 已连接。 SQL> select * from DBA_DATA_FILES; FILE_NAME -------------------------------------------------------------------------------- FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS ---------- ------------------------------ ---------- ---------- --------- RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ------------ --- ---------- ---------- ------------ ---------- ----------- ONLINE_ ------- F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\USERS01.DBF 4 USERS 5242880 640 AVAILABLE 4 YES 3.4360E+10 4194302 160 5177344 632 ONLINE FILE_NAME -------------------------------------------------------------------------------- FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS ---------- ------------------------------ ---------- ---------- --------- RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ------------ --- ---------- ---------- ------------ ---------- ----------- ONLINE_ ------- F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSAUX01.DBF 3 SYSAUX 272629760 33280 AVAILABLE 3 YES 3.4360E+10 4194302 1280 272564224 33272 ONLINE FILE_NAME -------------------------------------------------------------------------------- FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS ---------- ------------------------------ ---------- ---------- --------- RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ------------ --- ---------- ---------- ------------ ---------- ----------- ONLINE_ ------- F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\UNDOTBS01.DBF 2 UNDOTBS1 73400320 8960 AVAILABLE 2 YES 3.4360E+10 4194302 640 73334784 8952 ONLINE FILE_NAME -------------------------------------------------------------------------------- FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS ---------- ------------------------------ ---------- ---------- --------- RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ------------ --- ---------- ---------- ------------ ---------- ----------- ONLINE_ ------- F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF 1 SYSTEM 503316480 61440 AVAILABLE 1 YES 3.4360E+10 4194302 1280 503250944 61432 SYSTEM FILE_NAME -------------------------------------------------------------------------------- FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS ---------- ------------------------------ ---------- ---------- --------- RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ------------ --- ---------- ---------- ------------ ---------- ----------- ONLINE_ ------- F:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\EXAMPLE01.DBF 5 EXAMPLE 104857600 12800 AVAILABLE 5 YES 3.4360E+10 4194302 80 104792064 12792 ONLINE FILE_NAME -------------------------------------------------------------------------------- FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS ---------- ------------------------------ ---------- ---------- --------- RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ------------ --- ---------- ---------- ------------ ---------- ----------- ONLINE_ ------- F:\MY_ORACLE_DATA\USER_DATA.DBF 6 USER_DATA 52428800 6400 AVAILABLE 6 YES 2.1475E+10 2621440 6400 52363264 6392 ONLINE FILE_NAME -------------------------------------------------------------------------------- FILE_ID TABLESPACE_NAME BYTES BLOCKS STATUS ---------- ------------------------------ ---------- ---------- --------- RELATIVE_FNO AUT MAXBYTES MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS ------------ --- ---------- ---------- ------------ ---------- ----------- ONLINE_ ------- F:\MY_ORACLE_DATA2\USER_DATA.DBF 7 USER_DATA2 52428800 6400 AVAILABLE 7 YES 2.1475E+10 2621440 6400 52363264 6392 ONLINE 已选择7行。 SQL>