Oracle 11g OCM考试考点分析 手动建库和基本数据库管理

本文永久链接地址:https://www.askmac.cn/archives/oracle-11g-ocm-createdatabase.html

 

 

1关于创建数据库

 

在你仅仅只安装了oracle软件,没创建数据库或想在主机上创建一个新的数据库,或者创建一个数据库的拷贝(克隆)时。你可以使用DBCA或create database SQL语句来进行数据库的创建

 

在创建数据的时候需要有详细的计划,下面列出来一些推荐措施:

1.估计数据块和索引所需求的空间大小

2.计划使用的存储方式,是否可以将放置redo和数据文件到不同的磁盘上,以及FRA和数据文件位置。要大大简化这个规划任务,可以考虑使用OMF和ASM。

3.选择好全局数据库名。这个名称由DB_NAME和DB_DOMAIN确定

4.熟悉参数文件中的配置,并管理参数文件中的初始化参数。

5.选择合适的数据库字符集,Oracle建议使用AL32UTF8作为数据库的字符集。

6.考虑数据支持的时区(如果不使用 SET TIME_ZONE设置数据库的时区,默认和操作系统一直)。Oracle数据库使用2个时区文件中的一个。默认使用的时区文件是ORACLE_HOME/oracore/zoneinfo/timezlrg_11.dat(V$TIMEZONE_NAMES可以查询)。其比类似的时区文件timezone_11.dat包含更多的时区。(环境变量ora_tzfile控制,一般情况不用考虑)

7.选择数据库标准块大小。由初始化参数DB_BLOCK_SIZE参数控制,在创建数据库后不能变更。SYSTEM和大多数表空间使用标准块大小,你也可以在创建表空间的时候指定使用非标准块大小

8.确定存储redo file的磁盘扇区是否是4K,redo日志在创建的时候默认使用的4K 块大小来创建。来决定是否要变更块大小。

9.决定SYSAUX表空间合适的大小

10.计划其他非系统表空间为默认表空间,来存储用户对象。防止对象存储到system表空间上。

11.计划使用undo表空间来管理undo数据

12.定制一个合适的备份策略,选择合适的备份策略,管理在线和归档的日志。

13.熟悉启动和关闭数据的不同选项模式

 

2 使用DBCA创建数据库

 

DBCA是创建数据库的最好方式,在使用的时候可以自动的完成数据库的一些基本配置。DBCA可以作为一个独立工具,以OUI图形化界面来启动。当然你也可以使用DBCA在静默模式或交互模式来创建和配置数据库。

例如:

 

dbca  -silent  -createDatabase  -templateName  General_Purpose.dbc -gdbname ora11g  -sid  ora11g  -responseFile NO_VALUE  -characterSet AL32UTF8 -memoryPercentage 30 -emConfiguration LOCAL

 

如果想完全的静默,不交互的话,你需要使用响应文件,在其中指定相关用户的密码。你可以使用 dbca –help 查看命令帮助。响应文件可以参考模板,其位置一般在$ORACLE_HOME/assistants/dbca/dbca.rsp

 

3 使用 CREATE DATABASE 命令创建数据库

 

Create database是完全手动的方式创建数据库。在某些场景中,你需要使用脚本创建数据库的时候,使用create 命令创建比DBCA创建更合适。

在完成创建操作之前,你还需要执行额外的步骤。这些步骤包括创建数据字典,标准的视图和PL/SQL包。这些操作通过允许sql脚本来完成。

 

步骤1:指定实例名和环境变量

 

在shell环境中是export ORACLE_SID=dbdao

在windows 操作系统中是 set ORACLE_SID=dbdao

在大多数平台,ORACLE_SID和ORACLE_HOME必须设置,PATH中必须包含$ORACLE_HOME/bin。

 

步骤2:选择数据库管理员认证模式

一般有2种认证方式:密码文件和操作系统认证。如果使用密码文件认证,那么需要创建密码文件。操作系统认证,需要保证登录的用户是使用操作系统用户组的用户,例如在unix和linux 平台,使用的是dba用户组的用户。在Windows 平台,安装oracle 软件的用户自动的被放置到所需的用户组中

 

创建密码文件使用orapwd命令。其语法为:

 

ORAPWD FILE=filename [ENTRIES=numusers] [FORCE={Y|N}] [IGNORECASE={Y|N}]

 

例如:

 

orapwd file=$ORACLE_HOME/dbs/orapwdbdao password=oracle entries=10

 

步骤3:创建 初始化参数文件命名格式 unix和linux是orapwORACLE_SID,在windows 中是PWDORACLE_SID,存放位置默认分别在ORACLE_/dbs和ORACLE_HOME\database

手动创建的参数文件,至少包含DB_NAME,CONTROL_FILES,MEMORY_TARGET参数。

为了方便起见,创建参数文件的时候可以放置到默认位置($ORACLE_HOME/dbs),使用默认的命名格式initORACLE_SID,这样启动的时候就不用额外的指定pfile选项。因为数据库会自动寻找,并使用参数文件。

在windows平台上,需要使用oradim命令来创建一个windos服务来创建实例:

 

oradim -NEW -SID sid -STARTMODE MANUAL -PFILE pfile

 

这个命令将创建实例,但是不会启动,因为服务被设置为手动,如果设置为AUTO,将自动启动实例,mount数据库。

步骤4:连接到实例,并创建spile。

使用本地认证模式登录到实例并创建spfile,例如:

sqlplus / as sysdba
create spfile from pfile;

注意:必须重启数据库实例才能使用spfile。如果在CREATE DATABASE中准备采用OMF,但是在pfile中未指定CONTROL_FILES,那么必须创建spfile,并使用spfile启动实例。

 

步骤5:启动实例

 

Startup nomount

 

 

如果参数文件在默认的位置,会自动的使用参数文件,不需要pfile字句。

步骤6:使用CREATE DATABASE 语句创建数据库

例如:

CREATE DATABASE ORCL
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
LOGFILE GROUP 1 ('/u01/app/oracle/oradata/orcl/redo01.log') SIZE 100M,
GROUP 2 ('/u01/app/oracle/oradata/orcl/redo02.log') SIZE 100M,
GROUP 3 ('/u01/app/oracle/oradata/orcl/redo03.log') SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/orcl/system01.dbf' SIZE 325M REUSE
SYSAUX DATAFILE '/u01/app/oracle/oradata/orcl/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/u01/app/oracle/oradata/orcl/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

 

 

其中指定了控制文件,日志文件的路径,所以必须保证相关路径/u01/app/oracle/oradata/orcl存在,并有读写权限。

 

MAXLOGFILES, MAXLOGMEMBERS,和MAXLOGHISTORY参数指定了日志组相关的限制。MAXDATAFILES指定了数据库最大能打开的数据文件数目。这个值影响初始控制文件的大小。

 

一些限制也和操作系统有关。如果设置MAXDATAFILES参数,那么即使只有一个数据文件,控制文件也会分配额外的空间来存储数据文件名。但是控制文件的最大值依赖于操作系统。所以并不是所有的参数都能够设置到理论值。

AL32UTF8是字符集设置,AL16UTF8是国家字符集,用来指定NCHAR,NCLOB,NVCHAR2字段使用的字符集。

DEFAULT TABLESPACE 字句创建了默认的表空间,DEFAULT TEMPORARY TABLESPACE 字句创建了默认的临时表空间。

System表空间由DATAFILE字句创建,sysaux表空间由SYSAUX DATAFILE字句创建

因为在创建语句中未指定ARCHIVELOG 子句,日志将不会被归档。

注意:如果创建失败,你需要关闭实例,然后删除所有的文件,然后再进行创建。

 

如果在参数文件中指定了DB_CREATE_FILE_DEST参数,还可以使用OMF来创建数据库,例如DB_CREATE_FILE_DEST=’/u01/app/oracle/oradata’

Sql命令可以简化为如下:

CREATE DATABASE  dbdao
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;

 

 

步骤7:运行脚本创建数据字典视图

 

使用sysdba权限运行下列脚本:

 

@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql

@?/rdbms/admin/utlrp.sql

 

然后使用system 用户运行:

 

@?/sqlplus/admin/pupbld.sql

 

catalog.sql脚本创建数据字典表,动态性能视图,和这些视图的同义词,并将这些同义词赋予PUBILC访问。

catproc.sql 运行PL/SQL所必需的所有脚本

utlrp.sql 编译无效对象

pupbld.sql 让SQL*PLUS能够禁用一些用户命令。仅仅是限制使用sqlplu客户端工具有关功能。

 

到此数据库就创建完毕了。

 

4 Oracle 网络服务

 

4.1基本概念

 

ORACLE Net是一个软件层,驻留在客户端和数据库服务器上。它负责建立和维护客户端应用程序和服务器之间的连接,以及它们之间的信息交换,使用的是标准协议。Oracle Net 有2个软件组件:

 

1.Oracle Net 基础层

 

在客户端上,应用程序于Oracle Net基础层通信并维护连接。Oracle Net 基础层使用的是Oracle 协议支持,与业界标准的网络通信协议通信,例如TCP/IP,再与Oracle数据库服务器通信。

在Oracle数据库服务器上的情况和在客户端类似。网络协议发生请求到Oracle协议支持层,然后发送信息到Oracle Net 基础层。Oralce Net 基础层再与数据库服务器进程通信处理客户端请求。

 

 

2.Oracle 协议支持

 

Oracle Net 基础层使用Oracle 协议支持与下列标准网络协议进行通信:

1.TCP/IP(4和6)

2.带SSL的TCP/IP

 

 

3.命名管道

–专门为微软局域网环境提供。一个服务器端程序创建一个命名管道,客户端进程以名为名称打开它。一边写入,再另一边就可以读取。

4.SDP(Sockets Direct Protocol)

 

应用连接数据库的时候,例如java应用程序,可以使用JDBC OCI Driver 或者JDBC Thin Driver来连接到oracle 网络服务,从而连接数据库。

JDBC OCI Driver 是一种C/S架构的应用,需要安装Oracle客户端

JDBC Thin Driver 这种方式完全是用JAVA方式实现,不需要额外安装oracle客户端。其使用的是一个oracle连接的访问协议TTC。TTC是一个典型的表示层(网络通信层,管理应用层通信的条目信息),用于客户端和服务端的字符集和数据类型的转换。

 

每个数据库需要有一个或多个由 服务名定义的服务,例如dbdao.com。客户端通过服务器来确定要连接的数据库。Oracle 提供了4种命名方式,命名方式被客户端用来解析连接字符串。用的最多的就是本地命名,也就是使用tnsnames.ora来解析连接字符串。如果是大型的网络环境,可以使用集中化的资料库来管理网络配置。例如将Oracle网络服务器的配置存储到一个LDAP-兼容的目录服务器上。

Oracle 数据库网络服务可以是专有模式或共享模式。在共享模式下,客户端不会直接和服务进程通信,数据库会使用一个或多个调度进程。调度程序将客户端请求放置到一个队列中。服务器进程共享池中的空闲共享服务器从队列中提取并处理请求,这就是意味着一个很小的服务器共享池,可以出来大量的客户端。专用连接模式,每个客户端就有一个服务进程。每次受到连接请求时,服务器进程就使用专有的连接,直到完成。

目前国内大部分均使用的专用模式,因为内存限制越来越大,专用模式有更好的处理性能。一般是应用方面使用连接池来控制和数据库的连接。这样的好处是减少了使用的数据库连接资源。限制了最大的连接数目,能有效的对实际的用户进行监控。

 

在通过网络发送数据的时候,Oracle Net首先会将数据缓存,封装到SDU(会话数据单元)中,当整个SDU单元装满,被刷新或者数据库服务试图去读的时候才会发送出去。如果有大量的事务,可以考虑在客户端,应用程序和数据库段调整SDU。在数据量很小,并且网络速度很快的情况下,可以不考虑修改SDU。

 

 

4.2 关于连接描述符

一个连接描述符时在 tnsnames.ora文件中包含的一个或多个监听的地址和连接信息。

例如:

dbdao=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=dbdao.com)(PORT=1521))
(CONNECT_DATA=
(SID= dbdao01)
(SERVICE_NAME= dbdao01.com)
(INSTANCE_NAME=dbdao01)))

 

 

PROTOCOL 参数,用来指定监听协议地址。此处tcp 代表的是TCP/IP在这个例子中 ADDRESS 选项包含下列内容:

HOST 参数 定义了主机名。此处主机是dbdao.com

PORT参数定义了端口。此处指定是1521,这是默认的端口号

CONNECT_DATA 选项包含下列内容:

SID 参数 定义了ORACLE数据库的实例名。此处是dbdao01

SERVICE_NAME参数定义了目标数据库的服务名是dbdao01.com。在数据库中对应的是SERVICE_NAMES初始化参数,也就是通常所说的全局数据库名。

INSTANCE_NAME 参数定义数据库实例。这个是可选的参数。在安装和数据库创建的时候初始化参数INSTANCE_NAME默认为SID。

 

当然也可以直接使用简单连接字符串的方式例如:

 

CONNECT scott/oracle@dbdao:1521/dbdao01.com–不指定端口默认使用1521CONNECT scott/oracle@// dbdao /dbdao01.com –//是指定使用JDBC或URL进行连接。普通的sql连接和不指定时等价。

 

 

其实就是本地命名配置的连接字符串,例如

 

dbdao/dbdao01.com:dedicated/dbdao01

 

对应于:

(DESCRIPTION=(CONNECT_DATA=
(SERVICE_NAME=dbdao01.com)
(INSTANCE_NAME=dbdao01)
(SERVER=dedicated))
(ADDRESS=
(PROTOCOL=TCP)
(HOST=dbdao)
(PORT=1521)))

 

 

基本上只要安装了Oracle Net 服务软件的环境都可以使用简单连接命名。确保在sqlnet.ora文件中指定了 NAMES.DIRECTORY_PATH参数中包含EZCONNECT此处dbdao为主机名,dbdao01.com是服务名,dbdao是实例名

 

例如:

NAMES.DIRECTORY_PATH=(ezconnect, tnsnames)

 

使用多个监听器来提高服务的可用性:

例如,配置多个监听到多个节点上,可以让客户端连接到相同的数据库服务:

(DESCRIPTION=(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=dbdao1-server)(PORT=1521))
(ADDRESS=(PROTOCOL=tcp)(HOST=dbdao2-server)(PORT=1521)))
(CONNECT_DATA=
(SERVICE_NAME=dbdao01)))

 

注意:关于RAC的负载均衡,不在此章节的讨论范文之类,有兴趣的同学可以参考:这样还可以利用负载均衡和故障转移特性。当客户端连接第一个监听的时候失败了,就会尝试其他的协议地址。如果启用了客户端连接平衡,客户端在连接的时候会随机连接到一个地址。

 

4.3关于监听器:

 

 

监听器的配置存储在配置文件listener.ora中。因为配置参数均为默认值,所以可以不用什么配置启动一个监听(没有配置文件listener.ora)。默认的监听名称时LISTENER,支持无服务的启动,并监听固定的TCP协议地址:

 

(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=1521))

 

监听转发客户端需要被支持的服务,这个服务会动态注册到监听上。这个动态注册的特性被称为服务注册(service regisration).12C之后,当数据库启动的时候LREG后台进程会调查监听是否启动,如果启动就会传递相关参数,如果没启动LREG会周期的尝试连接。在12C 之前,PMON 执行监听注册。

本地监听注册信息:

如果一个本地监听不是用 TCP/IP,1521端口,那么在初始化参数中配置LOCAL_LISTENER参数来分配本地监听。如果这个参数的值是空值,那么默认本地地址使用tcp/ip和1521端口。

注意:LISTENER 的属性会重写LOCAL_LISTENER参数。修改LOCAL_LISTENER参数不会影响监听器配置的属性。只是影响PMON去自动的注册非1521的监听器。

远程监听参数 REMOTE_LISTENER 也是类似,用于注册数据库到远程的监听。LOCAL_LISTENER和REMOTE_LISTENER参数的值由命名规则解析,通过设置tnsnames.ora来指定。如果tnsnames.ora未设置命名规则别名,在指定参数值的时候会出现ORA-00119和ORA-00132的错误。

例如在tnsnames.ora中配置:

 

dbdao_test =(DESCRIPTION =
(ADDRESS = (PROTOCOL=tcp)(HOST=10.0.3.15)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = dbdao01)
)
)

 

4.4 lsnrctl 监听器工具

Lsnrctl 是一个交互式的命令行工具。直接运行lsnrctl可以进入控制台

运行help命令可以查询相关的使用说明:

常用的命令:

lsnrctl RELOAD listener_name

 

–重载配置

lsnrctl start listener_name

 

–启动监听

lsnrctl stop listener_name

 

–关闭监听

lsnrctl status listener_name

 

–查询监听的状态,会列出很多信息,注册的服务,使用的协议。关于实例信息,如果是ready表示允许连接。BLOCKED 表示实例不允许连接。UNKNOWN表明不是动态注册的,这状态是未知的。RESTRICTED表明实例处于拒绝模式。

 

lsnrctl service listener_name

 

–service 能显示关于服务和句柄的信息。

在使用lsnrctl 命令时,如果不指定监听名称(lsnrctl RELOAD,lsnrctl start lsnrctl stop),默认使用的是LISTENER。

 

有时候客户端在指定的时候无响应,那么会中断其连接。并且在监听器的日志中会出现:

ORA-12525:TNS: listener has not received client’s request in time allowed 的消息

可以通过SET INBOUND_CONNECT_TIMEOUT 来设置时间:

例如:

lsnrctl set INBOUND_CONNECT_TIMEOUT 600lsnrctl save_config
--保留变更之前的listener配置文件,默认备份为listener.bak

lsnrctl reload

---重载新的配置

lsnrctl SET LOG_DIRECTORY directory默认情况下是启用了ADR的,那么默认 监听器的日志在ORALCE_BASE/diag/tnslsnr下,可以使用 show LOG_DIRECTORY,show LOG_FILE查询。

 

lsnrctl SET TRC_LEVEL level修改监听器的目录位置。当然监听日志文件名称也可以使用LOG_FILE参数修改。同理TRC_DIRECTORY和 TRC_FILE也是一样。对于trace文件还可以设置trc的级别(默认是off):

 

Off—关闭跟踪 输出Level可以有下列级别:

User—用户跟踪信息

Admin-管理员跟踪信息

Support – Oracle 支持服务跟踪信息

–这个命令和 trace命令相同,用于跟踪监听信息,例如:

lsnrctl trace level listener_name

 

通过 LOG_STATUS来启动或关闭 监听日志:

lsnrctl SET LOG_STATUS {on | off}

 

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号