Oracle数据库管理员日常操作手册(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-22 10:22:27

点击下载

作者:赵元杰

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Oracle数据库管理员日常操作手册

Oracle数据库管理员日常操作手册试读:

前言

从事Oracle系统环境下的设计、开发、管理及其维护工作的广大技术人员,经常要处理大量的技术任务。比如说,项目设计人员和应用迁移人员需要了解各个Schema下的对象的元数据;应用开发人员需要快速得到某个问题的具体解决方法;维护工程师和DBA需要了解当前Oracle系统性能运行是否良好、性能不佳的根源及其相关SQL语句定位等。大多数多年从事Oracle系统环境开发和维护的工程师都有自己的“Oracle系统常见问题解决秘籍”或“脚本秘籍”,在这些秘籍里包含有从各个渠道搜集的脚本技巧和自己工作经验整理的样例。多数技术人员在工作中遇到问题时,经常快速从这些脚本秘籍中得到问题的解决方法。但是,随着Oracle系统版本的不断变化和系统复杂度的增加,设计人员、开发人员及其维护人员为了解决遇到的问题,花费相当多时间来搜集各类问题的解决脚本上,而不是花时间在解决当前的具体问题上。类似地,为了解决目前Oracle系统的某个紧急的问题,常常在网上到处搜索解决的方法和具体的脚本样例,当看到网上讲了许多理论而没有给出具体解决问题的脚本时,我们都显得很烦躁和无奈。

作为从事Oracle环境项目设计、应用开发和Oracle系统维护多年的软件人员,我非常了解软件开发人员和应用系统维护人员在工作中所遇到的问题和心中的期盼,所以我根据多年的工作经验收集了大量的样例和脚本,并按照内容所属的范围分为“Oracle 12c SQL、Oracle 12c PL/SQL、Oracle 12c管理基础、Oracle 12c性能诊断与调整”四个部分。每个部分都以由浅入深的布局进行编写,读者可根据自己已掌握的知识情况任意跳到相应的章节进行直接搜索和参考。

本书特点:

本书的主要特点是突出问题的解决,也就是针对具体问题给出解决方法与实际实现的脚本。书中省略掉相关的原理和概念性的描述,整个内容都是按照“问题的提出”、“实现技术”、“实现步骤”、“说明”来描述。在“实现步骤”中给出具有参考价值的样例介绍。对于使用本书的读者来说,不必按照章节的顺序进行阅读,可直接查阅所关心的问题。

本书是一本解决问题的快速参考书,它不属于一般的入门级教程,在书中突出快捷高效解决问题,所以本书省略使用Oracle系统图形界面的解决问题的描述。本书的脚本基本上都要在SQL*Plus环境下执行,而包含内置包构成的脚本可以嵌入到PL/SQL应用或Java等高级语言应用中。

本书内容适用于Oracle 11g/12c环境。

本书适用的读者:

就像本书的书名一样,本书的主要使用者是在一线解决具体问题的技术人员。本书适用于基于Oracle 11g/12c环境设计的中、高级技术人员阅读和使用,主要对象为:

● 基于Oracle 11g/12c环境软件项目规划设计人员;

● 基于Oracle 11g/12c环境数据库结构设计人员;

● 基于Oracle 11g/12c环境PL/SQL应用开发人员;

● 基于Oracle 11g/12c环境应用维护人员;

● 基于Oracle 11g/12c环境DBA管理人员;

● 基于Oracle环境应用系统迁移人员;

● 基于Oracle 11g/12c环境性能诊断与优化人员。

本书的结构:

本书分为四篇。

第一篇Oracle 12c SQL,包括第1章~第9章。内容有SQL*Plus的使用、SELECT语句入门、较复杂SELECT语句的使用、DML语句的使用、表与约束的创建及管理、索引创建与维护、Oracle常见对象创建与维护、大数据对象设计与维护、大数据环境的容量规划与设计。

第二篇Oracle 12c P L/SQL。包括第10章~第13章。内容有Oracle 12c PL/SQL基础、存储过程与函数和包、Oracle 12c触发器、常用内置包的使用。

第三篇Oracle 12c管理基础。包括第14章~第21章。内容有Oracle 12c系统实例的管理、Oracle 12c系统安全与用户管理、Oracle 12c数据库审计与访问控制、Oracle 12c表空间与数据文件管理、Oracle 12c撤销表空间与临时表空间、Oracle 12c控制文件管理、Oracle 12c日志文件管理、Oracle 12c闪回的使用。

第四篇Oracle 12c性能诊断与调整。包括第22章~第28章。内容有Oracle 12c系统内存使用优化、Oracle 12c应用系统性能调整、应用系统性能监控与故障问题诊断、Oracle 12c CBO模式下任务、应用系统I/O效率与段重组、Oracle 12c系统故障诊断与修复、Oracle 12c应用系统问题诊断与维护。

由于本书文字和脚本内容繁多,且所有文字均为本人编写和手工输入,书中难免存在疏漏和不足之外,欢迎大家批评指正。如果在运行本书的样例过程中遇到任何问题,可通过zyj5681@aliyun.com邮箱给我发送电子邮件,我会尽快纠正错误和给予回复。如果在运行中出现某些错误的话,也请将显示错误的信息以文本的方式发送给我,并请最好按照下面的格式进行说明:

● 运行的Oracle版本;

● 执行脚本的用户(DBA或普通用户);

● 操作系统(Linux或Windows);

● 脚本所在章节。赵元杰2015年6月第一篇Oracle 12c SQL第1章SQL*Plus的使用

无论软件开发人员或是管理Oracle数据库系统的DBA,SQL*Plus都是一个必不可少的工具。SQL*Plus直接与Oracle数据库交互,即使现在Oracle公司推出色彩鲜艳的EM图形界面,在许多特别的需求上也不能完全替代SQL*Plus工具。本章从一个使用者的角度给出日常使用Oracle系统时常用到的SQL*Plus命令。

值得指出的是,本章是按照日常使用Oracle系统过程中频率较高的命令进行编写,而不是完整的参考手册,对于一些冷僻的命令,建议参考Oracle原厂提供的:SQL*Plus® User's Guide and Reference Release 12.1 E18404-11。1.1 SQL*PIus基础

无论是MS Windows或UNIX环境,只要完成Oracle系统安装,都会提供SQL*Plus的命令或图形的使用。本节讲解初学者使用SQL*Plus常见的问题。1.1.1 如何从命令启动SQL*Plus

启动SQL*Plus命令实用程序sqlplus,才能连接到Oracle系统。

问题的提出

在MS Windows或UNIX环境,要使用SQL*Plus工具以达到使用Oracle系统的SQL语句和SQL*Plus命令,都要启动SQL*Plus工具。使用SQL*Plus可直接访问本地Oracle系统实例,也可访问远程Oracle系统实例。那么如何启动SQL*Plus呢?

实现技术

sqlplus是SQL*Plus实用程序的名词,在MS Windo ws或UNIX环境都可用sqlplus直接启动。

实现步骤

使用sqlplus实用程序可直接启动SQL*Plus工具,如图1-1所示。图1-1 用sqlplus启动SQL*Plus工具

在这个界面中,除了使用SQL*Plus命令,也可使用SQL语句。

说明

一般来说,在完成Oracle软件安装后,sqlplus实用程序与其他可执行程序一起存储在$ORACLE_HOME/bin目录下。如果输入sqlplus后系统提示找不到,建议用cd命令转到bin目录下再直接启动sqlplus。

在SQL>提示下,可以使用标准的SQL语句,比如CREATE TABLE语句等,也可以使用属于Oracle系统特有SQL*Plus命令,比如:SET LINE 200设置行宽带等。1.1.2 如何以另外用户连接Oracle

无论是在SQL*Plus环境或其他的图形界面,Oracle系统只允许每次一个用户连接到一个数据库实例。

问题的提出

Oracle系统有多个用户,比如:默认情况有SYS、SYSTEM、SCOTT等用户。当你已经以某个用户连接到Oracle实例后,你也可能再以另外的用户连接到Oracle实例,那么如何在SQL*Plus以另外的用户连接Oracle实例呢?

实现技术

SQL*Plus提供一个CONNECT命令在SQL>下连接到另外的用户上。CONNECT命令的语法是:CONNECT user_name/password@string,其中user_name为用户名称;password是用户的口令;而string是连接字符串。

实现步骤

在SQL>提示下,使用CONNECT命令可以以明口令的方式连接到Oracle,也可以以隐藏口令的方式连接到Oracle,如:

说明

连接到另外用户是一个常用的操作,可在不存在安全问题时采用明码口令,但建议采用隐藏口令方法。另外,在不使用Oracle系统时用EXIT断开连接。连接字符串是一个存在于tnsnames.ora文件中的字符串,当不能确定字符串是什么,可从Oracle环境的$ORACLE_HOME/network/admin路径中的tnsnames.ora文件找到。1.1.3 如何查询当前用户表的信息

当以某个用户连接到Oracle系统后,你希望查看当前用户的所有表的信息。这也就是前面提到的在SQL>下可以使用标准的SQL语句。

问题的提出

以SQL*Plus连接到Oracle系统的目的就是查看目前用户的对象(如表、视图等)信息情况或创建一些对象(在第2章介绍)等。一般来说,初学者最关心的是目前的用户有哪些表。那么,在Oracle系统里,有哪些方法可查询到当前用户的表的信息呢?

实现技术

可以使用SELECT语句查询数据字典的表的信息,当前用户的表的信息存放在user_tables数据字典里,你可直接查询这个数据字典。

实现步骤

用SQL*Plus以某个用户连接Oracle系统,在SQL>提示下使用SELECT语句实现,如:

说明

除了上面的方法外,也可以使用“select*from tab;”查询到当前用户的表的信息,这里tab是user_tables的同义词。1.1.4 如何断开Oracle连接

为了确保Oracle系统的安全,一般建议在暂时不使用Oracle系统时,断开与Oracle系统的连接。

问题的提出

以SQL*Plus连接到Oracle系统后,无论用户是否操作,Oracle系统都以会话方式与用户的会话保持连接。为了确保用户下对象的安全,当暂时不做任何操作时,该如何断开与Oracle实例的连接呢?

实现技术

可以在SQL>提示下使用DISCONNECT命令或DISC命令实现连接断开。

实现步骤

用SQL*Plus以某个用户连接Oracle系统,在SQL>提示下使用DISCONNECT命令实现,如:

说明

如果使用的是MS Windows的SQL*Plus图形界面,则使用DISCONNECT命令断开与Oracle连接后,Oracle系统仍然保持SQL*Plus图形界面的SQL>提示状态,这样的目的是可以接着再用CONNECT命令进行连接。1.1.5 如何退出SQL*Plus

和断开与Oracle系统连接类似,在不使用Oracle系统时,建议直接断开与Oracle实例的连接。

问题的提出

当已经以SQL*Plus连接到Oracle系统后,系统处于可使用任何有权使用的SQL语句与SQL*Plus命令状态当中,当需要退出SQL*Plus方式时,如何进行退出?

实现技术

可以使用EXIT命令或QUIT命令退出SQL*plus工作方式,当然退出后也就断开了与Oracle的连接。

实现步骤

在SQL>提示下使用EXIT命令实现,如:

说明

在MS Windows的SQL*Plus图形界面下,除了在SQL>提示下用EXIT命令退出外,也可使用QUIT命令退出SQL*Plus;此外,还可直接点击窗口右上角的“X”按钮,或选择“文件”|“退出”来实现。1.2 日常操作命令

完整的SQL*Plus命令有数十种,每种都可以带相应的参数。本节给出SQL*Plus中最常见的操作命令,更为详细的命令,请读者参考原厂的资料。1.2.1 如何列出表的结构

当完成表的创建后,表结构的各项信息(表名、列名、类型等)就已经自动存储到Oracle系统的数据字典中。开发人员和DBA都需要了解相关表的结构。

问题的提出

Oracle系统的表结构存储在数据字典内,直接列出某个表的结构是开发人员关心的问题,那么如何列出某个表的基本结构呢?

实现技术

SQL*Plus使用DESC命令可列出表的基本结构,也可列出存储过程等的相关信息,可在SQL>提示下使用DESC命令实现。

实现步骤

先以普通用户用SQL*Plus登录到实例,然后在SQL>提示下用DESC列出所关心的表的结构信息,需要知道表的名词,比如要列出emp表的结果,则:

说明

这里需要指出的是,用DESC命令只能列出表的基本结构,对于表包含的主键、约束等不会被列出来,要想得到表的结构详细信息,建议采用DBMS_MEDATATA包实现,关于这个内置包的详细讲解见后面章节。1.2.2 如何重复执行最后的SQL语句

在开发与管理过程中,我们一般都输入多条SQL语句,但是,在SQL>缓冲区中Oracle只为会话保持最后一条SQL语句,当希望重复执行同一条语句时,实际上执行的是当前会话的所有SQL语句的最后一条语句。

问题的提出

许多地方都需要用到重复执行同一条SQL语句这样的要求,使用者不再重新输入即可多次执行。在SQL*Plus中支持重复执行同一条SQL语句的功能,那么,具体如何实现呢?

实现技术

要在SQL*Plus环境下重复执行同一条SQL语句或同一个PL/SQL语句时,这条语句必须先存在SQL的缓冲区中。当SQL语句还在SQL缓冲区时,就可使用斜杠(“/”)来实现。

实现步骤

为了能执行某个SQL语句,则首先将该语句输入到SQL缓冲区(我们在“SQL>”提示下所输入的SQL语句实际就进入了SQL缓冲区),然后在SQL>后面用“/”来实现执行上面刚输入的SQL语句,如:

说明

在SQL>上输入“/”(斜杠)来实现执行最后的SQL语句,Oracle系统用RUN命令也能执行SQL语句。但是Oracle原厂很少使用RUN命令。1.2.3 如何用记事本编辑当前SQL语句

在SQL*Plus环境中编辑SQL语句是一个经常使用的方法,编辑可以将现有的SQL语句进行修改后变为满足新要求的SQL语句。

问题的提出

在SQL>环境中编辑目前缓冲区中的SQL语句,可通过修改SQL语句而不是重新输入快速满足需要,那么如何启动文本编辑窗口呢?

实现技术

在SQL>提示下,在MS Windows环境,Oracle支持自动启动记事本编辑窗口,但是在UNIX环境下可支持进入VI编辑器。

实现步骤

在SQL>提示下,可输入ed来进入到“记事本”编辑窗,当编辑SQL语句完成,点击“文件”选择“保存”,最后选择“退出”再回到SQL>提示下。

说明

MS Windows环境支持在SQL>提示下直接进入“记事本”编辑器,建议在调试期可以这样做,但在大型系统的设计与开发过程中,可采用更有效的方法实现。

特别提醒:当在UNIX(或Linux)环境登录到SQL>时,千万不要使用ed来实现进入“记事本”文本编辑器,这样会导致敲击任何键都不被识别的状态。1.2.4 如何将SQL语句保存到OS文件

将目前还处在SQL缓冲区的SQL语句保存到一个文本文件中,可以在需要时重复使用。

问题的提出

如果经过多次修改将较为复杂的SQL语句编辑正确,可将该SQL语句保存在一个文本文件中,以便下次使用或与其他的语句进行编辑完成更为复杂的应用要求,那么如何实现将当前缓冲区SQL存为文本文件的要求呢?

实现技术

在SQL*Plus环境中,Oracle可将缓冲区的SQL语句保存到OS路径的文本文件中,由SAVE命令实现。

实现步骤

当确认目前SQL缓冲区还有SQL语句时,可在SQL>提示下用SAVE加OS路径和文件名来实现,如:

说明

SAVE命令可保存当前SQL缓冲区的SQL语句到文本文件,一般建议给出有效的OS路径和文件名,如果没有给出路径,则文件会记录到$ORACLE_HOME/bin目录下;如果给出的文件与目前OS路径存在的文件名重复,则被提示:

如果你希望将目前的SQL语句以追加的方式记录到现有文件的尾部,则需要在SAVE命令的文件名后加“app”,如:SAVE c:\sel_dep app。1.2.5 如何启动SQL脚本文件运行

设计较复杂的应用系统时,一般先将各种创建对象的SQL语句编辑成脚本(后缀为.SQL的文本文件称为脚本),这些脚本以文本文件的方式存储在OS的路径下,当我们需要执行这些脚本时,可直接从SQL*Plus环境启动运行这些脚本以完成一系列的工作。

问题的提出

如果我们已经完成某些SQL脚本的编辑工作,希望在SQL>提示下直接运行这些脚本来完成批处理工作,那么应该如何实现呢?

实现技术

在SQL*Plus环境中,可使用START命令来启动一个编辑正确的SQL脚本文件运行,这个SQL脚本文件的类型可以是.sql类型,也可是.txt或.lst类型。

实现步骤

在SQL>提示下,用start c:\sel_dep命令是假设在c:\路径下已经存储sel_dep.sql文本文件前提下,需要执行该文本文件而发出的启动命令。

说明

如果SQL脚本文件的类型是.sql类型,则启动运行只给出文件名即可,如果脚本文件类型为.txt,则要给出文件名与类型.txt,如start c:\sel_dep.txt等。1.2.6 如何获取SQL运行消耗时间

对于开发人员来说,除了关心应用系统开发外,还关心应用程序中的SQL语句的性能。每个SQL语句被执行后,都被Oracle系统记录所用去的时间。

问题的提出

每个SQL被执行后,我们希望了解该SQL语句运行用去的时间,从而了解语句的优劣及修改效果差的SQL语句,那么如何获取当前SQL语句运行所用去的时间呢?

实现技术

在SQL*Plus环境中,可通过设置计时器来实现,具体就是使用SET TIMING ON命令来实现。

实现步骤

在SQL>提示下,先用SET TIMING ON命令进行设置,可得到SQL语句执行所用去的时间,如:

说明

这里的时间格式分别是小时:分:秒.毫秒,我们可对那些怀疑的SQL语句做类似的比较,从而确定哪些语句更优。这里的毫秒=千分之一秒。1.3 查询输出与报表

SQL*Plus命令可以使用Oracle系统附加的命令,也可使用标准的SQL语句,使用SQL语句和Oracle系统附加的命令,可实现较为复杂的结果报表输出。1.3.1 如何查看当前会话环境变量

SQL*Plus环境存储有许多控制会话所用的环境的行为,比如显示行的宽度、显示屏幕的行数等。可在登录成功后查看和修改这些环境变量。

问题的提出

当登录到SQL>环境时,如何查看当前会话环境变量?

实现技术

成功登录到SQL*Plus后,可使用SHOW ALL命令来显示目前SQL*Plus环境变量的值。

实现步骤

先用SQL*Plus登录到Oracle实例,然后在SQL>提示下,可用SHOW ALL来实现,如:

说明

当在刚登录成功后就使用SHOW ALL命令显示的是默认的SQL*Plus参数,但是可以修改这些变量,当修改后再用SHOW ALL看到的是目前最新的环境变量。所进行修改的变量只能使本次会话有效。1.3.2 如何设置屏幕行的宽度和显示行数

默认情况,SQL>环境的许多环境变量都偏小,比如显示行的宽度默认是80个字符、每屏幕的行数是24行等。

问题的提出

当登录到SQL>环境时,SQL*Plus默认的环境变量一般都偏小,如果希望查询结果显示整齐好看,就需要修改屏幕的显示行数和行的宽度。那么,如何修改屏幕行的宽度和显示行数呢?

实现技术

要将行宽默认的80个字符修改大些,可使用SET LINESIZE命令加参数值来实现。

实现步骤

要修改某个参数,可用set para_name values来实现,如:

说明

这里需要指出的是,Oracle环境变量的名词可以使用缩写,比如上面linesize是完整的拼写,可使用line来替代linesize,比如:set line 180;另外可用set pagesize n来设置每屏显示行数,但建议不要将显示行设置过大,因为过大你会看不到标题提示而不知道某个列的含义。1.3.3 如何截断查询结果后面的空格

在SQL*Plus环境中,行的显示宽度默认为80个字符,但如果将行宽度值设置得更宽,比如设置为set line 200之后,就会出现这样的问题:当列的显示字符比所指定的宽度少时系统用空格替代。

问题的提出

在SQL*Plus环境下用set line nnn指定了行的显示宽度后,Oracle会自动将不足这个宽度的列的末尾用空格来替代,那么如何使系统按照列的实际字符来显示(去掉每行后面的空格)呢?

实现技术

要实现列按照指定的宽度显示,又不需要在后面增加多余的空格,可使用SET TRIMSPOOL ON命令来实现。这个命令的含义是“截断后面的空格”的意思。

实现步骤

先用SQL*Plus登录到Oracle实例,在使用查询语句之前,先用SET TR IMSPOOL ON激活截断空格,然后再执行查询语句即可,如:

说明

默认情况下,行截断功能是处于屏蔽状态(不截断后面的空格),如果希望结果按照对齐的格式显示,可不使用此命令或取消此指定,可用SET TRIMSPOOL OFF来取消原来的指定。1.3.4 如何将数字类型按照习惯格式显示

在使用查询语句查询数字类型结构时,可以有许多种显示格式,比如财务人员喜欢每3位数加一个逗号,如$210,348,986.00等。

问题的提出

在现实生活中,显示数字结果可以有多种格式,那么SQL*Plus是否支持多格式的描述以满足用户的喜好?

实现技术

在SQL*Plus,支持对数字、日期、字符等显示格式的指定。比如,可指定数字的显示格式为999,999.00,这个命令就是COL命令,这个命令的语法是COL c olumn_name format,其中column_name是列名或列别名;format是格式描述。

实现步骤

先用SQL*Plus登录到Oracle实例,在SQL>提示下,先用COL对列进行指定列的显示格式,然后再查询即可,如:

说明

显示格式的描述有许多种,可参考SQL*Plus® User's Guide and Reference原版资料。如果希望清除刚指定的显示格式,可发出CLEAR COLUMNS命令即可。1.3.5 如何查询LONG类型数据

在Oracle系统的历史中,Oracle旧版本一直使用LONG类型存储大对象数据,即使现在Oracle版本支持使用LOB(即BLOB、CLOB、BFILE)类型,但LONG类型仍然支持,特别是Oracle系统的数据字典许多还使用LONG类型存储大文本数据。

问题的提出

若表的大文本数据以LONG类型存储,在SQL*Plus下对LONG列进行查询时,只能看到LONG列的前80个字符(行宽的默认值是80个字符)。那么,如何才能看到LONG类型的完整信息呢?

实现技术

可通过SET LONG{80|n}命令来实现显示更多的LONG列的结果,这里的n表示字节数,可以是1~2,000,000,000之间的数。

实现步骤

在SQL>提示下,可随时用SET LONG命令设置LONG类型的显示字节数,当没有设置前默认的LONG类型的显示字节数一直是80字节,如:

说明

在SQL>下查询带LONG类型前,建议先用SET L ONG n命令设置LONG类型的显示字节数,否则只能看到前80个字节的字符数。1.3.6 如何复制一个包含LONG类型的表

虽然现在Oracle 11g/12c版本不提倡使用LONG数据类型来存储表的大文本数据,但是Oracle本身的许多内部数据字典也还采用LONG类型来存储大文本数据,此外,可能一些历史数据仍然采用LONG类型来存储。

问题的提出

由于Oracle系统的LONG数据类型是一个特殊的类型,它与BLOB或CLOB等存储原理不同,因此,Oracle并不支持直接对有LONG类型的表的复制,特别是不允许直接使用CREATE TABLE…AS SELECT*这样的CTAS方法对带有LONG数据的表进行复制,那么,该如何复制带LONG类型的表呢?

实现技术

既然Oracle不支持直接对LONG类型的CTAS方法,那么它就会提供另外的方法来实现跨数据库的表的复制,这个命令就是COPY命令,需要指出的是这里的COPY不是OS命令,而是SQL*Plus命令。

实现步骤

在SQL*Plus环境下,可用COPY命令复制带有LONG类型的表。COPY命令的语法如下:

下面例子是远程复制一个带有LONG类型的表的过程。

说明

在许多的应用数据迁移当中,经常遇到带有LONG类型的表,在进行复制前,建议从数据字典来查询哪些表带有LONG数据类型,然后采用COPY方法统一复制这些表的数据到新环境的Oracle系统中。1.3.7 如何将查询结果转存到文本文件中

我们在运行SQL语句与SQL*Plus命令时,都会产生运行的结果,这些结果有时需要存储到一个文件中以便再阅读或编辑做他用。

问题的提出

若希望将查询结果以文本文件的格式记录到OS路径的文件中,以便日后对这些结果进行其他的处理,比如发送给相关人员等。那么,如何实现将查询结果转存在文件中呢?

实现技术

Oracle SQL*Plus提供一个SPOOL命令可实现将屏幕上的显示信息记录到OS路径的文本文件中,文件的默认类型为.lst。

实现步骤

要实现将查询结果转存到OS路径的文本文件中,先用SPOOL命令指定OS路径和文件名,此外,当结束本次转存时,还必须用SPOOL OFF命令标识本次转存到此结束,如:

说明

当使用SPOOL OFF命令标识转存结束后,被转存的文件以正常关闭的方式结束,这时就可以使用或编辑这个.lst文件了。若没有使用SPOOL OFF命令标识本次转存的结束,屏幕上最新的信息可能会不完全被记录到文件中。1.3.8 如何将操作中的错误记录到文件中

在执行SQL语句时,可能由于一些环境原因导致错误的出现,而我们希望将这些错误进行修正以解决语句错误问题,这是我们调试SQL语句经常采用的方法。

问题的提出

我们在调试SQL语句后,如何将这些错误语句的信息记录到一个表中供事后查看呢?

实现技术

Oracle 11g/12c在SQL*Plus给出一个新功能,可实现将SQL错误信息记录到表中,即用SET ERRORLOG ON命令来设置。

实现步骤

先用SQL*Plus登录到Oracle实例,在SQL>提示下,使用SET ERRORLOG ON进行激活,如:

说明

Oracle 11g/12c版本支持此功能,其他低版本的SQL*Plus登录到Oracle 11g系统仍然不能使用这些新功能。1.3.9 如何保持自定义的环境变量设置

当DBA在维护Oracle系统时,经常按照自己的喜好来工作。比如,将屏幕的行宽设置为200个字符(set line 200),屏幕显示行设置为60行(set pagesize 60)等,当自己使用SQL*Plus进入Oracle后,原来设置的环境变量自动生效。

问题的提出

虽然Oracle系统提供SET命令用于设置各项变量的数值,但在默认情况下,只要结束本次会话(退出SQL*Plus环境),在会话中设置的各项变量值就会自动失效。那么,如何将自己需要的环境变量保存在Oracle系统内,以便下次登录到Oracle实例后,这些环境变量自动生效呢?

实现技术

每次登录Oracle系统后,Oracle系统会自动执行文件glogin.sql,可将一些环境变量(如linesize)的设置命令或者其他命令放入该文件中。

实现步骤

先在OS提示下,比如在Windows下对c:\app\…\sqlplus\admin\glogin.sql文件进行编辑,步骤为:

说明

当完成对glogin.sql文件的编辑设置后,以后凡是登录到Oracle系统,都会按照这样的环境变量进行设置,建议在设置变量时考虑大多数人员的需要。1.4 Oracle数据字典与性能视图

数据字典与性能视图是DBA与维护工程师必须掌握的一组表,因为在Oracle系统10g~12c版本中,Oracle系统自动实时将系统运行的有关信息记录到一组被称为数据字典的表中。此外,数据字典记录整个Oracle系统的所有对象及其他重要信息。1.4.1 如何获取数据字典信息

对于初学者来说,查询数据字典的信息是一个基本的要求。因为只有了解从哪里可以查询到数据字典的名称及其存储的信息内容,才能从这些数据字典中查询到所需要的信息。

问题的提出

对于新手和熟悉Oracle系统的使用者来说,必须了解的数据字典就是DICT了。DICT包含有数据字典信息和性能视图的信息,那么,如何才能查询到这些信息呢?

实现技术

为了获取Oracle系统的数据字典和视图的信息,最好以SYSDBA登录Oracle系统,然后查询DICT数据字典即可。

实现步骤

先启动SQL*Plus,并以SYSDBA登录到Oracle实例,在SQL>提示下,然后查询DICT即可。

说明

Oracle系统数据字典多数都是以DBA_xxx命名的;而性能视图均以V$xxx命名,若Oracle环境属于RAC集群的话,则要查询的性能视图均以GV$xxx命名。1.4.2 如何获取Oracle系统性能视图

Oracle系统性能视图自动记录Oracle系统运行时的相关数据。比如,某个SQL运行所使用CPU的时间、排序操作所使用的内存大小等。

问题的提出

当希望查询某项Oracle系统运行期间的信息时,需要查询相应的性能视图(也称动态性能视图),比如,要查询当前会话登录的时间,则需要访问V$MYSTAT视图。那么如何查询到当前Oracle系统的所有性能视图信息呢?

实现技术

为了获取Oracle系统的数据字典和视图的信息,最好以SYSDBA登录Oracle系统,然后查询DICT数据字典即可。

实现步骤

下面脚本从DICT中查询表名称和表的注释信息:

说明

Oracle系统性能视图除了以V$xxx命名外,性能视图所记录的信息基本是动态的,所谓动态就是指Oracle系统在运行中,不断采集Oracle实例运行的情况信息,并记录到性能视图中,此外,从Oracle 10g开始,部分性能视图保留的信息可持续1周时间。1.4.3 用户如何获取自己拥有对象的信息

所谓用户对象指的是某个用户拥有的表、视图、索引、存储过程等的实体。对于普通用户(没有DBA权限)来说,主要关心自己使用和维护的对象的基本信息。

问题的提出

在使用和维护Oracle系统应用的过程中,用户需要了解当前用户的表、索引、视图等对象信息,从而对这些对象进行维护。那么,用户从哪些数据字典中可以看到属于自己的对象的信息呢?

实现技术

用户拥有的对象就是指用户创建的对象,要查询到用户拥有对象的信息,需要查询两组数据字典。首先,要了解当前用户拥有的对象的基本信息,然后再查询某个对象的详细信息。

实现步骤

先启动SQL*Plus,并以任何用户登录到Oracle实例,在SQL>提示下,查询USER_OBJECTS数据字典。下面我们给出用户查询自己用户对象的基本信息,然后再查询某个对象的详细信息:

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载