扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
博主QQ:819594300
成都创新互联公司主营应县网站建设的网络公司,主营网站建设方案,app软件开发,应县h5重庆小程序开发搭建,应县网站营销推广欢迎应县等地区企业咨询
博客地址:http://zpf666.blog.51cto.com/
有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持!
前言:我们前面学习了安装oracle以及创建数据库,如果想要将客户端与服务器连接起来,这就需要学习数据库的连接配置。在数据库的启动过程中需要打开控制文件,并利用控制文件打开数据文件、重做日志文件,从而打开数据库。本次文档给大家介绍连接配置,此外还有日志文件的原理及操作,以及如何使用和操作数据字典视图。
一、Oracle客户端与服务器端的通信机制
Oracle产品安装完成后,服务器和客户端都需要进行网络配置才能实现网络连接,服务器端配置监听器,客户端配置网络服务名。
1、oracle net协议
Oracle通过oracle net协议实现客户端与服务器端的连接及数据传递。Oracle net是同时驻留在服务器端和客户端上的一个软件层,它封装了TCP/IP,负责建立与维护客户端应用程序到数据库服务器的连接。有协议就要有相应的端口,所以oracle NET有个默认的侦听端口1521。
客户端发出的请求首先通过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、客户端的连接
1)安装
安装时一路下一步即可,安装完成时候会在c:盘下生成oracle文件夹。
2)找到
c:\oracle\product\11.2.0\client_lite\network\admin\tnsnames.ora文件,并修改,修改结果如下:
3)注意:需要在hosts文件里面添加解析
如果遇到一下错误情况:
解决办法是:
4)在win7客户端上打开命名行,执行命令连接
已经远程连接到oracle服务器
二、管理控制文件
控制文件是非常重要的文件,主要掌握以下内容:
了解控制文件在数据库启动的作用
获得控制文件信息
查看控制文件中所存内容的信息
存储多重控制文件
备份和恢复控制文件
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即可。
三、管理重做日志文件
重做日志文件也称联机重做日志,目的是恢复数据。
在数据库运行过程中,用户更改的数据会暂时存放在数据库的高速缓冲区中。为了提高写数据库的速度,并不是一旦有数据变化,就把变化的数据写到数据库文件中。频繁的读写磁盘会使数据库系统效率降低,所以,要等到数据库高速缓冲区中的数据达到一定的量或满足一定条件时,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发出信号
强制日志切换命令如下:
强制产生检查点事件(手动)命令如下:
四、管理归档日志文件
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:显示历史归档日志信息(即已归档的日志文件的信息)。
如何查看所有有效的归档日志文件存储目录:
说明:获取已归档的日志文件的信息,归档进程会在每次日志切换后将联机重做日志文件复制到一个归档日志文件,从而生成一串连续的且能用于恢复一个备份的日志文件。这些日志文件的名称和位置由若干初始化参数控制。
五、数据字典
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
六、动态数据字典视图及使用
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日,该数据库运行在归档模式。
动态数据字典视图很好地反映了当前数据库的运行状态信息,对于数据库性能调优和判断系统瓶颈提供了信息支持。通过动态数据字典视图还可以查看控制文件的信息、数据文件的信息和表空间的信息。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流