核心技能部分
2.1Oracle网络连接的基本管理
2.1.1Oracle应用程序的体系结构
1. 客户机/服务器模式结构(C/S结构)
基于客户机/服务器结构的Oracle网络如图2.1.1所示。
图2.1.1 Oracle 应用C/S结构
当客户机需要服务器的数据时,可以通过连接服务器来获取。客户机向服务器发送sql数据库请求,服务器接受并执行传送给它的sql语句,然后把执行结果和产生的消息文本返回给客户机。
2. 基于因特网的应用模式结构
基于因特网(B/S)的结构如图2.1.2所示。
图2.1.2 基于B/S的应用结构
在基于B/S的模式中,客户机需要安装WEB浏览器,数据库请求通过应用程序服务器发送到数据库服务器,数据库服务器接受并执行发送给它的sql语句,然后把执行结果和消息文本,通过应用程序服务器返回给客户机。最后数据库操作结果通过浏览器展现个客户机。
2.1.2Oracle数据库网络配置
在学习如何具体配置Oracle数据库网络连接之前,有几个Oracle网络连接相关的基本概念需要我们先理解。
1. 数据库实例名
数据库实例名是用于和操作系统进行联系的标识,就是说数据库和操作系统之间的交互用的是数据库实例名。数据库名和实例名可以相同也可以不同。在一般情况下,数据库名和实例名是一对一的关系。关于数据库实例的讲解,后面会有专门介绍。在此,只提出数据库实例名的概念。
2. 全局数据库名
Oracle数据库系统是一个大型分布式数据库系统,为了保证分布式网络环境下每个数据库名称的唯一性,Oracle使用域名结构命名网络资源。采用这种命名方法时,一个数据库的全局名称由其数据库名和该数据库所在的域名组成。如图2.1.3所示。
图2.1.3 公司部门结构及域名组织
三个数据库名称都是orcl,如果三个数据库进行数据维护互相访问的时候,数据库名称就会发生冲突。有了全局数据库名后,公司数据库的全局数据库名是orcl.comp,销售部的数据库全局数据库名是orcl.sales.comp,同理,开发部数据库全局数据库名是orcl.dev.comp。如此一来,数据库名称就不会发生混淆了。
3. 监听程序
客户机与Oracle数据库服务器通信时,网络连接是通过监听程序建立的。监听程序也叫监听器。监听器是运行在服务器端的一个单独的服务进程。其职责是监听网络上客户机对服务器的连接请求,并管理客户机和服务器之间的网络通信。每次客户机请求与服务器进行网络会话时,监听器会接受到该请求,并把该请求传送给服务器。监听器将客户机提供的信息与自己保存的配置文件信息进行比较,如果协议匹配、主机匹配、端口匹配、数据库匹配,监听器就授权客户机连接到服务器,否则拒绝客户机的连接请求。如入2.1.4所示。
图2.1.4 监听器的作用
因此,在客户机上建立与服务器的连接过程,实际上就是建立和监听器的连接过程。
4. 服务名
服务名是数据库服务器在客户端的名称,从Oracle9i版本开始,引入了一个新的概念,即数据库服务名。如果数据库有域名,则数据库服务名就是全局数据库名;否则,数据库服务名与数据库名相同。
理解以上几个概念后,现在开始学习Oracle网络配置的具体操作。
在Oracle产品安装完成后,客户端为了与数据库服务器连接实现数据访问,必须进行网络连接配置。Oracle网络配置分为两种——服务器端配置和客户端配置,配置的结果由配置文件来保存。配置文件包含以下3个:
(1)监听程序的配置文件(listener.ora):服务器端配置的目的就是配置该文件,该文件存储于服务器端,默认位置“%ORACLE_HOME%\NETWORK\ADMIN“。在安装了Oracle 11g之后,listener.ora文件的格式和内容如图2.1.5所示。
(2)本地网络服务名的配置文件(tnsnames.ora):当采用本地命名方法时,就必须在客户端保存tnsnames.ora配置文件,客户端配置的目的就是配置该文件,默认位置为“%ORACLE_HOME%\network\admin”。在安装了Oracle 11g之后,tnsnames.ora文件的格式和内容如图2.1.6所示。
图2.1.6 配置文件tnsnames.ora
(3)命名方法配置文件(sqlnet.ora):如果需要配置命名方法,则还要在客户端和服务器端配置一致的文件。Oracle 11g默认采用本地命名方法。sqlnet.ora文件的格式和内容如图2.1.7所示。
listener.ora、tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,都是放在$ORACLE_HOME\network\admin目录下。其中listener.ora和数据库服务器端相关,而tnsnames.ora和sqlnet.ora这2个文件不仅仅关系到服务器端,主要的还是和客户端关系紧密。
Oracle网络配置分为客户端网络配置和服务器端网络配置两个部分。安装Oracle数据库的时候,可以选择只安装客户端,这样只涉及配置客户端,用以能够正确连接到Oracle数据库服务器。有时候,Oracle服务器A需要访问别的服务器B,那么服务器A也是作为客户端,需要正确配置才能够正确使用。
(1)Oracle网络连接服务器端配置
服务器端配置主要是服务器端的监听程序的配置。监听程序的配置信息包括监听的网络协议、端口号、主机名等信息。一般情况下,在安装Oracle 11g数据库时会自动地在配置文件listener.ora中配置一个默认监听程序。该监听程序的名称为LISTENER,通信协议为TCP/IP,端口号为1521。但一个服务器可以有多个监听程序,分别监听不同的协议和端口号。如果某个监听程序的配置不再适应实际情况,就需要对其进行重新编辑或配置。以下将在服务器端介绍如何使用Oracle Net Manager来配置监听程序,步骤如下:
第一步,执行【开始】→【程序】→【Oracle–OraDb11g_homel】→【配置和移植工具】→【Net Manager】命令,将弹出“Oracle Net Manager”窗口,在窗口中进行相应的修改,如图2.1.8所示。
图2.1.8 Oracle Net Manager窗口
第二步,修改服务器端监听程序配置后需要保存配置,将其保存到listener.ora配置文件中。当客户端连接Oracle数据库时,如果服务器端OracleOraDb11g_homeTNSListener服务进程没有启动,将会出现错误提示,如图2.1.9所示。
图2.1.9 服务器监听器未启动时报错
(2)Oracle网络连接客户端配置
Oracle 11g安装程序会自动地创建一个默认的tnsnames.ora文件。如果一台计算机上只安装了Oracle 11g 客户端软件,则该计算机只能作为客户端,不会产生默认的tnsnames.ora文件。以下讲解客户端如何使用Oracle Net Manager来配置监听程序,步骤如下:
第一步,进入【Oracle Net Manager】窗口,选中【服务命名】,点击【创建】按钮,将出现如图2.1.10所示【Net服务名向导】窗口,在其中输入需要创建的网络服务名的名称,单击【下一步】按钮。
图2.1.10 修改网络服务名配置
第二步,在出现的Net服务名向导的“协议”窗口中选中“TCP/IP(Internet协议)”选项,如图2.1.11所示,单击【下一步】按钮。
图2.1.11 选择通信协议
第三步,执行以上操作后将出现如图2.1.12所示的界面,按照向导要求输入主机名、端口号等信息,单击【下一步】按钮。
图2.1.12 输入被访问主机名和端口号
第四步,执行以上操作后将出现如图2.1.13所示的界面,按照向导要求输入全局数据库名等信息,单击【下一步】按钮。
图2.1.13 输入全数据库名
第五步,在如图2.1.14所示的“测试”窗口中,为了检查新创建的网络服务名是否有效,可以单击图中的【测试】按钮进行测试。如果测试成功,将显示测试窗口,如图2.1.15所示。
图2.1.14 测试新创建的网络服务名
图2.1.15 测试成功
第六步,测试成功后,将在tnsnames.ora文件中添加一条关于新创建的网络服务名的配置,如图2.1.16所示。
图2.1.16 在配置文件tnsnames.ora中新增的网络服务名
sql Plus使用新配置的客户端网络服务名访问Oracle数据库,效果如图2.1.17所示。
图2.1.17 使用新建的网络服务名“myorcl”成功登陆
2.2Oracle实例的基本管理
我们在第一章学习了如何启动Oracle数据库,为了更好的掌握Oracle数据库的使用,需要进一步学习Oracle的启动过程,还需要了解Oracle数据库启动之后的状态,包括内存分布,进程作用等。
2.2.1什么是数据库实例
Oracle通过数据库实例来加载和管理数据库,每个运行的Oracle数据库都对应一个Oracle实例(Instance),也可以称为例程。当数据库服务器上的一个数据库启动时,Oracle将为其分配一块内存区间,叫做系统全局区(SGA),然后启动多个进程。SGA和Oracle进程结合在一起,就是一个Oracle实例。为了区分不同的实例,每个Oracle实例都有一个系统标识符SID,通常SID与数据库同名。
2.2.2数据库实例与数据库的关系
实例启动后,Oracle把它与指定的数据库联系在一起,这个过程叫做“装载数据库”,此时数据库就处于就绪状态,有权限的用户可以访问该数据库了。Oracle也可以把多个实例和一个数据库关联起来,服务更多的客户使用数据库的请求,从而提高数据库效率。
2.2.3Oracle数据库实例的状态
Oracle数据库实例支持4种状态,包括打开(OPEN)、关闭(CLOSE)、已装载(MOUNT)和已启动(NOMOUNT)。下面分别对这4种状态进行说明。
Ø打开。启动实例,装载并打开数据库。该模式是默认的启动模式,它允许任何有效用户连接到数据库,并执行数据访问操作。
Ø关闭。将Oracle实例从允许用户访问数据的状态转换为不可使用状态。
Ø已装载。启动实例并装载数据库,但不打开数据库。该模式用户数据库的数据文件的恢复操作等。不允许用户访问数据库数据。
Ø已启动。启动实例,但不装载数据库。该模式用于对控制文件进行管理或重新创建数据库等,不允许用户访问数据库数据。
下面我们通过sql Plus管理工具来体验上述状态,需要注意,实例的启动、关闭属于Oracle数据库管理操作,需要SYS用户登录才能进行操作。首先通过shutdown immediate关闭实例。如图2.1.18所示。
(1)启动实例,但不装载数据库,执行命令startup nomount,如图2.1.19所示。
图2.1.19 启动实例,但不装载数据库
从图中我们可以看到SGA(System Global Area)大小为535662592字节,约511M。
(2)启动实例,并装载数据库,执行命令startup mount,如图2.1.20所示。
图2.1.20 启动实例,并装载数据库
从图中我们可以看到除了SGA的分配,还有数据库装载完毕的提示信息。
(3)启动数据库实例,并装载数据库,执行命令startup open,open参数可以省略,如图2.1.21所示。
图2.1.21 启动实例,并打开数据库
2.2.4关闭Oracle实例
如果Oracle数据库是打开的,在数据库维护工作的时候,往往还需要把数据库关闭才能进行。那么如何正确的关闭数据库呢?
(1)正常关闭数据库实例,可以执行shutdown normal命令,命令执行情况如下。
Ø提交shutdown normal命令后,Oracle数据库不再接受新的连接。
Ø数据库会一直等待当前数据库的用户都断开连接后,再关闭数据库实例。因此通常此种关闭方式需要等待很长的时间。一般不采用此种方式关闭数据库实例。
(2)立即关闭数据库实例,可以执行shutdown immediate命令,命令执行情况如下。
Ø数据库不再接受新的连接,也不允许开始新的事务,所有未提交的事务都将被撤销。
Ø数据库不会等待所有在线用户断开连接,只要事务撤销完毕,就立即关闭数据库。
(3)以事务处理方式关闭数据库实例,可以执行shutdown transactional命令,命令执行情况如下。
Ø数据库不允许新的连接,也不允许开始新的事务,但是会等待已有事务提交后才关闭数据库。
Ø数据库不会等待所有在线用户断开连接,只要事务提交完毕,就立即关闭数据库。
(4)强制关闭数据库实例,可以执行shutdown abort命令,命令执行情形如下。
Ø数据库不再接受新的连接,也不允许开始新的事务,所有未提交的事务都将被终止。
Ø立即切断所有在线用户连接。
以上4种关闭方式中,第4种是破坏性的关闭方式,除用在知道立即断电或者有突发情况外,很少用到。第2种关闭方式是使用最频繁的,执行效果如前图2.1.18所示。其余情况请自行测试,仔细观察执行效果。
2.3Oracle的体系结构
Oracle数据库的体系结构是从全局的角度来分析和考察数据库的组成、工作过程与原理以及数据在数据库中的组织与管理机制。总的来说Oracle由Oracle实例和Oracle数据库组成。Oracle实例由进程和SGA组成。Oracle数据库由数据库数据文件、控制文件和日志文件组成。体系结构如图2.1.22所示。
图2.1.22 Oracle体系结构图
2.3.1进程结构
进程是操作系统中的一个概念,是一个可以独立调度的活动,用于完成指定的任务。Oracle 11g进程结构中包含3种不同类型的进程。
1. 用户进程
用户进程是在客户机内存上运行的程序,它向服务器进程发出数据处理请求。当客户端运行一个应用程序、准备向数据库服务器发送请求时,将会创建用户进程。例如,用户启动sqlPlus工具时,系统会自动建立一个用户进程。与用户进程相关的两个概念是连接和会话。
(1)连接。
用户需要访问数据库时,首先必须连接到数据库服务器,建立连接的步骤如下:
1) 启动一个类似于sqlPlus的应用程序,产生一个用户进程。
2) 输入用户名、口令、主机字符串,登录到Oracle服务器。
3) Oracle服务器接收到连接请求后,将在服务器端产生一个服务器进程,负责与该用户进程进行通话。
(2)会话。
会话是用户与数据库之间特定的路径或连接。当用户启动了一个基于Oracle的客户端应用程序并输入正确的用户名、口令成功登录到数据库之后,Oracle就为该用户创建一个会话。此会话在用户使用数据库期间一直存在,直到该用户退出应用程序或出现了非正常的中断为止。会话是通过连接来实现的,一个连接可以支持多个会话,但同一时刻一个连接只对应一个会话。
2. 服务器进程
为了给客户端的用户进程提供服务,Oracle会在客户端成功连接Oracle数据库时,在服务器端创建相应的服务器进程,客户端的进程与服务器端的进程是一一对应的。用户进程必须通过服务器进程才能方问数据库。服务器进程主要完成以下任务:
(2)搜索SGA区的数据库缓存,决定是否读取数据文件,如果数据块不在SGA区的数据库缓存中,则将其从数据文件中读入。
3. 后台进程
在同一时刻,Oracle可以处理上百个并发的请求,进行复杂的数据操作,为了提高系统性能并协调多个用户,Oracle使用一些附加的线程,称为后台进程。后台进程存在于操作系统中,在Oracle实例启动时自动启动。后台进程主要完成以下任务:
(1)在内存和外存之间进行I/O操作。
(2)监视各个进程的状态。
(3)协调各个进程的任务。
(4)维护系统的性能。
(5)保证系统的可靠性。
主要作用 |
是否可选 |
|
系统监控进程(SMON) |
必选 |
|
进程监控进程(PMON) |
必选 |
|
数据写入进程(DBWR) |
必选 |
|
日志写入进程(LGWR) |
必选 |
|
检查点进程(CKPT) |
必选 |
|
归档进程(ARCH) |
可选 |
|
恢复进程(RECO) |
用于分布式数据库中的失败处理,只有在数年据库中运行分布式先项时才能使用该进程。当分布在多个地的数据没有保持同步时,将调用该进程来解决 |
可选 |
锁进程(LCKn) |
当用户在并行服务器模式下,将出现多个锁进程以确保数据的一致性 |
可选 |
调度进程(Dnnn) |
可选 |
不同的数据版本,后台进程略有不同。
2.3.2内存结构
内存结构是Oracle数据库体系结构中最重要的一部分,内存也是影响数据库性能的第一因素。内存的大小、速度直接影响数据库的运行速度。特别是当用户逐年增加时,如果内存不足,例程分配不到足够的内存,就会使有些用户连接不到数据库或连接、查询的速度明显下降。按照对内存的使用方法的不同,Oracle数据库的内存可以分为SGA(System Global Area,系统全局区)和PGA(Program Global Area,程序全局区)
1. 系统全局区(System Global Area,SGA)
SGA是例程内存结构的主要组成部分,每个Oracle实例都只有一个SGA。当多个用户同时连接到一个例程时,所有的用户进程、服务器进程都共享SGA。它是不同用户进程与服务器进程进行通信的中心。数据库的各种操作都主要在SGA中进行,可以将SGA看作是Oracle的心脏。当启动Oracle实例时,系统就分配一个SGA;当终止Oracle实例时,就释放SGA占用的内存。根据功能的不同,系统全局区又分为4个部分:数据缓冲区、数据字典缓冲区、重做日志缓冲区和sql共享池。
(1)数据缓冲区(Data Buffer Cache)
用于存储近期从数据中读取出来的数据块。用户进程查看的数据首先驻留在数据缓冲区中,如果用户进程需要的信息不在该区内,才访问物理磁盘驱动器读取数据块,然后放入该区供其他用户进程或服务器进程使用。其大小受物理容量的限制,通常为数据库大小的1%~2%。
(2)重做日志缓冲区(Redo Log Buffer)
当执行INSERT、UPDATE、DELETE等操作时,Oracle都会为这些操作生成重做记录,以便在可能出现的数据库恢复过程中回滚事务。但是为了加快访问速度和工作效率,重做记录并不直接写入重做日志文件中,而是首先存入SGA的重做日志缓冲区内,当重做日志缓冲区的重做记录达到一定数量或达到某个时间点时,再分批写入重做日志文件中。
sql共享池是程序的高速缓冲区,存放所有通过sql语法分析准备执行的sql语句,主要由数据字典缓存(Dictionary cache)和库缓存(Library cache)组成。
2. 程序全局区(Program Global Area,PGA)
当用户进程连接到Oracle实例时,就会创建一个对应的会话,该会话使用一个服务器进程来完成客户端与Oracle实例的通信。每个服务器进程都有一个自己的PGA。PGA由Oracle为服务器进程分配,专门作为当前用户会话的内存区。该内存区是非共享的,只有服务器进程本身才能访问它自己的PGA区。而SGA区则是所有服务器进程都能共享、可写的内存区。
2.3.3Oracle数据库逻辑结构
数据库的逻辑结构主要从数据库使用者的角度来考察数据库的组成,如图2.1.23所示。
图2.1.23 Oracle数据库逻辑结构图
由图2.1.23可知,Oracle数据库的逻辑结构共有6层,以下介绍其中5个层次。
1. 数据块(Data Block)
数据块是最小的数据管理单位,即Oracle中所有的I/O操作都以块为单位。数据块的大小是操作系统大小的整数倍,通常为2KB或4KB。
2. 数据区间(Data Extent)
数据区间由物理上连续存放的数据块构成,它是Oracle存储分配的最小单位,一个或多个数据块组成一个数据区间。
3. 数据段(Data Segment)
若干个数据区间构成数据段,Oracle 11g中包含4种数据段:
(1)数据段:存放数据。
(2)索引段:存储索引数据。
(3)回滚段:存储需要撤销的信息。
(4)临时段:当sql语句需要临时空间时,将建立临时段。一旦执行完毕,临时段占用的空间将归还给系统。
4. 表空间(Table Space)
为了提高数据库服务器管理和运行的效率,Oracle 11g使用“表空间”的虚拟概念来管理逻辑对象,用户可以将不同性质的逻辑对象存放在不同的表空间下。在Windows操作系统中,使用文件夹来分类管理各种文件,我们可以将“表空间”理解为Oracle数据库的文件夹。每个表空间由一个或多个数据文件组成,一个数据文件只能与一个表空间相联系。用户建立的数据库对象应该被存放在各种具有典型意义的表空间中,从而更好地管理数据库。Oracle 11g数据库服务器安装完毕后,将自动建立6个默认的表空间,见表2-1-2。
表2-1-2 Oracle数据库服务器上的默认表空间
主要作用 |
|
EXAMPLE |
示例表空间,存放示例信息 |
SYSAUX |
SYSTEM表空间的辅助空间,用以减少SYSTEM表空间的负荷 |
SYSTEM |
存储数据字典,包括表、视图、存储过程的定义等 |
TEMP |
存储sql语句处理的表和索引的信息 |
UNDOTBSI |
回滚表空间,存放数据库恢复信息 |
USERS |
5. 数据库(Database)
若干个表空间构成逻辑上的数据库。一个数据库服务器上可以有多个数据库,一个数据库可以有多个表空间,一个表空间可以有多个表,一个表可以有多个段,一个段可以有多个区间,一个区间可以有多个数据块。
2.3.4Oracle数据库物理结构
数据库的物理结构主要是从数据库设计者的角度上来考察数据库的组成,Oracle 11g数据库的物理结构如图2.1.24所示。
图2.1.24 Oracle数据库的物理结构
1. 物理块
物理块是操作系统分配的基本存储单位,逻辑结构中的数据块由若干个物理块构成。
2. 物理文件
每个物理文件由若干个物理块组成,物理文件包括数据文件、控制文件和日志文件。
(1)数据文件
数据文件是实际存储插入到数据库表中的实际数据的操作系统文件。数据以Oracle特有的格式被写入数据文件。数据文件的大小与它们所存储的数据量的大小直接相关。写入数据后,数据文件会由于自动分配新区而增大,但删除数据却不会减少,只能使其有更多的空闲区。
(2)重做日志文件
对于操作数据库而言,内存的速度比硬盘的速度快成千上万倍,所以出于性能上的考虑,当用户对数据库进行修改时,Oracle实际上先在内存中进行修改,经过一段时间后,再集中将内存中的修改结果成批的写入数据文件中。但如果在将内存中的修改结果写入数据文件之前发生了故障,这些修改结果就会丢失。为了避免出现这种错误,需要一种机制时刻将这些修改结果保存下来,以便在故障发生之后还能重现当时的数据库操作。在Oracle中就是使用重做日志文件来随时保存这些修改结果。
(3)控制文件
控制文件是二进制文件,但它是数据库中的关键性文件,因为它存储了数据库的名称、数据文件和重做日志的名称、位置、联机/脱机状态和大小,用于在发生磁盘故障或用户错误时恢复数据库的信息。另外,在“装载”数据库时,Oracle将读取控制文件中的信息,以便判断数据库的状态,获取数据库的物理结构信息及物理文件的使用权。因此,控制文件对于数据库的成功“装载”以及其后的“打开”都至关重要。Oracle 11g中某个数据库的物理文件如图2.1.25所示。
图2.1.25 Oracle 11g中的物理文件
2.4创建Oracle表空间
在Oracle中新建数据表与在sqlServer中新建数据表不一样,数据表是按照表空间来进行管理的。也就是说,建表前,需要新建表空间。
通过前面的学习可知:Oracle将数据逻辑地存放在表空间里,而物理地存放在数据文件里。表空间只能属于一个数据库,一个数据库一般都有多个表空间。每个表空间都是由一个或者多个操作系统的数据文件组成,但一个操作系统数据文件只能属于一个表空间。
Oracle可以使用CREATE TABLESPACE命令创建表空间。示例2.1演示了如何创建名为MY_MOBILE的表空间。
示例2.1
CREATE TABLESPACE MY_MOBILE
DATAFILE 'D:\app\Administrator\oradata\orcl\MY_MOBILE.DBF'
SIZE 100M
AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
以上创建表空间语句具体解释如下:
Ø表空间名称:“MY_MOBILE”
Ø与表空间关联的数据文件的位置及名称为:“D:\app\Administrator\oradata \orcl\MY_MOBILE.DBF”。
Ø文件初始大小为100MB
Ø文件大小可自动扩展,每次扩展32MB,允许文件扩展的最大限度为无限制。
ØOracle生成表空间中数据库对象的任何创建或更改都需要记入日志。
Ø表空间中的数据区间管理采用本地化管理方式
Ø表空间中段的管理方式为自动管理方式。
以上创建表空间涉及配置项比较多,其实让大多数配置项采用默认值即可,这样创建表空间的语句就可以简化,如示例2.2所示。
示例2.2
CREATE TABLESPACE MY_MOBILE
DATAFILE 'D:\app\Administrator\oradata\orcl\MY_MOBILE.DBF'
SIZE 100M;
2.5创建Oracle用户并授权
2.5.1创建Oracle用户
同一数据库中可以同时有多个用户,每个用户管理自己的数据库对象.比如数据库表、索引、视图等。
Oracle中的CREATE USER命令用于创建新用户。每个用户都有一个默认表空间和一个临时表空间。如果没有指定,Oracle就将SYSTEM设为默认表空间,将TEMP设为临时表空间。
语法
CREATE USER <用户名> IDENTIFIED BY <密码> [DEFAULT TABLESPACE <默认表空间>] [TEMPORARYTABLESPACE <临时表空间>] |
说明如下:
Ø<用户名>是新用户的登录名,用户名必须是一个标识符,不区分大小写。
Ø<密码>是用户口令,口令必须是一个标识符,不区分大小写。
ØDEFAULT或TEMPORARY TABLESPACE为用户确定默认表空间或临时表空间
示例2.3
CREATE USER mm
IDENTIFIED BY oracle
DEFAULT TABLESPACE MY_MOBILE
这段语句是用来创建一个名称为“mm”的用户,口令为“oracle”,默认表空间为“MY_MOBILE”,执行结果如图2.1.26所示。
图2.1.26 成功创建用户“mm”
2.5.2权限和角色
只创建用户还不行,必须赋予相应权限才可以连接和访问数据库。权限指的是执行特定类型的sql命令或访问其他对象的权利。例如:连接数据库、创建表,执行存储过程都需要一些权限。若没有任何权限,新创建的用户将无法登录 Oracle数据库。
Oracle用户权限有两种类型:系统权限和对象权限。
Ø系统权限允许用户执行某些数据库操作。例如,创建表空间就是一个系统权限。
Ø对象权限允许用户对某一特定对象(如表.视图、序列等)执行特定的操作。
权限设置非常复杂,权限的类型很多,数据库中用户通常也很多,为DBA有效的管理权限带来了困难。为了简化权限管理,引入了角色的概念。
角色是具有名称的一组权限的组合,可以使用角色为用户授权。可以把角色理解为日常生活中的职务,一个人获取了某项职务,就自动具有该职务的所有权限,一个人被撤销了某职务,也就不再拥有相应权限。
Oracle中的常用系统预定义角色如下。
ØCONNECT:临时用户,特别是那些不需要创建表的用户,通常赋予该角色。
ØRESOURCE:更为可靠和正式的数据库用户可以授予该角色,可以创建表、触发器、过程等。
ØDBA:数据库管理员角色,拥有管理数据库的最高权限。一个具有DBA角色的用户可以撤销任何别的用户甚至别的DBA权限,这是很危险的,所以不要把该角色轻易授予一些不是很重要的用户。
2.5.3给用户分配权限或角色
GRANT命令用于为用户分配权限或角色,而REVOKE命令用于为用户撤销权限和角色
语法
GRANT [<权限> | <角色>] TO <用户>; REVOKE [<权限> | <角色>] FROM <用户>; |
示例2.4演示了如何给用户mm分配角色和对象权限
示例2.4
#把CONNECT、RESOURCE角色授予用户mm
GRANT CONNECT,RESOURCE TO mm;
#撤销用户mm的RESOURCE角色
REVOKE RESOURCE FROM mm;
#以下代码演示另一个用户SCOTT授予用户mm操作EMP表的对象权限
#允许用户查看EMP表中的记录
GRANT SELECT ON EMP TO mm;
#允许用户更新EMP表中的记录
GRANT UPDATE on EMP TO mm;
经过授予权限或角色后,用户mm即可与数据库建立连接并进行相应操作。
2.6使用impdp和expdp导入导出数据
至此,我们已经为“我的移动”应用创建了专门的表空间“MY_MOBILE”,创建了专门的开发用户“mm”,并授予“mm”用户CONNECT和RESOURCE权限。如果用户新建数据表,表数据将存储在操作系统文件“D:\app\Administrator\oradata\orcl\MY_MOBILE.DB
F”中。然而,如果随着系统开发的进展,已有的数据如何导出来以备下次使用呢?同样导出的数据如何再次导入到Oracle中呢?
Oracle引入了数据泵 (Data Pump)技术,即expdp和impdp实用程序。在Oracle以前的版本中,通常使用exp和imp实用程序进行导出、导入数据。现在,除了继续使用exp和imp之外,还可以使用expdp和impdp来导出、导人数据。由于expdp和impdp的速度优于exp和imp,所以 Oracle建议使用expdp和impdp。
导出数据是指将数据库中的数据导出到一个操作系统文件中,导入数据是指将导出文件中的数据导入到数据库中。数据库、导出文件与导入导出之间的关系如图2.1.27所示。
2.6.1创建目录对象并授权
使用expdp和impdp实用程序时,其导出文件只能存放在DIRECTORY (目录)对象指定的操作系统目录中,不能直接指定操作系统目录。
目录对象是数据库中的一个对象,它是使用 CREATE DIRECTORY语句创建的对象,而不是操作系统中的某个目录,但是它指向操作系统中的某个目录。为了能够访问操作系统目录,还必须赋予其读、写权限,创建目录并授权的示例如图2.1.28所示。
图2.1.28 创建目录并授权给用户MM
2.6.2使用expdp导出数据
随着“我的移动”数据的增加,如果我们需要把数据复制到其它Oracle数据库中,以便开发或者备份数据,就可以使用Oracle内置的实用工具expdp来完成。
现在退出sqlPlus登录,确保操作系统目录存在的前提下,就可把用户MM的数据导出,以备下次使用,如图2.1.29所示。
图2.1.29 成功按用户(方案)导出数据
2.6.3使用impdp导入数据
使用expdp导出的数据可以使用impdp导入。并且导入方式由导出方式决定,即如果是按表模式导出,则必须以表模式导入;如果是按方案模式导出,则必须以方案模式导入等。在上一节中,我们按用户(方案)导出了“我的移动”数据,那么按用户(方案)导入数据如图2.1.30所示。
图2.1.30 成功导入mm用户(方案)数据
在导入数据的时候需要注意,在新的Oracle数据库中,需要事先建立MM用户并授予相关权限。如果是在相同的Oracle数据库中测试impdp导入数据,需要把MM用户拥有的表、序列等已有数据库对象删除。
Ø
本章总结
Ø监听程序是客户端与Oracle服务器之间通信的中介
ØOracle内存可分为系统全局区(SGA)和程序全局区(PGA)
Ø系统全局区中包括数据缓冲区、数据字典区、重做日志缓冲区、sql共享区
ØOracle数据库的物理文件包括数据文件,重做日志文件,控制文件
ØOracle实例是后台进程和内存结构的集合,为应用程序提供对数据库中数据的管理和维护功能
ØSYS用户是Oracle中的超级用户,SYSTEM是Oracle中默认的管理员,它拥有DBA权限,SCOTT是Oracle数据库的一个示范帐户
ØOracle包含3个用于网络连接配置的文件,分别是监听程序的配置文件(listener.ora)、本地网络服务名的配置文件(tnsnames.ora)、命名方法配置文件(sqlnet.ora)
Ø使用GRANT,REVOKE语句授予权限或角色给用户
ØOracle可以使用impdp,expdp进行数据导入和导出
任务实训部分
1:创建数据库实例BookShop
训练技能点
Ø使用Oracle创建一个数据库实例BookShop
需求说明
自己手动创建一个新的数据库实例,命名为BookShop
实现步骤
(1)启动相关服务
(2)检查并测试网络配置
(3)使用DBCA工具创建数据库实例BookShop
2:创建表空间
训练技能点
Ø使用CREATE TABLESPACE语句创建表空间
需求说明
启动BookShop数据库实例,并通过sql Plus连接该数据库实例,然后使用CREATE TABLESPACE语句创建一个名为MyBook的表空间,并关联BookShop的数据文件,其他参数自定。
实现步骤
(1)确定BookShop数据库实例的服务已经启动
(3)使用CREATE TABLESPACE语句创建MyBook表空间
3:创建用户并授权
训练技能点
Ø使用CREATE USER命令创建用户
Ø使用GRANT命令分配权限
需求说明
启动BookShop数据库实例后创建一个名字和密码都是“sm”的新的用户,并指定其对应的默认表空间和临时表空间分别是MyBook和temp,最后使用GRANT命令为sm用户分配一个CONNECT的角色。
实现步骤
(2)使用CREATE USER命令创建用户
(3)使用GRANT命令设置角色
4:数据导入导出
训练技能点
Ø使用impdb导入数据
Ø使用expdb导出数据
需求说明
上一章的实训任务部分我们创建了一个联系人表,现在使用expdb命令把此表导出,然后使用impdb命令把此表导入到BookShop中
实现步骤
(2)使用expdb导出联系人表
(4)使用impdb导入联系人表
巩固练习
一、选择题
1.下列()用于在客户端配置网络服务名。
A.tnsnames.ora
B.listener.ora
C.sqlnet.ora
D.tnsname.ora
A.数据文件(.dbf)
B.重做日志文件(.log)
C.控制文件(.ctl)
D.缓存文件
3.下列()属于系统全局区(SGA)。
A.数据缓冲区
B.重做日志缓冲区
C.sql共享池
D.数据连接池
4.下列关于Oracle数据库说法正确的是()。
A.在物理上以表空间形式存在
C.必须首先创建数据库,然后才能使用Oracle
A.表方式导出一个指定表,包括表的定义、数据和索引等
B.用户方式导出属于一个用户的所有对象,包括表、视图、序列等
C.全数据库方式导出数据库中的所有对象,只有DBA可以选择这种方式
D.默认方式是表方式
二、上机练习
(1)为BookShop数据库实例创建一个新的用户zy,密码是四个0,初始大小100MB,其他参数自定。
(2)为新用户zy设置connect、resource角色。
(3)使用zy登录并向联系人表中插入一行测试数据。
扩展进阶
1、查阅互联网或者其它Oracle书籍,完成impdp、expdp除按用户(方案)之外的导入导出方式。
2、查阅互联网或者其它Oracle书籍,完成imp、exp使用工具的使用。