02-ORACLE

2022-08-09  本文已影响0人  XAbo

一、oracle基础

所有的关系型数据库,都是在磁盘中的文件集合。

oracle实例和数据库:数据库启动后分配的内存和建立的后台进程,数据库关闭后,物理上的文件还存在,但实例不存在。
实例就是一组进程和内存,进程可操作数据库,任何时刻一个数据库只有一个实例对其进行操作

仅安装数据库软件:不建立数据库实例

1.1 oracle四类文件

1.2 oracle目录

1.3 表空间和数据文件

管理表空间的任务一般是由DBA来管理。
Oracle数据库的数据存放在表空间中,表空间是一个逻辑的概念,它是由数据文件组成,表空间大小由数据文件的数量和大小决定。
表空间有三种:Permanent Tablespaces(永久表空间)、Temporary Tablespaces(临时表空间)、Undo Tablespaces(回滚表空间),Oracle在创建数据库实例的时候,默认会创建三个永久表空间(SYSTEM、SYSAUX、USERS),一个临时表空间(TEMP),一个回滚表空间(UNDOTBS1)。

#1、SYSTEM表空间
SYSTEM表空间主要用于存放Oracle数据库内部的数据字典,它是Oracle数据库最重要的表空间,在创建数据库实例时被最先创建,包含了数据库的元数据,对于数据库来说生死攸关。
#2、SYSAUX表空间
SYSAUX表空间是SYSTEM表空间的辅助表空间,主要用于存储数据字典以外的其他数据对象,它在一定程度上降低了SYSTEM表空间的负荷。
#3、UNDOTBS1表空间
UNDO是回滚表空间,主要有四方面的用途,分别是:事物回滚、数据库恢复、读一致性、闪回查询。
1)事物回滚:当事物执行失败或用户执行回滚操作(rollback)时,Oracle会利用保存在回退段中的信息将数据恢复到原来的值。
2)数据库恢复:当数据库实例出现了意外,在重启恢复时,Oracle先利用重做日志文件的信息对数据库进行恢复,再利用回滚段中的信息回滚未提交的事务。
3)读一致性:当一个用户对数据进行修改时,会预先将其原始值保存到回退段中,这时,如果有其它用户访问该数据,则访问回退段中的信息,使当前用户未提交的修改其他用户无法看到,保证了数据的一致性。
4)闪回查询:通过保留在回退段中的信息,用户可以查询某个数据在过去某个时刻的状态。
#4、TEMP表空间
临时表空间用来管理数据库排序以及用于存储临时表和索引、中间结果等临时对象。当Oracle的内存不够时,会把数据放在临时表空间中,当操作完成后,系统会自动清理临时表空间中的临时对象,自动释放空间。这里的释放只是标记为空闲、可以重用,占用的磁盘空间并没有真正释放。这也是临时表空间有时会不断增大却不见减少的原因。
#5、USERS表空间
USERS表空间用于存放普通用户的表和索引,一般情况下,它是用户的缺省表空间。
#6、查看表空间
用DBA登录数据库,执行以下SQL可以查看数据库全部的表空间。
select * from v$tablespace;

表空间的查询:

1.查看当前用户的缺省表空间
select username,default_tablespace from user_users;
2.查看数据文件
数据文件存放在数据字典DBA_DATA_FILES中,用DBA权限执行以下SQL查询。
select file_name,file_id,tablespace_name,bytes,status,autoextensible,maxbytes,user_bytes,online_status
from DBA_DATA_FILES order by tablespace_name,file_name;
3.查看表空间使用情况;从数据字典DBA_FREE_SPACE和DBA_DATA_FILES中可以查询表空间使用情况
select a.tablespace_name "表空间名",total "表空间大小",
       (total - free) "已使用大小",free "表空间剩余大小",
       round(total/(1024*1024)) "表空间大小(M)",
       round((total-free)/(1024*1024)) "已使用大小(M)",
       round(free/(1024*1024)) "表空间剩余大小(M)",
       round((total-free)/total,4)*100 "使用率%"
  from
 (select tablespace_name,sum(bytes) free from DBA_FREE_SPACE group by tablespace_name) a,
 (select tablespace_name,sum(bytes) total from DBA_DATA_FILES group by tablespace_name) b
 where a.tablespace_name = b.tablespace_name;

1.4 oracle系统用户

sysdba、sysoper和normal是对数据库实例连结的校验与数据库无关。数据库实例连接上数据库后,数据库权限connect、resource和dba的才生效!

数据库实例的身份认证

1.5 配置链接信息

我们知道数据库的connect角色最基本的用户权限,拥有connect权限的用户只可以登录Oracle。进一步来看,Oracle将自己的一些链接信息保存到它的配置文件当中,以便于客户端链接Oracle时,可以从配置文件当中获取信息,从而建立与Oracle的连接。

其文件位置在

Oracle根目录\product\11.2.0\dbhome_1\NETWORK\ADMIN

链接信息保存在:

1.6 常见服务

oracle服务按产品分类主要有七大块,这七个服务的含义分别为:

二、oracle的体系结构

Oracle的体系结构是数据库的组成、工作过程,以及数据库中数据的组织和管理机制,包含一系列组件(软件)、用户进程(User process)、服务进程(Server process、PGA)、SGA(共享池、数据缓存、日志缓冲区)、后台进程(SMON、DBWn、PMON、CKPT、LGWR、其它进程)、参数文件(Parameter file)、密码文件(Password)、数据文件(Data files)、控制文件(Control files)、在线重做日志文件(Redo log files)、归档日志文件(Archived log files)。


体系结构

2.1 用户进程和服务进程

用户进程(User process),是指用户通过客户端,比如SQL Plus、PL/SQL Developer、SQL Load、应用程序等工具连接上Oracle数据库而产生的进程。用户进程处理用户输入并与服务器进程通信。用户进程还负责表现用户请求的信息,必要时可以将信息处置成更可用的形式。

服务进程(Server Process),当客户端发起连接时,Oracle创建一个用户进程来处理这个连接。
用户进程启动后,Oracle还会创建一个服务进程来处理连接到实例的用户进程提交的请求。用户进程连接到数据库并创建一个会话时,Oracle服务器进程会分配专门用于当前用户会话的内存区,即PGA区,该区域是私有的,当进程创建时分配,进程结束后被释放,只能被一个服务进程使用。

2.2 系统全局区SGA

系统全局区SGA(System Global Area),是Oracle实例的重要组成部分,在实例启动时分配,是一组包含Oracle数据和控制信息的共享内存。一个SGA只属于一个实例,也就是说,当一个服务器上有多个实例运行时,每个实例都有一个自己的SGA,实例之间不能相互访问。SGA包括共享池(Share pool)、数据缓存(Data buffer cache)和重做日志缓冲区(Redo log buffer),其中共享池又包括Library cache(库缓存)和Data dict cache(数据字典缓存)。

2.3 后台进程

Oracle后台进程是一组运行于Oracle服务器端的后台程序,也是Oracle实例的重要组成部分。这些后台进程分别完成不同的功能。其中SMON、PMON、DBWR、LGWR和CKPT这5个后台进程必须正常启动,否则数据库实例无法工作。此外,还有很多辅助进程,用于实现辅助的功能,如果这些辅助进程发生问题,只会使某些功能受到影响,数据库实例仍是可用的。

2.4 存储结构

Oracle分为逻辑存储结构和物理存储结构,逻辑存储结构用来描述Oracle内部组织和管理数据的方式,是一种层次结构,是面向用户的;物理存储结构是实际的数据存储单元,就是数据库存放在操作系统上的文件。

存储结构

三、oracle应用

3.1 数据字典

Oracle通过数据字典来管理和展现数据库信息,数据字典储存数据库的元数据,是数据库的“数据库”。
数据字典由4部分组成:内部RDBMS(X$)表、数据字典表、动态性能视图(V$)和(静态)数据字典视图。

v$database数据库信息
v$datafile数据文件信息
v$controlfile控制文件信息
v$logfile重做日志信息
v$instance数据库实例信息
v$log日志组信息
v$loghist日志历史信息
v$sga数据库SGA信息
v$parameter初始化参数信息
v$process数据库服务器进程信息
v$bgprocess数据库后台进程信息
v$controlfile_record_section控制文件记载的各部分信
v$thread线程信息
v$datafile_header数据文件头所记载的信息
v$archived_log归档日志信
v$archive_dest归档日志的设置信息
v$logmnr_contents归档日志分析的DMLDDL结果信息
v$logmnr_dictionary日志分析的字典文件信息
v$logmnr_logs日志分析的日志列表信息
v$tablespace表空间信息
v$tempfile临时文件信息
v$filestat数据文件的I/O统计信息
v$undostatUndo数据信息
v$rollname在线回滚段信息
v$session会话信息
v$transaction事务信息
v$rollstat回滚段统计信息
v$pwfile_users特权用户信息
v$sqlarea当前查询过的sql语句访问过的资源及相关的信息
v$sql与v$sqlarea基本相同的相关信息
v$sysstat数据库系统状态信息
1、USER_*(用户所拥有的相关对象信息)
user_objects用户对象信息
user_source数据库用户的所有资源对象信息
user_segments用户的表段信息
user_tables用户的表对象信息
user_tab_columns用户的表列信息
user_constraints用户的对象约束信息
user_sys_privs当前用户的系统权限信息
user_tab_privs当前用户的对象权限信息
user_col_privs当前用户的表列权限信息
user_role_privs当前用户的角色权限信息
user_indexes用户的索引信息
user_ind_columns用户的索引对应的表列信息
user_cons_columns用户的约束对应的表列信息
user_clusters用户的所有簇信息
user_clu_columns用户的簇所包含的内容信息
user_cluster_hash_expressions散列簇的信息
2、ALL_*(用于有权限访问的所有对象的信息)
all_users数据库所有用户的信息
all_objects数据库所有的对象的信息
all_def_audit_opts所有默认的审计设置信息
all_tables所有的表对象信息
all_indexes所有的数据库对象索引的信息
3、DBA_(数据库所有相关对象的信息)
dba_users数据库用户信息
dba_segments表段信息
dba_extents数据区信息
dba_objects数据库对象信息
dba_tablespaces数据库表空间信息
dba_data_files数据文件设置信息
dba_temp_files临时数据文件信息
dba_rollback_segs回滚段信息
dba_ts_quotas用户表空间配额信息
dba_free_space数据库空闲空间信息
dba_profiles数据库用户资源限制信息
dba_sys_privs用户的系统权限信息
dba_tab_privs用户具有的对象权限信息
dba_col_privs用户具有的列对象权限信息
dba_role_privs用户具有的角色信息
dba_audit_trail审计跟踪记录信息
dba_stmt_audit_opts审计设置信息
dba_audit_object对象审计结果信息
dba_audit_session会话审计结果信息
dba_indexes用户模式的索引信息

3.2 用户与权限

Oracle中没有其他数据库系统中的数据库的概念,对象都是创建在用户下。

3.2.1 用户管理

用户权限:使用角色管理,权限分为:系统权限和对象权限(Schema是用户所拥有的对象的集合)。

# 1.创建用户 
create user 用户名 identified by 密码
       [default tablespace 表空间名]
       [temporary tablespace 表空间名]
       [quota 大小 on 表空间名]
       [profile 用户配置文件];
#创建用户时,如果不指定default tablespace/ temporary tablespace选项,则使用系统缺省的永久/临时表空间, 用以下SQL可以查看系统缺省的永久/临时表空间。
select property_value from DATABASE_PROPERTIES where property_name in ('DEFAULT_PERMANENT_TABLESPACE','DEFAULT_TEMP_TABLESPACE');

#2.修改密码 普通用户只能修改自已的密码,DBA可以修改其它用户的密码。
alter user 用户名 identified by 新密码;

#3.锁定/解锁用户 锁定/解锁用户需要DBA权限。 
alter user 用户名 account lock;
alter user 用户名 account unlock;

#4.修改用户表空间配额 修改用户表空间配额需要DBA权限。
alter user 用户名 quota 大小 on 表空间;

#5.删除用户 删除用户需要DBA权限。
#drop user 只有在用户下没有任何数据库对象的时候才能删除用户,否则会提示错误。
#采用cascade选项删除用户以及用户下全部的数据库对象,包括表、视图、函数、同义词、过程等。
drop user 用户名 [cascade];

3.2.2 权限管理

权限管理
 #######1、系统权限
系统权限针对的是系统安全性,执行数据库操作,如登录、创建表、创建函数等,通过查询SYSTEM_PRIVILEGE_MAP数据字典可以看到Oracle的两百多种系统权限。
select * from SYSTEM_PRIVILEGE_MAP;
以下是几种常用的系统权限:
create session       创建会话。
create/drop user     创建/删除用户。
create/drop sequence 创建/删除序列。
create/drop synonym  创建/删除同名对象。
create/drop table    创建/删除表。
create/drop view     创建/删除视图。
 #######2、对象权限
对象权限针对的是数据安全性,对某一特定对象(如表,视图、序列、存储过程等)执行的特定操作,对象的权限分类如下:。
1)select权限 对表而言,允许对表执行select语句;对序列而言,允许对序列获取下一个值(nextval)和当前值(currnvl)。
2)insert权限 允许向表和视图中插入记录。
3)update权限 允许在表或视图中执行update语句,update权限必须随同select权限授予,否则被授权用户不能够选择行。
4)delete权限 允许在表或视图中执行delete语句,delete权限必须随同select权限授予,否则被授权用户不能够选择行。
5)alter权限 对表而言,允许对表执行alter table语句;对序列而言,允许对序列alter sequence语句。
6)execute权限 执行存储过程、函数和包的权限。
7)index权限 允许在表上创建索引。
8)reference权限允许在表上创建完整性约束,如外键。
9)all 对象的全部权限(上面列出的全部权限)。
 ####### 3、角色
由于Oracle提供的权限非常之多,日常操作时我们不可能将所需权限一一赋予用户,此时引进角色概念。角色是一组相关权限的命名集合,使用角色最主要的目的是简化权限管理。将一组权限打包到角色中,将角色赋予用户就是把角色下得全部权限都赋给了用户,简化了赋权操作。
Oracle提供三种标准的三种角色:
1)connect角色 connect是最基本的用户权限,拥有connect权限的用户只可以登录Oracle(仅具有创建SESSION的权限),不可以创建实体,不可以创建数据库结构。
2)resource角色 拥有resource权限的用户可以创建数据库对象,和对本用户的数据库对象拥有全部的操作权限。
3)DBA角色 DBA角色,拥有全部特权,是系统最高权限。
 ####### 4、授于/收回权限
Oracle采用grant命令授于权限,revoke命令收回权限。
### 1)将对象权限授于用户和角色,revoke收回。
grant 对象权限列表 on 对象名 to { public | 角色名 | 用户名 },……;
revoke 对象权限列表 on 对象名 from { public | 角色名 | 用户名 },……;
### 2)将系统权限和角色权限授于用户,revoke收回。
grant { 系统权限 | 角色 }, …… to { public | 角色名 | 用户名 },……;
revoke { 系统权限 | 角色 }, …… from { public | 角色名 | 用户名 },……;
 #######5、查询权限
从数据字典中可以查询当前用户拥有的权限和角色。
1)查询当前用户拥有的角色:
select * from USER_ROLE_PRIVS;
2)查询当前用户拥有的系统权限:
select * from USER_SYS_PRIVS;
3)查询当前用户拥有的对象权限:
select * from USER_TAB_PRIVS;

3.3 数据库对象

数据库对象

3.4 数据类型

常见数据类型

3.5 数据导入导出

使用cmd命令行导入导出数据,也可使用第三方工具。

整库导出
整库导出:exp 管理员账号/密码 full=y;//参数full表示整库导出。导出后会在当前目录下生成一个EXPDAT.DMP的文件,此文件为备份文件。如果想导出数据到指定位置,并且取个名字,需要添加file参数。例如:exp system/123456 file= C:\person.dmp full=y。

整库导入
整库导入:imp 管理员账号/密码 full=y file=C:\person.dmp。

按用户导出导入
1.3.1 按用户导出:exp 管理员账号/密码 owner=用户名 file=C:\person.dmp。
1.3.2 按用户导入:imp 管理员账号/密码 file=C:\person.dmp fromuser=用户名。

按表导出导入
1.4.1按表导出:exp 管理员账号/密码 file=person.dmp tables=t_person,t_student。
1.4.2按表导入:imp 管理员账号/密码 file =person.dmp tables=t_person,t_student。

四、备份和恢复

4.1 日志

Oracle以SQL脚本的形式实时记录了数据变化的详细日志,这些日志保存在重做日志文件中。根据重做日志文件,可以对数据库进行备份和恢复。

可以简单的认为,数据库每次在commit之前,会把操作数据的SQL脚本写入日志文件。

日志文件有两种:在线日志和归档日志。
创建Oracle数据库实例的时候,缺省建立三组在线日志,每组一个日志文件。三组日志中只有一组处于活动状态,这组活动的日志也称为当前日志,数据库不断的往当前日志里写入SQL脚本,当前日志写满后,Oracle会切换到下一组日志,继续写入,就这样循环切换。日志组在切换时,如果数据库是归档模式,则将当前日志文件的内容转存为操作系统文件,成为归档日志;若当前数据库是非归档模式,则不进行归档操作,当前日志文件中的内容会被下一次覆盖。

如果数据库运行在归档模式下,当数据库出现介质失败时,使用备份文件、归档日志和在线日志可以完全恢复数据库。

4.2 备份和恢复

备份的方法

备份的策略

恢复分类

五、启动和关闭

启动

Oracle数据库实例的启动要经历三个阶段。

startup nomount;
alter database mount;
alter database open;
startup open;

关闭

Oracle的关闭也要经历关闭数据库、卸载数据库和关闭实例三个阶段。

关闭方式

shutdown immediate

使用immediate方式关闭数据库时:
1)新的用户不能登录数据库;
2)未提交的事务将会被回滚;
3)Oracle不会等待所有的用户(连接)退出数据库。
特点:
1)这种关闭方式可能会造成数据丢失;
2)数据库重启时不需要实例恢复。
推荐使用immediate方式关闭数据库。

shutdown transactional

以transactional方式关闭数据库时:
1)不允许新的用户登录数据库;
2)不允许建立新的事务;
3)所有的事务完成以后才关闭数据库;
4)一个用户(会话)执行完当前的事务后将被强行断开与数据库的连接。
特点:
1)这种关闭方式不会造成数据丢失;
2)数据库重启时不需要实例恢复;
3)这是最安全的关闭方式。

shutdown abort

以abort方式关闭数据库时:
1)不允许建立新的连接和新的事务;
2)客户端的SQL语句立刻终止;
3)未提交的事务不被回滚;
4)Oracle立刻终止所有连接(会话)。
特点:
1)只有数据库出现问题时候,才使用这种方式关闭数据库;
2)这是一种最不安全的关闭方式,数据库重启时需要实例恢复。

shutdown normal

使用normal方式关闭数据库时:
1)允许新的用户注登录数据库;
2)要等所有的用户自动退出Oracle以后,Oracle才关闭数据库。如果有未退出的用户,那么Oracle就一直等待,直到这个用户退出才关闭数据库。
normal是最慢的数据库关闭方式,不推荐。

Reset

#重启数据库(Reset) --> 相当于shutdown abort和startup。
startup force

本文主要摘抄:http://www.freecplus.net/

上一篇 下一篇

猜你喜欢

热点阅读