0. 概述
你可以使用图形工具或SQL命令创建数据库。
1. 关于创建数据库的相关信息
我们可以在Oracle数据库软件安装过程中创建数据库。当然,也可以在安装后创建数据库。
选择在数据库软件安装结束后创建数据库可能有如下几点原因:
- 1)在使用Oracle通用安装程序(OUI)时选择了只安装软件,而没有创建数据库。
- 2)您想在已安装Oracle数据库主机上创建另一个数据库(和数据库实例)。在该情况下,本章假设新数据库使用的家目录与现有数据库的相同。您还可以通过再次运行OUI在新的Oracle家目录中创建数据库。
- 3)您想复制(克隆)一个数据库。
创建数据库的具体方法如下所示:
- 1)使用图形化工具数据库配置助手(DBCA)创建。
- 2)使用 create database SQL语句创建。
2. 创建数据库前的注意事项
数据库创建需要预备几个操作系统文件作为Oracle数据库共同工作。您只需要创建数据库一次,不管它有多少个数据文件或有多少个实例访问它。您可以通过创建数据库来删除现有数据库中的信息,并创建具有与其相同名称和物理结构的新数据库。
1)数据库创建规划
(1)空间规划。评估数据库表和索引所需要的空间大小。
(2)底层数据文件的规划。规划数据库包含的底层操作系统文件的布局。适当的文件布局可以在文件访问期间分散I/O,以显著提高数据库性能。在安装Oracle软件和创建数据库时,可以通过多种方式分散I/O。例如,您可以将重做日志文件放在单独的磁盘上,或者使用条带化。您可以定位数据文件以减少争用。您还可以控制数据密度(数据块的行数)。如果您创建了一个快速恢复区域,Oracle建议您将其与数据文件分别放在不同的存储设备上。
(3)为了大大简化规划任务,可以考虑使用Oracle Managed Files和Automatic Storage Management来创建并管理构成数据库存储的操作系统文件。
(4)选择全局数据库名称,这是数据库在网络结构中的名称和位置。通过设置DB_NAME和DB_DOMAIN初始化参数来创建全局数据库名称。
(5)熟悉初始化参数文件中包含的初始化参数。熟悉服务器参数文件的概念和操作。服务器参数文件使您能在服务端的磁盘文件中持久地存储和管理初始化参数。
(6)选择数据库字符集。所有字符数据,包括数据字典中的数据,都存储在数据库字符集中。在创建数据库时指定数据库字符集。
(7)考虑数据库必须支持哪些时区。Oracle数据库使用两个时区文件中的一个作为有效的时区源。默认的时区文件为“timezlrg_11.dat”。它比较小的时区文件“timezone_11.dat”包含更多的时区。
(8)选择标准数据库块大小。这是在数据库创建时通过DB_BLOCK_SIZE初始化参数指定的,在数据库创建后不能更改。SYSTEM表空间和大多数其他表空间使用标准块大小。此外,在创建表空间时,您最多可以指定四种非标准块大小。
(9)如果您计划将在线重做日志文件存储在扇区大小为4K字节的磁盘上,请确定是否必须手动指定重做日志块大小。
(10)为SYSAUX表空间确定适当的初始大小
(11)对于非SYSTEM用户,建议使用默认表空间,以免不慎将数据库对象保存在SYSTEM表空间中。
(12)计划使用undo表空间来管理undo数据。
(13)考虑为数据库配置只读Oracle主节点还是读写Oracle主节点.
(14)制定备份和恢复策略以保护数据库不发生故障。多路复用对控制文件的保护很重要,选择合适的备份模式管理在线重做日志和归档重做日志文件。
(15)熟悉启动和关闭实例以及挂载和打开数据库的原则和选项。
2)字符集的选择
为数据库选择正确的字符集非常重要。Oracle推荐使用AL32UTF8作为数据库字符集。
AL32UTF8是Oracle为Unicode标准的UTF-8编码的起的名称。Unicode标准是支持目前世界上大多数语言的通用字符集。Unicode标准的使用对于任何多语言技术(包括数据库处理)都是不可或缺的。
在创建了数据库并积累了生产数据之后,修改数据库字符集是一项耗时且复杂的工程。因此,在安装时选择正确的字符集是非常重要的。即使数据库目前不存储多语言数据,但预计将在几年内存储多语言数据,选择AL32UTF8作为数据库字符集通常也是惟一好的决定。Unicode的通用性和灵活性通常超过了与之相关的一些额外代价,例如与单字节字符集相比,文本处理速度略慢;与非Unicode字符集相比,非ASCII文本需要更高的存储空间。
如果您不想使用AL32UTF8,并且您的选择不受供应商要求的限制,那么Oracle建议您使用推荐的字符集列表中的一个。基于现代客户端操作系统的要求选中推荐的字符集。Oracle通用安装程序(OUI)只提供推荐列表,要选择非推荐的字符集,数据库配置助手(DBCA)必须单独使用。此外,DBCA中的默认数据库创建配置只允许选择推荐的字符集。您必须使用DBCA的高级配置模式或CREATE DATABASE语句来选择非推荐的字符集。
如果在OUI或DBCA安装模式中没有提供字符集选择,则使用AL32UTF8作为数据库字符集,除非已经选择了具有其他字符集的自定义数据库模板。
说明:
a,Oracle推荐使用AL32UTF8作为数据库字符集。AL32UTF8是Unicode编码UTF-8的正确实现。从Oracle Database 12c Release 2开始,在使用Oracle Universal Installer (OUI)和Oracle Database Configuration Assistant (DBCA)创建数据库时,AL32UTF8被用作默认的数据库字符集。
b,在基于ASCII的平台上,只能为数据库选择基于ASCII的字符集。
注意:
不要使用UTF8作为数据库字符集,除非在Oracle8i Release 1(8.1.7)和更早版本中需要与Oracle数据库客户端和服务器兼容,或者除非应用程序供应商明确要求。尽管名称非常相似,UTF8并不是Unicode编码UTF-8的正确实现。如果在需要UTF-8处理的地方使用UTF8字符集,可能会发生数据丢失和安全问题。尤其是对于与Web相关的数据,如XML和URL地址。
AL32UTF8和UTF8字符集彼此不兼容,因为它们有不同的最大字符宽度。AL32UTF8的最大字符宽度为4个字节,而UTF8的最大字符宽度为3个字节。
3)关于配置只读模式的Oracle Home
从Oracle Database 18c开始,您可以通过部署一个只读Oracle主库作为软件映像,简化跨多个数据库服务器的补丁和大规模软件部署。
只读Oracle Home(ORACLE_HOME)阻止在Oracle家目录中创建和修改文件。要配置一个只读模式的Oracle Home,首先需要使用software-only部署方式安装Oracle数据库软件,然后在创建监听器和数据库之前将其配置为只读Oracle Home。
传统的读写模式的Oracle Home包含实例特定的文件,所以如果你给它们打补丁,必须分别给它们打补丁。然而,当Oracle Home为只读时,实例特定的文件将单独存储在Oracle基目录(ORACLE_BASE)中,而不是Oracle家目录中。由于这种配置,您可以使用只读Oracle Home作为跨多个数据库服务器共享的软件镜像,因为它只存储静态文件。这个选项简化了patching and mass rollout,因为当您想要将一个补丁分发到多个数据库服务器时,您只需要更新一个Oracle Home镜像。
除了传统的ORACLE_BASE和ORACLE_HOME目录外,只读模式的Oracle Home中还存在以下附加目录:
- ORACLE_BASE_HOME:这是ORACLE_BASE目录中的一个子目录。此目录包含用户特定的文件、实例特定的文件和日志文件。
- ORACLE_BASE_CONFIG:该目录与ORACLE_BASE目录相同。此目录包含实例特定的动态文件,例如配置文件。
4)创建数据库的先决条件
为了确保能成功的创建Oracle数据库,请检查数据库先决条件。
在创建新数据库之前,必须满足以下先决条件:
a、已安装Oracle软件。这包括设置操作系统特有的各种环境变量,以及为软件和数据库文件建立目录结构。
b、必须有足够的内存来启动Oracle数据库实例。
c、在运行Oracle数据库的计算机上,需要有足够的磁盘空间供规划的数据库使用。
这些检查项在安装Oracle软件之前就应该已经考虑并满足了。
3.使用DBCA创建数据库
DBCA (Oracle Database Configuration Assistant)是一个用于创建和配置Oracle数据库的工具。
Oracle强烈建议使用数据库配置助手(DBCA)来创建数据库,因为它是一种更加自动化的方法,当DBCA完成时,您的数据库就可以使用了。
DBCA可以通过Oracle通用安装程序(OUI)启动,这取决于您选择的安装类型。您还可以在安装Oracle数据库后的任何时候将DBCA作为一个独立的工具来启动。
可以在交互模式或非交互/静默模式下运行DBCA。交互模式为创建和配置数据库提供了图形化界面和指导工作流程。非交互/静默模式使您能够通过脚本创建数据库。通过指定命令行参数、响应文件或两者都可以在非交互/静默模式下运行DBCA。
关于使用DBCA工具创建数据库,在前面已经介绍过,这里就不在赘述。例如可以参考:
Oracle—安装部署三(通过响应文件静默安装Oracle 19.3.0.0)
Oracle—安装部署二(通过Oracle Database Preinstallation RPM安装Oracle 19.3.0.0)
4.使用CREATE Database语句创建数据库
使用CREATE DATABASE SQL语句创建数据库比使用Oracle数据库配置助手(DBCA)更手工。与使用DBCA相比,使用该语句的一个优点是可以从脚本中创建数据库。
使用CREATE DATABASE语句时,必须完成其他操作,才能拥有可操作的数据库。这些操作包括在数据字典表上构建视图和安装标准PL/SQL包。您可以通过运行提供的脚本来执行这些操作。
说明:
- a、单实例并不意味着一台主机上只能驻留一个Oracle实例。事实上,多个Oracle实例(及其相关数据库)可以在一台主机上运行。单实例数据库是指同一时间仅由一个Oracle实例访问的数据库,而Oracle RAC数据库则由多个节点上的多个Oracle实例并发访问。
- b、从Oracle Database 12c Release 2(12.2)开始,只读和读/写实例可以在一个Oracle RAC数据库中共存。此配置对于并行查询的可伸缩性非常有用。
1)第一步:指定实例标识符(SID)
ORACLE_SID环境变量用于将此实例与您稍后可能创建并在同一主机上并发运行的其他Oracle数据库实例区分开来。
- a、为您的实例确定一个惟一的Oracle系统标识符(SID)。
- b、打开一个命令窗口。使用此命令窗口执行后续步骤。
- c、设置ORACLE_SID环境变量。
与ORACLE_SID中有效字符相关的限制是平台特定的。在某些平台上,SID是区分大小写的。
通常的做法是将SID设置为与数据库名相等。数据库名称的最大字符数为8。
ORACLE_SID的设置方法,依据不同的shell程序有不同的设置方法:
# 对于Bourne, Bash, or Korn shell
export ORACLE_SID=mynewdb
# 对于C shell
setenv ORACLE_SID mynewdb
# 对于Windows操作系统
set ORACLE_SID=mynewdb
2)第二步:确保已设置所需的环境变量
例如,在大多数平台上,必须设置ORACLE_SID和ORACLE_HOME。另外,建议设置PATH环境变量包含ORACLE_HOME/bin目录。在UNIX和Linux平台上,必须手动设置这些环境变量。在Windows平台上,OUI自动在Windows注册表中为ORACLE_HOME和ORACLE_SID赋值;如果在安装时没有创建数据库,OUI不会在注册表中设置ORACLE_SID,当您稍后创建数据库时,必须设置ORACLE_SID环境变量。
本次测试设置的相关环境变量如下所示(本主机已经存在一个数据库了):
su - oracle
[oracle@oracle4 ~]$ cp .bash_profile mynewdb.env
[oracle@oracle4 ~]$ vim mynewdb.env
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19.3.0.0/dbhome_1
export ORACLE_SID=mynewdb
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
umask 022
## 加载上述文件
[oracle@oracle4 ~]$ source mynewdb.env
[oracle@oracle4 ~]$ echo $ORACLE_SID
mynewdb
3)第三步:选择数据库管理员身份验证方法
您必须通过身份验证并被授予适当的系统权限才能创建数据库,您可以通过以下方式对具有所需权限的管理员进行认证:
(1)使用密码文件
(2)使用操作系统身份验证
如果需要使用密码文件进行认证,则需要创建密码文件;要通过“操作系统身份验证”进行身份验证,确保登录主机使用的用户帐户是适当操作系统用户组的成员。例如,在UNIX和Linux平台上,这通常是dba用户组。在Windows平台上,安装Oracle软件的用户会自动被置于所需的用户组中。
在18c之前的Oracle数据库版本中,在UNIX和Linux平台上密码文件的默认目录是ORACLE_HOME/dbs,在Windows平台上是ORACLE_HOME\Database。
如果不使用Oracle管理密码文件,18c之后推荐密码文件的默认路径为ORACLE_BASE/dbs/,文件名依旧为orapwORACLE_SID。
在这里我们可以继续使用之前版本的默认路径,因为对于Oracle数据库18c及更高版本,如果在默认目录中没有找到密码文件,则数据库将在早期数据库版本中的默认目录中检查密码文件。
这里选择使用密码文件:
# 您可以使用密码文件创建工具ORAPWD创建数据库密码文件
# 1.orapwd命令的语法如下所示:
orapwd
# 包含decribe参数时,值需为已存在密码文件名;若不会包含,需给出一个绝对路径文件名,否则会在当前目录中创建新的密码文件
# 在linux中推荐路径及文件名为:$ORACLE_HOME/dbs/orapwORACLE_SID
FILE=filename
# 可选,若为y,会覆盖已存在的密码文件
[FORCE={y|n}]
# 可选,若为y,则在ASM磁盘组中创建ASM密码文件
# 若为n,如果DBUNIQUENAME参数指定,则创建数据库密码文件,
# 如果没指定,则创建的密码文件可能为数据库密码文件,也可能为ASM密码文件
[ASM={y|n}]
# 惟一的数据库名称,用于识别在ASM磁盘组中驻留的数据库密码文件
# 当数据库密码文件存储在一个Oracle ASM磁盘组时,需要此参数
# 当在操作系统文件系统上创建数据库密码文件时,不需要此参数。
# 当将ASM参数设置为y时,将忽略这个参数。
[DBUNIQUENAME=dbname]
# 可选项
# 默认值12.2,创建12.2格式的密码文件。这种格式支持向外部用户授予管理特权,并为管理用户启用SSL和Kerberos身份验证。
# 12,创建Oracle Database 12c格式的密码文件。该格式支持SYSBACKUP、SYSDG和SYSKM管理权限。
[FORMAT={12.2|12}]
[SYS={y|n|password|external('sys-external-name')|global('sys-directory-DN')}] # 可选
[SYSBACKUP={y|n|password|external('sysbackup-external-name')|global('sysbackup-directory-DN')}] # 可选
[SYSDG={y|n|password|external('sysdg-external-name')|global('sysdg-directory-DN')}] #可选
[SYSKM={y|n|password|external('syskm-external-name')|global('syskm-directory-DN')}] #可选
# (可选)值为y,删除指定的密码文件。
# n为默认值,创建指定的密码文件。
[DELETE={y|n}]
# (可选)指定输入密码文件的名称。ORAPWD将输入文件中的条目迁移到新的密码文件中。
# (可选)输入密码文件名。ORAPWD将输入文件中的条目迁移到新的密码文件中。
# 该参数也可用于重置SYS管理用户的密码。
# ORAPWD无法迁移存储在Oracle ASM磁盘组中的输入密码文件。
[INPUT_FILE=input-fname]
# 2.创建密码文件
[oracle@oracle4 ~]$ orapwd file="$ORACLE_HOME/dbs/orapwmynewdb" sys=password
Enter password for SYS: (这里输入oracle@123,有密码复杂度检查)
[oracle@oracle4 ~]$ ll $ORACLE_HOME/dbs/orapwmy*
-rw-r----- 1 oracle oinstall 6144 Oct 17 22:17 /u01/app/oracle/product/19.3.0.0/dbhome_1/dbs/orapwmynewdb
# 3.(可选操作)
# 如果修改了数据库密码文件名或位置,则运行以下命令使修改生效
ALTER SYSTEM FLUSH PASSWORDFILE_METADATA_CACHE;
# 此命令将刷新元数据缓存,后续登录数据库时使用新密码文件。
# 执行该命令后,可以通过查询V$PASSWORDFILE_INFO视图来验证修改结果
4)第四步:创建初始化参数文件
当Oracle实例启动时,它读取一个初始化参数文件。该文件可以是只读的文本文件(PFILE,可以用文本编辑器创建和修改),也可以是可读写的二进制文件(由数据库创建和动态修改)。二进制文件是首选的初始化参数文件,被称为服务器参数文件(server parameter file)。在此步骤中,您将创建一个文本初始化参数文件。在后面的步骤中,您将根据文本文件创建服务器参数文件。
服务器参数文件使您能够使用ALTER SYSTEM命令更改初始化参数,并在关闭和启动时保使更改持久化。它也为Oracle数据库的自调优提供了基础。由于这些原因,建议您使用服务器参数文件。您可以根据编辑好的文本初始化文件中手动创建一个,也可以使用数据库配置助手(DBCA)自动创建数据库。
在手动创建服务器参数文件之前,可以使用文本初始化参数文件启动实例。在启动时,Oracle实例首先在默认位置搜索服务器参数文件,如果没有找到,则搜索文本初始化参数文件。如果服务参数文件已经存在,而你又想使用文本初始化参数文件,那么在启动时(startup),需要明确指定使用文本初始化参数文件。
如果使用文本初始化参数文件,则更改仅对当前实例有效。要使更改永久生效,您必须在初始化参数文件中手动更新它们,否则它们将在数据库下次关闭和启动时丢失。如果您正在使用服务参数文件,那么由ALTER SYSTEM语句所做的初始化参数文件更改可以通过关机和启动持久保存。
如果手工创建初始化参数文件,请确保文件中至少包含下表所示的参数。其他未列出的参数都有默认值。该文件至少必须指定DB_NAME参数。其他参数均为默认值。
| 参数名 | 是否强制设置 | 说明 |
|---|---|---|
| DB_NAME | Yes | 数据库标识符。必须与CREATE DATABASE语句中使用的值对应。最多8个字符。 |
| CONTROL_FILES | No | 强烈推荐设置。如果未提供,则数据库实例将在与初始化参数文件相同的位置创建一个控制文件。提供此参数可使您复用控制文件。 |
| MEMORY_TARGET | No | 设置实例使用的内存总量,并启用自动内存管理。您可以选择其他初始化参数代替此参数,以便更手动地控制内存使用情况。 |
为方便起见,请使用默认文件名将初始化参数文件存储在Oracle数据库的默认位置。然后,在启动数据库时,不需要指定STARTUP命令的PFILE子句,因为Oracle数据库会自动在默认位置查找初始化参数文件。
在linux和unix平台上,文本初始化参数文件的默认文件名和路径分别为initORACLE_SID.ora、ORACLE_HOME/dbs。
在Windows平台上,则为initORACLE_SID.ora、ORACLE_HOME\database。
创建文本初始化参数文件的一种方法是编辑“初始化参数文件示例”中给出的示例。Oracle数据库在示例文本初始化参数文件中提供了一般适用的值。示例的文本初始化参数文件被命名为init.ora,在大多数平台上该文件位于$ORACLE_HOME/dbs目录下。
# 确保目录/u01/app/oracle/oradata/mynewdb已经存在
[oracle@oracle4 /u01/app/oracle/product/19.3.0.0/dbhome_1/dbs]$ cp init.ora initmynewdb.ora
[oracle@oracle4 /u01/app/oracle/product/19.3.0.0/dbhome_1/dbs]$ vim initmynewdb.ora
db_name='MYNEWDB'
memory_target=1G
processes = 150
db_block_size=8192
db_domain=''
diagnostic_dest='/u01/app/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on separate physical
# devices
control_files ='/u01/app/oracle/oradata/mynewdb/control01.ctl'
control_files ='/u01/app/oracle/oradata/mynewdb/control02.ctl'
compatible ='11.2.0'
# 修改一下db_name参数,并修改文件中‘<ORACLE_BASE>’为具体的路径
5)第五步:连接实例
启动SQL*Plus并使用SYSDBA管理权限连接到Oracle数据库实例。
连接方式:
## 方式一:使用密码文件进行身份验证时,请输入以下命令,并在出现提示时输入SYS密码:
[oracle@oracle4 ~]$ sqlplus /nolog
@> conn sys as sysdba
Enter password:
Connected to an idle instance.
SYS@mynewdb>
## 方式二:要使用操作系统身份验证进行身份验证,请输入以下命令
[oracle@oracle4 ~]$ sqlplus /nolog
@> conn / as sysdba
Connected to an idle instance.
SYS@mynewdb>
6)第六步:创建服务器参数文件
# 运行以下SQL*Plus命令
SYS@mynewdb> create spfile from pfile;
File created.
该SQL*Plus命令从默认位置读取具有默认名称的文本初始化参数文件(PFILE),根据文本初始化参数文件创建一个服务器参数文件(SPFILE),并使用默认SPFILE名称将SPFILE写入默认位置。
## 上述命令创建的服务器参数文件的位置和文件名如下所示:
[oracle@oracle4 ~]$ ll $ORACLE_HOME/dbs/spfile*
-rw-r----- 1 oracle dba 1536 Oct 18 19:03 /u01/app/oracle/product/19.3.0.0/dbhome_1/dbs/spfilemynewdb.ora
如果不使用默认名称和位置,还可以为PFILE和SPFILE提供文件名和路径。
提示:服务器参数文件生效前需要重启数据库。
如果您正在使用Oracle Managed Files,并且初始化参数文件不包含CONTROL_FILES参数,那么您必须现在创建一个服务器参数文件,以便数据库可以保存它在create database语句期间创建的控制文件的名称和位置。
7)第七步:启动实例
启动实例到非挂载的状态下。通常,您只在数据库创建期间或在执行数据库维护时执行此操作。在本例中,因为初始化参数文件或服务器参数文件存储在默认位置,所以不需要指定PFILE子句:
SYS@mynewdb> startup nomount;
ORACLE instance started.
Total System Global Area 1073737800 bytes
Fixed Size 8904776 bytes
Variable Size 616562688 bytes
Database Buffers 440401920 bytes
Redo Buffers 7868416 bytes
#此时,将分配实例内存并启动其进程。数据库本身还不存在。
8)第八步:发出CREATE DATABASE语句
要创建新数据库,请使用create database语句。
以下语句创建了一个数据库mynewdb。该数据库名称必须与初始化参数文件中的DB_NAME参数一致。并假定目录/u01/app/oracle/oradata/mynewdb和/u01/logs/my[1-2]已经存在:
# 如果假定的目录不存在,请使用oracle用户创建,当然,该路径你可以随便选择,只要有权限。
mkdir -p /u01/app/oracle/oradata/mynewdb
mkdir -p /u01/logs/my1
mkdir -p /u01/logs/my2
# 执行创建数据库语句
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY sys_password
USER SYSTEM IDENTIFIED BY system_password
LOGFILE GROUP 1 ('/u01/logs/my1/redo01a.log','/u01/logs/my2/redo01b.log') SIZE 100M BLOCKSIZE 512,
GROUP 2 ('/u01/logs/my1/redo02a.log','/u01/logs/my2/redo02b.log') SIZE 100M BLOCKSIZE 512,
GROUP 3 ('/u01/logs/my1/redo03a.log','/u01/logs/my2/redo03b.log') SIZE 100M BLOCKSIZE 512
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/mynewdb/system01.dbf'
SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/mynewdb/sysaux01.dbf'
SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/mynewdb/users01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/mynewdb/temp01.dbf'
SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
USER_DATA TABLESPACE usertbs
DATAFILE '/u01/app/oracle/oradata/mynewdb/usertbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
Database created.
数据库特征说明:
-
(1)数据库名。
数据库名为mynewdb。它的全局数据库名称是mynewdb.us.example.com,其中域部分(us.example.com)取自初始化参数文件。
全局数据库名称由用户指定的本地数据库名称和数据库在网络结构中的位置组成。(设置DB_NAME和DB_DOMAIN初始化参数)。可以使用ALTER database rename GLOBAL_NAME语句重命名数据库的GLOBAL_NAME。但是,在首次更改DB_NAME和DB_DOMAIN初始化参数后需要关闭并重新启动数据库并重新创建控制文件。使用命令ALTER DATABASE BACKUP CONTROLFILE TO TRACE可以轻松地重新创建控件文件 -
(2)控制文件。
创建由CONTROL_FILES初始化参数指定的两个控制文件,在数据库创建之前在初始化参数文件中设置该参数。
每个数据库都有一个控制文件,控制文件包含描述数据库结构的条目(例如数据库的名称、创建数据库的时间戳、数据文件和重做文件的名称和位置)。CONTROL_FILES初始化参数指定一个或多个控制文件的名称,用逗号分隔。
如果在初始化参数文件中不包含CONTROL_FILES, Oracle数据库将在与初始化参数文件相同的目录中创建一个控制文件,使用与操作系统相关的默认文件名。
Oracle强烈建议您为每个数据库使用至少两个控制文件存储在独立的物理磁盘驱动器上。 -
(3)设置sys和system用户密码。
为了保护数据库,请为SYS和SYSTEM用户指定密码。在选择密码时,请记住密码是区分大小写的。另外,您的数据库可能有密码格式要求。在这个版本(19c)的Oracle数据库中,指定SYS和SYSTEM密码的两个子句不是必须的。但是,如果指定了其中一个子句,则必须同时指定两个子句。 -
(4)redo 日志文件组。
新的数据库有三个重做日志文件组,每个重做日志文件组有两个成员,在LOGFILE子句中指定:MAXLOGFILES, MAXLOGMEMBERS和MAXLOGHISTORY为重做日志做出限制。重做日志文件的块大小设置为512字节,与磁盘上的物理扇区大小(fdisk -l命令可以查看)相同。如果块大小与物理扇区大小相同(默认),则BLOCKSIZE子句是可选的。典型扇区大小和典型块大小是512字节。允许的BLOCKSIZE值为512、1024和4096。对于扇区大小为4K的新磁盘,可选地将BLOCKSIZE指定为4096。
与数据库块大小(可以在2K到32K之间)不同,重做日志文件块大小默认等于磁盘的物理扇区大小。历史上,这通常是512字节(512B)。一些较新的大容量磁盘驱动器提供4K字节(4K)扇区大小,以提高ECC能力和提高格式化效率。大多数Oracle数据库平台都能够检测到这种较大的扇区大小。然后,数据库自动在这些磁盘上创建块大小为4k的重做日志文件。
然而,当块大小为4K时,重做浪费(redo wastage)会增加。事实上,与512B块相比,4K块的重做浪费是显著的。你可以通过查看VSESSTAT和VSYSSTAT视图中存储的统计数据来确定重做浪费的数量。
SYS@orcl> select name,value from v$sysstat where name = 'redo wastage';
NAME VALUE
---------------------------------------------------------------- ----------
redo wastage 1603368
## 要确定重做日志文件的块大小,运行以下查询
SYS@mynewdb> select blocksize from v$log;
BLOCKSIZE
----------
512
512
512
# 添加日志组的方法
# 下面的语句添加了一个块大小为512B的重做日志文件组。BLOCKSIZE 512子句有效,但对于512B扇区大小的硬盘不是必需的。
# 对于4K扇区大小的仿真模式磁盘,BLOCKSIZE 512子句将覆盖默认的4K大小。
ALTER DATABASE orcl ADD LOGFILE
GROUP 4 ('/u01/logs/orcl/redo04a.log','/u01/logs/orcl/redo04b.log')
SIZE 100M BLOCKSIZE 512 REUSE;
为了避免额外的重做浪费,如果您正在使用模拟模式磁盘—— 4K扇区大小的磁盘驱动器,在磁盘接口上模拟512B扇区大小,您可以通过指定512B块大小或在某些平台上指定1K块大小来覆盖重做日志默认的4K块大小。但是,当重做日志写与4K物理扇区的开始不一致时,将导致显著的性能下降。因为4K物理扇区中的8个512B槽中有7个没有对齐,性能下降通常会发生。因此,在4K扇区大小的仿真模式磁盘上规划重做日志块大小时,必须评估性能和磁盘浪费之间的权衡。
可以在CREATE DATABASE、ALTER DATABASE和CREATE CONTROLFILE语句中使用BLOCKSIZE关键字指定在线重做日志文件的块大小。
如何确定日志组的数量呢?为数据库实例确定适当的重做日志文件数量的最佳方法是测试不同的配置。在测试期间,确定当前重做日志配置是否令人满意的最简单方法是检查LGWR跟踪文件和数据库报警日志的内容。如果消息显示LGWR经常需要等待某个组,因为检查点未完成或组未被归档,则需要添加组。
-
(5)MAXDATAFILES指定数据库中可以打开的数据文件的最大数量
-
(6)该数据库使用AL32UTF8字符集存储数据。
-
(7)AL16UTF16字符集被NATIONAL CHARACTER SET 指定,用于存储NCHAR、NCLOB或NVARCHAR2列中的数据。
-
(8)SYSTEM表空间。
由操作系统文件/u01/app/oracle/oradata/mynewdb/system01.dbf组成,
创建数据库时,创建本地管理的SYSTEM表空间。本地管理的表空间使用存储在每个数据文件中的位图来管理区(extend)。在CREATE DATABASE语句中指定EXTENT MANAGEMENT LOCAL子句创建本地管理的SYSTEM表空间。
如果不指定EXTENT MANAGEMENT LOCAL子句,则默认情况下数据库将创建一个字典管理的SYSTEM表空间。不推荐使用字典管理的表空间。
如果你创建的数据库具有本地管理的system表空间,并且不使用Oracle managed Files,那么请确保满足:在CREATE DATABASE语句中指定DEFAULT TEMPORARY TABLESPACE子句和UNDO TABLESPACE子句。 -
(9)创建SYSAUX表空间。
由SYSAUX DATAFILE子句指定的操作系统文件件“/u01/app/oracle/oradata/mynewdb/sysaux01.dbf”组成。
SYSAUX表空间总是在创建数据库时创建的。SYSAUX表空间作为SYSTEM表空间的辅助表空间。由于它是许多Oracle数据库特性和产品的默认表空间,以前这些特性和产品需要自己的表空间,因此它减少了数据库所需的表空间数量。它还减少了SYSTEM表空间的负载。
您只能使用CREATE DATABASE语句中的SYSAUX DATAFILE子句为SYSAUX表空间指定数据文件属性。SYSAUX表空间的必选属性由Oracle数据库设置,包括:PERMANENT、READ WRITE、EXTENT MANAGMENT LOCAL、SEGMENT SPACE MANAGMENT AUTO。
您不能使用alter TABLESPACE语句更改这些属性,任何这样做的尝试都将导致错误。SYSAUX表空间不能删除或重命名。
SYSAUX表空间的大小取决于占用SYSAUX的数据库组件的大小。你可以通过查询V$SYSAUX_OCCUPANTS视图来查看这些组件的列表。根据这些组件的初始大小,SYSAUX表空间在创建数据库时必须至少为400 MB。
SYS@orcl> col occupant_name for a40;
SYS@orcl> col occupant_name for a30;
SYS@orcl> col occupant_desc for a50;
SYS@orcl> select occupant_name,occupant_desc,space_usage_kbytes / 1024 from v$sysaux_occupants;
OCCUPANT_NAME OCCUPANT_DESC SPACE_USAGE_KBYTES/1024
------------------------------ -------------------------------------------------- -----------------------
LOGMNR LogMiner 10.8125
LOGSTDBY Logical Standby 1.5625
SMON_SCN_TIME Transaction Layer - SCN to TIME mapping .4375
AUDSYS AUDSYS schema objects .6875
PL/SCOPE PL/SQL Identifier Collection 2.8125
## 只截取了部分数据
在数据库完全部署之后,SYSAUX表空间的空间需求将会增加,这取决于它的使用性质和工作负载。
-
(10)默认表空间.
DEFAULT TABLESPACE子句为这个数据库创建并命名一个默认的永久表空间。 -
(11)默认临时表空间。
DEFAULT TEMPORARY TABLESPACE子句为该数据库创建并命名一个默认临时表空间
当你创建一个默认的临时表空间时,Oracle数据库会将它作为临时表空间分配给那些没有明确分配临时表空间的用户。可以在CREATE user语句中显式地为用户分配临时表空间或表空间组。
但是,如果您不这样做,并且没有为数据库指定默认临时表空间,那么默认情况下,这些用户将被分配SYSTEM表空间作为他们的临时表空间。
在SYSTEM表空间中存储临时数据并不是一个好的实践,并且为每个用户分别分配一个临时表空间是很麻烦的。因此,Oracle建议使用CREATE DATABASE的DEFAULT TEMPORARY TABLESPACE子句。
说明:
当指定本地管理的SYSTEM表空间时,SYSTEM表空间不能用作临时表空间。 -
(12)undo 表空间。
如果在初始化参数文件中指定了UNDO_MANAGEMENT=AUTO,则UNDO TABLESPACE子句创建并命名一个UNDO表空间,用于存储该数据库的UNDO数据。如果省略此参数,则默认为AUTO。
如果省略了此子句,并且启用了自动undo管理(UNDO_MANAGEMENT=AUTO),则数据库将创建一个名为SYS_UNDOTBS的默认撤销表空间。 -
(13)USER_DATA表空间子句创建和命名用于存储用户数据和数据库选项(如Oracle XML DB)的表空间。
-
(14)在线重做日志最初不会被归档,因为在CREATE DATABASE语句中没有指定ARCHIVELOG子句。这在数据库创建过程中是一种习惯的。稍后可以使用ALTER DATABASE语句切换到ARCHIVELOG模式。mynewdb的初始化参数文件中与归档相关的初始化参数为LOG_ARCHIVE_DEST_1和LOG_ARCHIVE_FORMAT。
提示:
a、确保CREATE DATABASE语句中使用的所有目录都存在。CREATE DATABASE语句不创建目录。
b、如果您不使用Oracle托管文件(Oracle Managed Files ),那么每个表空间子句必须包含DATAFILE或TEMPFILE子句。
c、如果数据库创建失败,那么可以查看报警日志,以确定失败的原因并确定纠正措施:
您可以使用文本编辑器、Cloud Control或ADRCI实用程序查看警报日志。这里介绍使用文本编辑器查看报警日志:
- 第一步:使用SQL*Plus或其他查询工具(如SQL Developer)连接到数据库。
- 第二步:查看v$diag_info视图
SYS@mynewdb> col value for a70
SYS@mynewdb> col name for a30
SYS@mynewdb> set linesize 200
SYS@mynewdb> select inst_id,name,value from v$diag_info;
INST_ID NAME VALUE
---------- ------------------------------ ----------------------------------------------------------------------
1 Diag Enabled TRUE
1 ADR Base /u01/app/oracle
1 ADR Home /u01/app/oracle/diag/rdbms/mynewdb/mynewdb
1 Diag Trace /u01/app/oracle/diag/rdbms/mynewdb/mynewdb/trace
1 Diag Alert /u01/app/oracle/diag/rdbms/mynewdb/mynewdb/alert
1 Diag Incident /u01/app/oracle/diag/rdbms/mynewdb/mynewdb/incident
1 Diag Cdump /u01/app/oracle/diag/rdbms/mynewdb/mynewdb/cdump
1 Health Monitor /u01/app/oracle/diag/rdbms/mynewdb/mynewdb/hm
1 Default Trace File /u01/app/oracle/diag/rdbms/mynewdb/mynewdb/trace/mynewdb_ora_68708.trc
1 Active Problem Count 1
1 Active Incident Count 5
1 ORACLE_HOME /u01/app/oracle/product/19.3.0.0/dbhome_1
## 说明:
# Diag Trace:后台进程跟踪文件、服务器进程跟踪文件、SQL跟踪文件和文本格式版本的警报日志的位置
# Diag Alert:xml格式版本的警报日志的位置
# Default Trace File:当前会话的跟踪文件
-
第三步:查看不带XML标记的纯文本报警日志:日志路径为查询结果中”Diag Trace“条目所示;文件名一般为:alert_SID.log
-
第四步:查看XML格式的报警日志:日志路径为查询结果中”Diag Alert“条目所示;文件名一般为:log.xml
如果收到包含进程号的错误消息,则检查该进程的跟踪文件。在跟踪文件名中查找包含进程号的跟踪文件。跟踪文件存储在ADR(Automatic Diagnostic Repository)中,位于每个ADR主目录下的trace目录中。为了帮助您定位此目录中的各个跟踪文件,您可以使用数据字典视图。
# 查找当前会话的跟踪文件
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Default Trace File';
# 查找当前实例的所有跟踪文件
SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace';
# 确定每个Oracle数据库进程的跟踪文件
SELECT PID, PROGRAM, TRACEFILE FROM V$PROCESS;
d、要在失败后重新提交CREATE DATABASE语句,必须首先关闭实例并删除由前面的CREATE DATABASE语句创建的所有文件。
本次实践中使用的是非Oracle Managed Files的方式创建数据库.
接下来说明使用Oracle Managed Files方式创建数据库,这使您能够使用更简单的CREATE DATABASE语句。要使用Oracle Managed Files,必须设置初始化参数DB_CREATE_FILE_DEST。此参数为数据库创建并自动命名的各种数据库文件定义基目录。
# 通过Oracle Managed Files和下面的CREATE DATABASE语句,数据库创建SYSTEM和SYSAUX表空间,
# 创建语句中指定的额外表空间,并为所有数据文件、控制文件和重做日志文件选择默认的大小和属性
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY sys_password
USER SYSTEM IDENTIFIED BY system_password
EXTENT MANAGEMENT LOCAL
DEFAULT TEMPORARY TABLESPACE temp
UNDO TABLESPACE undotbs1
DEFAULT TABLESPACE users;
9)第九步:创建额外的表空间
要制定一个实用的数据库,必须为应用程序数据创建额外的表空间。
# 使用CREATE TABLESPACE语句创建额外的表空间,例如:
CREATE TABLESPACE apps_tbs LOGGING
DATAFILE '/u01/app/oracle/oradata/mynewdb/apps01.dbf'
SIZE 500M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
10)第10步:运行脚本构建数据字典视图
运行构建数据字典视图、同义词和PL/SQL包所需的脚本,并支持SQLPlus的正确功能。
(1)通过如下方法之一,执行脚本catalog.sql和catproc.sql
catalog.sql:创建数据字典表的视图、动态性能视图和许多视图的公共同义词。授予PUBLIC对同义词的访问权限。
catproc.sql:运行PL/SQL所需或使用的所有脚本。
catpcat.sql:构建数据字典。该脚本使用catctl.pl程序运行(而不是使用SQLPlus),并在内部使用并发进程运行脚本catalog.sql和catproc.sql。
方法一:在SQL*PLUS中,使用具有sysdba权限的用户执行如下脚本
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql
方法二:一起运行catctl.pl脚本和catpcat.sql脚本(本次实践中使用该方法)
$ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catctl.pl -d $ORACLE_HOME/rdbms/admin -n 2 -l /home/oracle catpcat.sql
-n指定的值应该反映系统上可用的处理器数量。对于 CDBs 和non-CDBs,它的最大值可以是8。如果不指定此值,则对于non-CDBs,其默认值为4,对于CDBs,其默认值为CPU_COUNT初始化参数的值。
说明:
- a:在创建多租户容器数据库(CDB)时,使用附加参数-c ‘CDBSEED’(对于Windows系统使用双引号)首先在根容器(CDBROOT)中来运行脚本catpcat.sql,然后在种子PDB (PDBSEED)中运行。
- b:脚本catpcat.sql通过并行进程运行脚本catalog.sql和catproc.sql,从而提高构建数据字典的效率。
(2)在SQL*Plus中使用具有sysdba权限的用户运行脚本utlrp.sql
utlrp.sql:重新编译处于无效状态的所有PL/SQL模块,包括包、过程和类型。
sqlplus / as sysdba
@?/rdbms/admin/utlrp.sql
(3)运行pupbld.sql脚本
pupbld.sql:启用 SQL*Plus 以按用户禁用命令。
@?/sqlplus/admin/pupbld.sql
说明:@是运行SQLPlus脚本的命令的简写。问号(?)是SQLPlus变量,表示Oracle家目录
11)第11步:备份数据库(可选)
对数据库进行完全备份,以确保有一个完整的文件集,在发生介质故障时可以从中进行恢复。后续介绍。
12)第12步:启用自动启动实例(可选)
您可能希望将Oracle实例配置为在其主机重新启动时自动启动。
例如,在Windows上,使用以下命令配置数据库服务,使其在计算机重新启动时启动实例:
ORADIM -EDIT -SID sid -STARTMODE AUTO -SRVCSTART SYSTEM [-SPFILE]
# 如果希望实例在自动重新启动时读取SPFILE,则必须使用-SPFILE参数。
对于本次实践中,但凡是可选的步骤,我都没有操作。
5.删除数据库
删除数据库包括删除其数据文件、在线重做日志、控制文件和初始化参数文件。
startup restrict force mount;
DROP DATABASE;
DROP DATABASE语句首先删除所有控制文件和控制文件中列出的所有其他数据库文件。然后关闭数据库实例。
要成功使用DROP DATABASE语句,数据库必须以排他和受限模式挂载。
DROP DATABASE语句对归档的重做日志文件没有影响,对数据库的副本或备份也没有任何影响。最好使用RMAN来删除这些文件。
如果使用Database Configuration Assistant创建数据库,则可以使用该工具删除数据库并删除文件。
====== end ======




