博主QQ:819594300sql
博客地址:http://zpf666.blog.51cto.com/数据库
有什么疑问的朋友能够联系博主,博主会帮大家解答,谢谢支持!vim
前言:咱们前面学习了安装oracle以及建立数据库,若是想要将客户端与服务器链接起来,这就须要学习数据库的链接配置。在数据库的启动过程当中须要打开控制文件,并利用控制文件打开数据文件、重作日志文件,从而打开数据库。本次文档给你们介绍链接配置,此外还有日志文件的原理及操做,以及如何使用和操做数据字典视图。服务器
1、Oracle客户端与服务器端的通讯机制网络
Oracle产品安装完成后,服务器和客户端都须要进行网络配置才能实现网络链接,服务器端配置监听器,客户端配置网络服务名。oracle
1、oracle net协议tcp
Oracle经过oracle net协议实现客户端与服务器端的链接及数据传递。Oracle net是同时驻留在服务器端和客户端上的一个软件层,它封装了TCP/IP,负责创建与维护客户端应用程序到数据库服务器的链接。有协议就要有相应的端口,因此oracle NET有个默认的侦听端口1521。ide
客户端发出的请求首先经过oracle net协议转换,转换成能够经过网络传输的信息,经过tcp/ip网络将请求传输到数据库服务器端,服务器端收到客户端请求后经过oraclenet协议转换,将请求转换成数据库能够解释执行的本地指令,并在服务器端执行,并将结果经过tcp/ip和oracle net协议传输给客户端显示函数
2、客户端与服务器端的链接过程工具
Oracle服务器经过一个名为“oracle net监听器”的组件接收来自客户端的链接请求,监听位于服务器端的一个后台进程。发送的客户端链接请求,首先被服务器的监听器所侦听,并交给对应的数据库实例,从而创建起客户端与服务器的链接。链接创建后,客户端与服务器端就能够直接进行通讯,不须要监听器参与。要实现监听器对客户请求的监听,须要对监听器进行配置。
Oracle网络服务名是一个标识符,表明客户端链接服务器的配置信息。
客户端与服务器端的链接过程以下:
1)在服务器端有一个常驻的监听器,监听客户端发出的链接请求。
2)用户在客户端使用(企业管理器或sql工具),输入用户名、口令及网络服务名,或在sql命令行中输入相似
“CONNECT username/password@net_service_name”的请求。
3)客户端查看网络服务配置文件tnsnames.ora文件,将网络服务名映射为包含oracle服务器地址、监听端口和全局数据库名的链接描述符。
4)客户端根据链接描述符定位监听器,并经过网络链接信息传递给监听器。
5)监听器查询监听配置文件listener.ora,找出所要链接的服务器。
6)客户端和服务器开始通讯。
3、配置和管理Oracle网络配置的工具常见的有如下几种:
1)netca方式
查看监听文件:
开启新的监听器:
查看监听器状态:
2)netmgr方式
3)命令方式
修改vim/opt/oracle/product/11.2/db_1/network/admin/listener.ora
增长新的侦听器,代码以下:
开启新的监听器:
解决方法:监听启动和数据库实例启动的顺序
根据前面的知识,启动完数据库实例后,启动监听,在链接数据库时,只有这两者兼备,oracle才能向外提供服务。
监听和实例启动顺序的前后会对两者之间的工做协调产生影响,具体以下:
先启动监听,后启动实例:此时远程客户端链接实例是正常的,不会有问题,由于监听先启动,在启动实例时后台进程PMON会向监听注册服务器,当用户请求服务时,二者的协调工做已准备就绪。
先启动实例,后启动监听:若是监听刚启动,用户立刻链接实例,可能会报“监听程序当前没法识别链接描述符中请求的服务”的错误,缘由在于PMON还没来得及向监听注册实例服务。可是这个问题只会存在很短的一段时间,再链接就不会有问题了,为何等一会就行了呢?由于PMON每隔一段时间都会看有无服务须要向监听注册,此时若监听已启动,PMON就能注册成功,两者的协调工做就准备就绪了。
有没有办法解决很短的一段时间内的这个问题呢?答案是必定的。就是以静态注册的方式,即将实例的服务描述添加到listener.ora,这样只要启动监听,对应的服务在监听中就注册了。这时只要实例正常启动完成,就能够对外提供服务器了。在Listener.ora代码中添加以下代码便可。
4、客户端的链接
安装时一路下一步便可,安装完成时候会在c:盘下生成oracle文件夹。
2)找到
c:\oracle\product\11.2.0\client_lite\network\admin\tnsnames.ora文件,并修改,修改结果以下:
3)注意:须要在hosts文件里面添加解析
若是遇到一下错误状况:
解决办法是:
4)在win7客户端上打开命名行,执行命令链接
已经远程链接到oracle服务器
2、管理控制文件
控制文件是很是重要的文件,主要掌握如下内容:
了解控制文件在数据库启动的做用
得到控制文件信息
查看控制文件中所存内容的信息
存储多重控制文件
备份和恢复控制文件
1、控制文件在数据库启动的做用
对于dna来说,oracle数据库控制文件是很是重要的文件,他是数据库建立的时候自动生成的二进制文件,其中记录了数据库的状态信息。其它任何用户都没法修改控制文件,只有数据库运行过程当中,数据库实例能够修改控制文件中的信息。控制文件主要包括如下内容:
数据库名称,一个控制文件只能属于一个数据库。
数据库建立时间。
数据文件的名称、位置、联机、脱机状态信息。
重作日志文件的名称、位置及归档信息。
全部表空间信息。
当前日志序列号。
最近检查点信息。
控制文件在数据库启动的mount阶段被读取,数据库启动与控制文件的关系以下图:
在数据库启动时首先使用默认规则找到并打开参数文件,在参数文件中含有控制文件的位置信息,打开控制文件后,会经过控制文件中记录的各类数据库文件的位置打开数据库,从而启动数据库到可用位置,因此在数据库启动后,在数据库的运行过程当中,数据库服务器可不断地修改控制文件中的内容,因此在数据库被打开的阶段,控制文件必须是可读写的,可是其余任何用户都没法修改控制文件,只有数据库实例能够修改控制文件中的信息。
2、得到控制文件信息
1)能够从V$CONTROLFILE视图中查看控制文件信息,包括控制文件名称。
2)还能够从V$PARAMETER视图中查看
3、查看控制文件中所存内容的信息
从截图当中可能够看到控制文件中存放了建立数据库的信息、重作日志信息、数据文件及归档日志文件记录等信息。这些有价值的信息用于数据维护和管理,不少数据字典视图是从控制文件中得到的信息。
4、存储多重控制文件
因为控制文件很是重要,因此要求控制文件不能只有一个,一般数据库中控制文件要多于3个,而且存放在不一样的磁盘上,这种使用控制文件的方法也称为控制文件的多路复用。实现多重的一个方法就是经过复制控制文件到多个位置并修改初始化参数文件中的CONTROL_FILES参数,使之包含全部控制文件名称。须要注意,当存在多个控制文件时,oracle会同时更新全部的控制文件,可是仅对CONTROL_FILES中所列举的第一个控制文件进行读取操做。
举例说明实现多路复用控制文件的方法:
1)数据库状态为打开状态,修改SPFILE中的CONTROL_FILES参数。
2)关闭数据库
3)使用操做系统命令将文件复制到新的位置
5、备份和恢复控制文件
1、备份控制文件
有两种方式备份:一种是备份为二进制文件,另外一种是备份为脚本文件,经常使用的备份为二进制文件的方法(备份二进制文件即对控制文件进行复制)
6、备份和恢复控制文件
1、备份控制文件
有两种方式备份:一种是备份为二进制文件,另外一种是备份为脚本文件,经常使用的备份为二进制文件的方法(备份二进制文件即对控制文件进行复制)
2、恢复控制文件(为了实验更有说服性,先关闭oracle数据库)
1)删除控制文件control01.ctl(模拟损坏)
2)启动数据库(报错)
3)执行命令恢复
4)执行完上面的恢复命令,oracle数据库自动启动,此时的控制文件是control03.ctl,control01.ctl没有恢复回来,咱们能够手动拷贝一份control03.ctl,手动改为名字叫control01.ctl便可。
或者:(如下是最简单的作法)
若是control01.ctl丢失,能够直接使用control03.ctl将control01.ctl替换,或者复制一份更名为control01.ctl便可。
3、管理重作日志文件
重作日志文件也称联机重作日志,目的是恢复数据。
在数据库运行过程当中,用户更改的数据会暂时存放在数据库的高速缓冲区中。为了提升写数据库的速度,并非一旦有数据变化,就把变化的数据写到数据库文件中。频繁的读写磁盘会使数据库系统效率下降,因此,要等到数据库高速缓冲区中的数据达到必定的量或知足必定条件时,DBWR进程才会将变化了的数据写到数据文件中。这种状况下,若是DBWR把变化了的更改写到数据文件以前发生了宕机,那么数据库高速缓冲区中的数据就会所有丢失。若是在数据库服务器重启动后没法恢复这部分用户更改的数据,显然是不能够的。
重作日志就是把变化了的数据首先保存起来,其中LGWR进程负责把用户更改的数据先写到重作日志文件中,这样数据库从新启动时,数据库系统从重作日志文件中读取这些变化了的数据,将用户更改的数据提交到数据库中,写入数据文件。
为了提升磁盘效率和防止重作日志文件损坏,oracle引入了一种重作日志文件结构,如图:
上图能够看出有3个重作日志组,每组包含两个重作日志成员。当第一个日志组写满以后,就会中止写入,而转向第二个日志组,第二个写满后,转向第三个日之组,第三个写满就向第一个日志组写入,oracle以这种循环方式使用重作日志组。
Oracle规定每一个数据库至少有两个日志组,每组至少包含一个或者多个日志成员。
使用新的重作日志以前,DBWR进程须要将全部的数据更改写到数据文件中。若是数据库处于归档模式下,当发生日之组切换时,归档进程ARCH会把当前已满的重作日志文件中的数据复制到归档日志中。
1、读取重作日志文件信息
数据字典视图V$LOG记录了当前数据库的日志组号、日志序列号,每一个日志文件的大小,每一个日志组的成员数量,是否存档以及日志组的当前状态。
1)使用V$LOG查看重作日志文件的信息
2)数据字典视图V$LOGFILE记录了当前日志组号,该日志组的状态、类型和日志组成员信息。
使用V$LOGFILE查看重作日志组信息
3)建立重作日志组
增长重作日志成员,并把每一个日志组的重作日志成员分布在不一样的磁盘上,提升磁盘效率和防止重作日志文件的损坏。
语法:
ALTER DATABASE [database_name]
ADD LOGFILE[GROUP group_number]
Filename[SIZE size_integer [K\M]] [REUSE]
解释:database_name:数据库实例名
group_number:日志组编号
Filename:日志文件路径及名称
4)删除重作日志组
删除文件组的限制条件如下:
当前日志组不可删除
要删除当前日志组须要先对当前日志组进行切换
使用命令为alter system switch logfile;
活动的日志组不可删除
没有归档的日志组不可删除(前提是已运行在归档模式下)
5)添加/删除重作日志文件
上图中发现新添加的redo33.log是无效状态,是由于三个日志组的日志成员尚未写满,因此redo33.log是无效状态,只要作两次强制日志切换就能够发现是ONLINE状态了,方法以下:
发现redo033.log已经在线。
删除重作日志文件redo033.log
若是删除不了,估计是组3是当前被使用的状态(即组3是currrnt状态),须要执行altersystem switch logfile后再删便可!
6)日志切换和检查点事件
日志切换就是中止当前日志组,转而写另一个新的日志组,系统能够自动切换,也能够手工切换,当发生日志切换时,系统会在后台完成检查点的操做,以减小实例的恢复时间。
检查点是一个事件,用于减小实例恢复的时间,当检查点发生时,它会触发DBWR进程,把数据高速缓冲中变化了的数据写入数据文件,同时检查点进程更新控制文件和数据文件头部,以使它们保持一致。检查点实际上是一个后台进程,用来保证全部修改过的数据库缓冲区的东西都写入数据库文件。
检查点时间越频繁,则一旦数据库发生故障,须要数据库恢复的重用日志中的数据就越少(由于在恢复时,就没必要检查恢复检查点以前的重用日志中的数据),因此就减小实例恢复的时间。
启动时间:
每隔三秒(或更加频繁)
发生日志切换
当即选项关闭例程时
手动请求
负责如下事项:
使用检查点信息更新数据文件标题
使用检查点信息更新控制文件
在完成检查点向DBWn发出信号
强制日志切换命令以下:
强制产生检查点事件(手动)命令以下:
4、管理归档日志文件
1、归档日志介绍
Oracle数据库有两种运行方式,归档(ARCHIVELOG)方式和非归档(NO ARCHIVELOG)方式。在非归档方式下,日志切换时直接覆盖之前的重作日志文件,不产生归档日志。数据库在归档方式下运行,在日志切换后,ARCH进程会对本身写满的重作日志文件进行存档。默认状况下,oracle采用非归档的运行方式,主要由于归档方式会给系统带来必定的性能问题,只有当数据库运行在归档方式时,ARCH进程才存在,ARCH进程是oracle的可选后台进程,将日志存档,以便保存对数据库作的全部修改,这样,及时在数据文件磁盘损坏的状况下,数据库管理员也能将对数据库恢复至故障发生时的状态。
1)归档进程
是可选的后台进程
为数据库设置ARCHIVELOG(归档)模式时会自动归档联机重作日志文件
保留对数据库全部更改的记录
2)归档日志文件
数据库在容许覆盖重作日志信息以前生成联机重作日志组的副本。
这些副本又称为“归档日志”。
2、配置数据库归档日志步骤:
查询数据库归档方式,肯定当前不处于归档方式
关闭数据库并启动数据库到MOUNT状态
将数据库设置位归档模式,并验证
使用alter database archivelog命令将数据库设置为归档模式
3、获取归档日志信息
数据字典视图可帮助用户获取数据库配置信息。
用户经过使用V$ARCHIVE_DEST和V$ARCHIVE_LOG视图获取归档日志信息。
V$ARCHIVE_DEST:显示当前全部归档日志存储位置及其状态。
V$ARCHIVE_LOG:显示历史归档日志信息(即已归档的日志文件的信息)。
如何查看全部有效的归档日志文件存储目录:
说明:获取已归档的日志文件的信息,归档进程会在每第二天志切换后将联机重作日志文件复制到一个归档日志文件,从而生成一串连续的且能用于恢复一个备份的日志文件。这些日志文件的名称和位置由若干初始化参数控制。
5、数据字典
1、数据字典定义
数据字典是oracle存储关键信息的表和视图的集合。是数据库的说明,包含数据库中全部对象的名称和属性。Oracle进程会在SYS模式中维护这些表和视图,也就是说数据字典的全部者为SYS用户,数据存放在SYSTEM表空间中。
数据字典描述了实际数据是如何组织的,如一个表的建立者信息,建立时间信息,所属表空间信息,用户访问权限信息等。对他们能够像处理其余数据库表或视图同样进行查询,但不能进行任何修改。
Oracle数据字典一般是在建立和安装数据时被建立的。
Oracle数据字典是oracle数据库系统工做的基础。
没有数据字典的支持,oracle数据库系统就不能进行任何工做。
2、数据字典的构成
数据字典分为数据字典表和数据字典视图。数据字典中的表不能够直接被访问,可是能够访问数据字典中的视图。数据字典视图分为两类:静态数据字典视图和动态数据字典视图。
1)数据字典表
数据字典表中的数据是oracle系统存放的系统数据,而普通表存放的是用户的数据。为了方便的区别这些表,这些表的名称都是用$结尾,这些表属于SYS用户。
为了方便对数据字典表的查询,oracle对这些数据字典都分别创建了用户视图,这样既容易记住,还隐藏了数据字典表之间的关系。
2)静态数据字典视图
静态数据字典中的视图分为3类,他们分别由3个前缀构成:USER_*、ALL_*、DBA_*。
USER_*:该视图存储了当前用户所拥有的对象的信息(既全部在该用户模式下的对象)。
ALL_*:该视图存储了当前用户可以访问的对象的信息,(与USER_*相比,ALL_*并不须要拥有该对象,只须要具备访问该对象的权限便可)。
DBA_*:该视图存储了数据库中全部对象的信息,(前提是当前用户具备访问权限,通常来讲必须具备管理员权限)。
3、经常使用的数据字典视图
1)user_tables:描述当前用户拥有的全部表的信息,主要包括表名、表空间名、簇名等。
经过此视图能够清楚地了解当前用户拥有的表有哪些。
2)查询该用户有哪些索引
SELECT index_name FROM user_indexes;
3)查询该用户拥有哪些视图
4)查询该用户拥有哪些数据库对象,包括表、视图、存储过程、触发器、包、索引、序列等。
SELECT object_name FROM user_objects;
5)查询当前用户的信息,主要包括当前用户名、帐户id、帐户状态、建立时间等。
SELECT * FROM user_users;
6)查询当前用户可以访问的全部表、过程、函数等。
7)DICTIONARY 数据字典视图包含数据字典中一切对象的名称和说明
SELECT * FROM dictionary;
8)使用数据字典不须要记住全部的数据视图。只须要按照以下步骤操做:
了解数据字典大概分红3类,(user_*、all_*、dba_*),经常使用的是user_*,能够经过下面语句查询具体视图的描述。
而后根据查询结果找到须要的数据字典视图,例如:想知道表就能够查询user_table,想知道视图就能够查询user_view,想知道存储过程就能够查询user_procedure,想知道表中列的状况就能够查询user_tab_columns
6、动态数据字典视图及使用
1、概念
除了静态数据字典中的3类视图,其余的字典视图中主要是V$视图,之因此这样命名是由于他们都是以V$或GV$开头的,这些视图会不断地进行更新,能够反映出当前实例和数据库的运行情况。动态性能表用于记录当前数据库的活动,只存在于数据库运行期间,实际的信息都取自内存和控制文件,dba可使用动态视图来监视和维护数据库。下面列举几个dba维护数据库中常用的几个动态数据字典视图。
2、列举经常使用动态数据字典视图
1)查询和日志文件相关的信息
上图中列出了全部和日志文件相关的动态数据字典视图,若是想了解日志文件的详细信息,可使用v$log视图和v$logfile视图
2)查看日志组状态信息
3)查看重作日志文件信息
4)查询当前正在使用的重作日志文件的信息。
从结果中能够看出,当前数据库正在使用的日志组为group 2,数据库运行在非归档模式,该日志组有一个日志成员,存储目录为/opt/oracle/oradata/orcl/redo02.log。
5)经过v$instance视图查看实例信息
上图中结果说明,固然实例名为orcl,主机名为oracleserver,版本号为11.2.0.1.0,实例启动时间为2016年12月14日,状态为allowed。
6)查看当前数据库的信息
数据库名为orcl,建立时间为2016年12月14日,该数据库运行在归档模式。
动态数据字典视图很好地反映了当前数据库的运行状态信息,对于数据库性能调优和判断系统瓶颈提供了信息支持。经过动态数据字典视图还能够查看控制文件的信息、数据文件的信息和表空间的信息。