暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle Administrator's Guide(Oracle 19c):2.4 Creating a Database with the CREATE DATABASE Statement

原创 Ryan Bai 2024-04-22
292

使用 CREATE DATABASE SQL 语句创建数据库比使用 Oracle数据库配置助手(DBCA)更手动。与使用 DBCA 相比,使用该语句的一个优点是可以在脚本中创建数据库。

关于使用CREATE DATABASE 语句创建数据库

当您使用 CREATE DATABASE 语句时,您必须完成其他操作才能拥有一个可操作的数据库。这些操作包括在数据字典表上构建视图和安装标准 PL/SQL 包。您可以通过运行提供的脚本来执行这些操作。

如果您已有用于创建数据库的脚本,那么可以考虑编辑这些脚本,以利用 Oracle 数据库的新特性。

本节中的说明只适用于“单实例安装”。有关创建 Oracle RAC 数据库的说明,请参阅您所在平台的 Oracle Real Application Clusters (Oracle RAC) 安装指南。

第 1 步:指定实例标识符(SID)

ORACLE_SID 环境变量用于将该实例与其他 Oracle 数据库实例区分开来,这些实例可能会在以后创建并在同一主机上并发运行。

  1. 为实例决定一个唯一的 Oracle 系统标识符(SID)。

  2. 打开命令窗口。

  3. 设置 ORACLE_SID 环境变量。

与 ORACLE_SID 中有效字符相关的限制是特定于平台的。在某些平台上,SID 是区分大小写的。

下面的 UNIX 和 Linux 操作系统示例为您在第 6 步:连接实例将要连接到的实例设置 SID:

  • Bourne、Bash 或 Korn shell:

    ORACLE_SID=mynewdb export ORACLE_SID
  • C shell:

    setenv ORACLE_SID mynewdb

以 Windows 操作系统为例:

set ORACLE_SID=mynewdb

第 2 步:确保设置了所需的环境变量

根据平台的不同,在启动 SQL*Plus 之前(在后面的步骤中需要),可能需要设置环境变量,或者至少验证它们的设置是否正确。

  • 设置环境变量。

例如,在大多数平台上,ORACLE_SIDORACLE_HOME 必须设置。另外,建议将 PATH 变量设置为包含 ORACLE_HOME/bin 目录。在 UNIX 和 Linux 平台上,必须手动设置这些环境变量。在 Windows 平台上,OUI 会自动为 Windows 注册表中的 ORACLE_HOMEORACLE_SID 赋值。如果您没有在安装时创建数据库,OUI 不会在注册表中设置 ORACLE_SID,您将不得不在稍后创建数据库时设置 ORACLE_SID 环境变量。

第 3 步:选择数据库管理员认证方式

为了创建数据库,必须对您进行身份验证并授予适当的系统权限。

  • 选择认证方式。

管理员身份认证可以通过以下方式实现:

  • 使用密码文件
  • 使用操作系统认证

要使用密码文件进行认证,请参照“Creating and Maintaining a Database Password File”创建密码文件。要使用操作系统身份验证进行身份验证,请确保使用适当操作系统用户组成员的用户帐户登录到主机。例如,在 UNIX 和 Linux 平台上,这通常是 dbauser 组。在 Windows 平台上,安装 Oracle 软件的用户被自动放置在所需的用户组中。

第 4 步:创建初始化参数文件

当 Oracle 实例启动时,它读取一个初始化参数文件。这个文件可以是文本文件(可以使用文本编辑器创建和修改),也可以是二进制文件(由数据库创建和动态修改)。首选的二进制文件称为服务器参数文件。在此步骤中,您将创建一个文本初始化参数文件。在后面的步骤中,您将从文本文件创建一个服务器参数文件。

  • 创建初始化参数文件

创建文本初始化参数文件的一种方法是编辑“Sample Initialization Parameter File”中提供的示例。

如果手动创建初始化参数文件,请确保它至少包下表中列出的参数。未列出的所有其他参数都有默认值。

参数名 强制性的 备注
DB_NAME 数据库标识符。必须与 CREATE DATABASE 语句中使用的值对应。最多8个字符。
CONTROL_FILES 强烈推荐。如果没有提供,则数据库实例将在初始化参数文件的相同位置创建一个控制文件。提供此参数使您能够多路复用控制文件。
MEMORY_TARGET 设置实例使用的内存总量,并启用自动内存管理。您可以选择其他初始化参数,而不是这个参数来手动控制内存使用情况。

为了方便起见,使用默认文件名将初始化参数文件存储在 Oracle 数据库默认位置。然后,在启动数据库时,不需要指定 STARTUP 命令的 PFILE 子句,因为 Oracle 数据库会自动查找初始化参数文件的默认位置。

第 5 步:创建实例(仅限 Windows)

在 Windows 平台上,如果实例不存在,则必须手动创建该实例,然后才能连接到该实例。ORADIM 命令通过创建一个新的 Windows 服务创建 Oracle 数据库实例。

创建一个实例:

  • 在 Windows 命令提示符下输入以下命令:

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

    用适当的值替换以下占位符:

    • sid - 所需的sid(例如mynewdb)
    • file - 文本初始化参数文件的完整路径

大多数 Oracle 数据库服务使用 Oracle Home User 权限登录到系统。该服务使用该用户的权限运行。ORADIM 命令提示输入此用户帐户的密码。您可以使用 ORADIM 指定其他选项。

第 6 步:连接实例

启动 SQL*Plus 并使用 SYSDBA 管理权限连接到 Oracle 数据库实例。

  • 使用密码文件进行身份验证,输入如下命令,然后根据提示输入 SYS 密码:

    $ sqlplus /nolog SQL> CONNECT SYS AS SYSDBA
  • 使用操作系统身份验证进行身份验证,输入以下命令:

    $ sqlplus /nolog SQL> CONNECT / AS SYSDBA

SQL*Plus 输出以下消息:

Connected to an idle instance.

第 7 步:创建服务器参数文件

服务器参数文件允许您使用 ALTER SYSTEM 命令更改初始化参数,并在数据库关闭和启动期间保持更改。您可以从编辑的文本初始化文件创建服务器参数文件。

  • 执行如下 SQL*Plus 命令:

    CREATE SPFILE FROM PFILE;

这个 SQL*Plus 命令从默认位置读取具有默认名称的文本初始化参数文件(PFILE),从文本初始化参数文件创建服务器参数文件(SPFILE),并使用默认 SPFILE 名称将 SPFILE 写入默认位置。

如果没有使用默认名称和位置,还可以为 PFILE 和 SPFILE 提供文件名和路径。

第 8 步:开启实例

启动实例而不挂载数据库。

  • 运行 STARTUP 命令带有 NOMOUNT 子句。

通常,您只在创建数据库或在数据库上执行维护时执行此操作。在本例中,由于初始化参数文件或服务器参数文件存储在默认位置,所以不需要指定 PFILE 子句:

STARTUP NOMOUNT

此时,已经分配了实例内存并启动了它的进程。数据库本身还不存在。

第 9 步:发出 CREATE DATABASE 语句

创建新库,使用 CREATE DATABASE 语句

  • 运行 CREATE DATABASE 语句

例 1

下面的语句创建一个数据库 mynewdb。此数据库名称必须与初始化参数文件中的 DB_NAME 参数一致。这个例子假设如下:

  • 初始化参数文件使用 CONTROL_FILES 参数指定控制文件的数量和位置。
  • 目录 /u01/app/oracle/oradata/mynewdb 存在。
  • 目录 /u01/logs/my/u02/logs/my 存在。
CREATE DATABASE mynewdb USER SYS IDENTIFIED BY sys_password USER SYSTEM IDENTIFIED BY system_password LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log') SIZE 100M BLOCKSIZE 512, GROUP 2 ('/u01/logs/my/redo02a.log','/u02/logs/my/redo02b.log') SIZE 100M BLOCKSIZE 512, GROUP 3 ('/u01/logs/my/redo03a.log','/u02/logs/my/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;

创建一个具有以下特征的数据库:

  • 数据库名为 mynewdb。它的全局数据库名称是 mynewdb.us.example.com,其中域部分(us.example.com)取自初始化参数文件。
  • 按照 CONTROL_FILES 初始化参数指定的方式创建三个控制文件,该参数是在初始化参数文件中创建数据库之前设置的。
  • 用户帐户 SYSSYSTEM 的密码设置为您指定的值。密码是区分大小写的。在 Oracle 数据库的这个版本中,指定 SYSSYSTEM 密码的两个子句不是必需的。但是,如果指定了其中一个子句,则必须同时指定两个子句。
  • 新数据库有三个重做日志文件组,每个组有两个成员,如 LOGFILE 子句中指定的那样。MAXLOGFILESMAXLOGMEMBERSMAXLOGHISTORY 为重做日志定义了限制。重做日志文件的块大小设置为512字节,与磁盘上的物理扇区大小相同。如果块大小与物理扇区大小相同(默认),则 BLOCKSIZE 子句是可选的。对于典型扇区大小,典型块大小为 512。BLOCKSIZE 的允许值为 512、1024 和 4096。对于扇区大小为 4K 的新磁盘,可以选择将 BLOCKSIZE 指定为 4096。
  • MAXDATAFILES 指定可以在数据库中打开的最大数据文件数量。这个数字会影响控件文件的初始大小。
  • AL32UTF8 字符集用于在这个数据库中存储数据。
  • AL16UTF16 字符集被指定为NATIONAL CHARACTER SET,用于在特定定义为 NCHARNCLOBNVARCHAR2 的列中存储数据。
  • SYSTEM 表空间,由操作系统文件 /u01/app/oracle/oradata/mynewdb/system01.dbf 组成。是由 DATAFILE 子句指定创建的。如果已经存在具有该名称的文件,则重写该文件。
  • SYSTEM 表空间被创建为一个本地管理的表空间。
  • 创建一个 SYSAUX 表空间,由操作系统文件 /u01/app/oracle/oradata/mynewdb/sysaux01.dbf 组成。在 SYSAUX DATAFILE 子句中指定。
  • DEFAULT TABLESPACE 子句为这个数据库创建并命名一个默认的永久表空间。
  • DEFAULT TEMPORARY TABLESPACE 子句为这个数据库创建并命名一个默认的临时表空间。
  • 如果在初始化参数文件中指定了 UNDO_MANAGEMENT=AUTOUNDO TABLESPACE 子句创建并命名一个 UNDO 表空间,该表空间用于存储这个数据库的 UNDO 数据。如果省略此参数,则默认值为 AUTO
  • USER_DATA 表空间子句创建并命名表空间,用于存储用户数据和数据库选项,如 Oracle XML DB。
  • 联机重做日志最初不会存档,因为在这个 CREATE DATABASE 语句中没有指定 ARCHIVELOG 子句。这是 CREATE DATABASE 语句的惯例。稍后可以使用 ALTER DATABASE 语句切换到 ARCHIVELOG 模式。mynewdb 与归档相关的初始化参数文件中的初始化参数是 LOG_ARCHIVE_DEST_1LOG_ARCHIVE_FORMAT

例 2

这个示例演示了用 Oracle Managed Files 创建数据库,它允许你使用更简单的 CREATE DATABASE 语句。要使用 Oracle Managed Files,必须设置初始化参数 DB_CREATE_FILE_DEST。此参数定义数据库创建并自动命名的各种数据库文件的基本目录。在初始化参数文件中设置该参数的示例如下:

DB_CREATE_FILE_DEST='/u01/app/oracle/oradata'

使用 Oracle Managed Files 和下面的 CREATE DATABASE 语句,数据库创建 SYSTEMSYSAUX 表空间,创建语句中指定的额外表空间,并为所有数据文件、控制文件和重做日志文件选择默认大小和属性。注意,由此方法设置的这些属性和其他默认数据库属性可能不适合您的生产环境,因此建议您检查结果配置并在必要时进行修改。

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;

第 10 步:创建额外的表空间

要使数据库正常运行,必须为应用程序数据创建额外的表空间。

  • 执行 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; -- create a tablespace for indexes, separate from user tablespace (optional) CREATE TABLESPACE indx_tbs LOGGING DATAFILE '/u01/app/oracle/oradata/mynewdb/indx01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;

第 11 步:运行脚本创建数据字典视图

运行构建数据字典视图、同义词和PL/SQL包所需的脚本,并支持 SQL*Plus 的正确功能。

  1. 执行以下步骤之一:

    • 在 SQL*Plus 中,作为具有 SYSDBA 权限的用户运行以下脚本:

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

    • 使用 catpcat.sql 运行 catctl.pl:

      $ORACLE_HOME/perl/bin/perl $ORACLE_HOME/rdbms/admin/catctl.pl -d $ORACLE_HOME/rdbms/admin -n number_of_processes -l output_log_directory catpcat.sql

      number_of_processes 的值应该反映系统上可用处理器的数量。无论是 CDBs 还是非 CDBs,其最大值都可以是 8。如果没有指定这个值,那么对于非 CDBs,它的默认值为 4,对于 CDBs,它的初始化参数 CPU_COUNT 的值为 4。

  2. 在 SQL*Plus 中,作为具有 SYSDBA 权限的用户运行以下脚本:

    @?/rdbms/admin/utlrp.sql
  3. 在SQL*Plus中,作为 SYSTEM 用户运行以下脚本:

    @?/sqlplus/admin/pupbld.sql
    

at 符号(@)是运行 SQL*Plus 脚本的命令的简写。问号(?)是 SQL*Plus 变量,表示 Oracle Home目录。

下表包含了这些脚本的描述:

脚本 描述
catalog.sql 为许多视图创建数据字典表、动态性能视图和公共同义词的视图。授予对同义词的公共访问权。
catproc.sql 运行 PL/SQL 所需的或与 PL/SQL 一起使用的所有脚本。
utlrp.sql 重新编译处于无效状态的所有 PL/SQL 模块,包括包、过程和类型。
pupbld.sql SQL*Plus 所需。使 SQL*Plus 可以通过用户禁用命令。
catpcat.sql 构建数据字典。该脚本使用 cattl .pl 程序运行(不使用 SQL*Plus ),并在内部运行 catalog.sqlcatproc.sql 具有并行进程,从而提高了构建数据字典的性能。

第 12 步:(可选)运行脚本安装其他选项

您可能想运行其他脚本。您运行的脚本由您选择使用或安装的特性和选项决定。

  • 运行脚本安装其他选项。

如果您计划安装其他 Oracle 产品来使用此数据库,请参阅这些产品的安装说明。有些产品需要您创建额外的数据字典表。通常,提供命令文件来创建这些表并将其加载到数据库数据字典中。

第 13 步:备份数据库

对数据库进行完整备份,以确保在发生介质故障时可以从完整的文件集进行恢复。

  • 备份数据库。

第 14 步:(可选)启用实例自动启动

您可能希望将 Oracle 实例配置为在主机重新启动时自动启动。

  • 配置 Oracle 实例在主机重启时自动启动。

有关说明,请参阅操作系统文档。例如,在 Windows 系统中,使用以下命令配置数据库服务,使其在计算机重新启动时启动实例:

ORADIM -EDIT -SID sid -STARTMODE AUTO -SRVCSTART SYSTEM [-SPFILE]

如果希望实例在自动重启时读取 SPFILE,则必须使用 -SPFILE 参数。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论