本文永久链接地址: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