Oracle 数据库关闭过程

2025年1月23日 | 阅读 9 分钟

何时必须关闭 Oracle 数据库?

停止数据库有一些特定的理由。

  • 修改静态变量。
  • 修复数据库服务器。
  • 执行管理或维护任务。

例如,要将数据库从 12 升级到 19 摄氏度,必须先关闭数据库。只有这样才能进行升级。

关闭 Oracle 数据库的方法

  • 正常关闭
  • 事务性关闭
  • 立即关闭
  • 中止关闭

下面显示了关闭技术的通用表格,该表格概述了每种关闭方法的行为。

Oracle Database Shutdown Procedure

正常关闭

标准的数据库关闭禁止用户建立新连接。在数据库端,数据库会等待当前会话完成。数据库会等待所有当前事务完成。它会终止文件并强制执行检查点。由于数据库中某些用户会话可能需要数小时甚至数天才能完成,因此此策略既非常安全又极难执行。

事务性关闭

这是第二种操作方式。当我们执行事务性关闭时,数据库将停止允许新用户连接。

数据库在不等待活动会话结束的情况下运行。但是,它会等待当前事务完成。此技术关闭文件并强制执行检查点。它也是一种安全地结束数据库操作的方法。但是,有时可能会很困难,因为数据库必须等待每个事务完成,即使其中一些事务需要很长时间。

立即关闭

数据库行业中最受欢迎的关闭技术是立即关闭。此技术可阻止新连接,不等待正在进行的会话结束,也不允许正在进行的事务完成。在强制执行检查点后,文件将被关闭。

这三种关闭技术都非常安全。这些技术将产生一致的数据库。但是,中止关闭方法现在会导致数据库不一致。

中止关闭

此技术阻止打开新连接,阻止会话结束,阻止事务完成,强制执行检查点,并且不关闭文件。由于此方法不强制执行检查点并保存文件,因此我们可能会丢失数据。尽量避免使用此方法。

注意:这假设关闭是正常的,如果您只在数据库中输入 shutdown 而没有数据库。

一致数据库和不一致数据库之间的区别

一致数据库具有正常关闭、事务性关闭和立即关闭等关闭方法,而不一致数据库则没有。在这些关闭方法中,未提交的修改将被回滚,但未提交的数据将存储在数据库中。

数据文件将使用数据库缓冲区缓存进行写入。所有资源都已可用。由于一切都已保存,因此不需要实例恢复。中止关闭、实例故障和启动强制等方法是 것입니다。作为结果,就不能将更改后的缓冲区—也称为脏缓冲区—写入数据文件。未提交的更改无法撤销。联机重做日志文件用于重新应用数据库设置期间所做的更改,而撤销段用于回滚未提交的数据。所有资源都已可用。

Oracle Database Shutdown Procedure

我们已经讨论了后台过程。DBWn 是一个后台进程的名称。这个人写数据库。在物理位置的数据文件中,它将数据缓冲区从数据库缓冲区缓存写入。当我们执行 commit 时,我们所做的更改不会立即存储在数据文件中。在数据库中发生的任何事务都在内存或数据库缓冲区缓存中进行。例如,我们使用 update 命令更新了一些数据库条目。下面照片中可以看到棕色的块。棕色框表示已更新的数据库。已更改数据的术语是脏缓冲区。

Oracle Database Shutdown Procedure

上面数据库缓冲区缓存中的棕色块显示了脏缓冲区。

数据库写入器何时写入数据文件?

DBWn 因五个主要原因向数据文件写入数据。

脏缓冲区阈值:当数据库缓冲区缓存中充满了新的、脏的缓冲区时,数据库写入器会将数据发布到数据文件。这是第一个原因。我们称之为脏缓冲区的阈值。

  • 当某些过程需要空闲缓冲区时:使用上述场景,在用户查询 10,000 行后,我们没有内存了。数据库写入器将脏缓冲区写入数据文件,然后释放数据库缓冲区缓存中的内存,允许用户查询 10,000 行。
  • 关闭(事务性、正常、立即):这是关闭的第三个理由。当数据库管理员使用正常关闭、事务性关闭或快速关闭来关闭数据库时,数据库写入器会将脏缓冲区写入数据文件。这样不会丢失任何数据。

现在,让我们看看关闭技术是如何实际实现的。

步骤 1:连接到 Oracle 数据库

以 Oracle 用户身份登录 Linux 计算机。在 Oracle 用户登录后,启动两个终端窗口,并使用“sysdba”分别登录数据库。

连接数据库后,使用命令“show con_name”显示容器数据库名称。

Oracle Database Shutdown Procedure

步骤 2:常规 Oracle 数据库关闭

让我们在终端 2 的数据库中创建一个表。在根数据库中创建表不是一个好主意,但我们可以这样做,因为我们仍在学习;不过,它应该在生产环境之外进行。以下查询用于创建表。

Oracle Database Shutdown Procedure

因此,将创建一个名为“student”的表,其行名为“roll_no”。在构建表和行后,我们将向行添加值 1。

因此,即使发出“shutdown Normal”命令,数据库也不会关闭,因为需要提交产生表的第二个会话才能终止它。因此,我们将键入“Commit”命令。执行“Commit”指令后,事务就完成了。在此事务之后,他可以执行任何其他操作,例如回滚或创建新表。

Oracle Database Shutdown Procedure

数据库将关闭,并且 Shutdown Normal 将在离开数据库后运行。因此,我们可以从这个实验中推断出,只有在事务完成并且会话结束之后,数据库才会关闭。

步骤 3:Oracle 中的事务性数据库关闭

在正常模式下关闭数据库后,使用“startup”重新启动数据库。打开两个终端。继续到终端 1,并使用“Startup”命令在数据库完全可访问后启动数据库。接下来,打开终端 2 并使用“sqlplus / as sysdba”连接到数据库。连接到数据库后,在新生成的表中插入新行。所有命令都已练习并显示在下方。

Oracle Database Shutdown Procedure

我们在终端 2 中完成的插入事务阻止了数据库关闭,即使我们发出了“Shutdown Transactional”命令。我们必须执行“Commit”命令来完成事务。发送命令后,事务性关闭将关闭数据库。此功能不会等待会话结束。您可以在下方看到数据库已关闭并终止。

Oracle Database Shutdown Procedure

步骤 4:快速关闭 Oracle 数据库

在事务性关闭之后。使用终端 1 的“Startup”命令重新启动数据库。

Oracle Database Shutdown Procedure

数据库启动后,在新添加到我们在终端 2 中之前创建的表中插入新记录。因此,数据库在终端 -1 上启动。在终端 -2 的 student 表中又添加了一行。

接下来,我们将插入一个新行,然后发送“Shutdown Immediate”命令。发出此命令后,Oracle 将不会等待用户会话和事务完成。数据库将立即终止。因此,我们添加到 student 表中的行将被回滚。

Oracle Database Shutdown Procedure

现在有一个活动的“Shutdown Immediate”。因此,数据库将终止。转到终端 2 并运行任何查询以查看数据库是否已关闭。例如,我们将执行类似“select name from v$database”的查询。让我们检查一下可能的结果。

因此,我们收到了一个表明连接已断开的输出。数据库已关闭,如下所示。让我们重新启动数据库,看看新生成的记录是否包含在数据库中。数据库已启动。为了查看 student 表中有哪些行,让我们执行一个查询。

查询:选择 * 来自 student;

只有两行可用。

Oracle Database Shutdown Procedure

由于我们没有提交数据并使用了“shutdown immediately”来关闭数据库,因此没有第三行。因此,在快速关闭过程中,未提交的数据将不会保存。

另一种方法是中止关闭。由于此技术会影响数据库的性能,因此我们不建议使用它。

根据特定的需求和数据库的当前状态,有几种关闭 Oracle 数据库的方法。以下是关键操作和技术

1. 使用 SQL*Plus

SQL*Plus 是一个命令行实用程序,提供了一个与 Oracle 数据库交互和控制的强大接口。您可以如下停止数据库

  • 使用 SQL*Plus 建立连接:启动命令提示符,并使用 SYSDBA 用户帐户登录 SQL*Plus。
  • 关闭数据库:根据您的需求,使用以下关闭命令之一
  • 快速关闭:此技术可确保数据库被正确关闭和卸载。用户立即断开连接,并且所有打开的事务都会回滚。
  • 正常关闭:在关闭之前,数据库会等待所有用户断开连接。尽管这是最安全的方法,但如果用户不断开连接,则可能需要一段时间。
  • 事务性关闭:此技术仅在所有事务完成后才关闭。
  • 中止关闭:这是最快的方法,应该是您尝试的最后一种方法。数据库会立即停止,而无需等待任何事务或用户。下次启动时可能需要恢复。

2. 使用 OEM,Oracle Enterprise Manager

Oracle Enterprise Manager 是一个在线界面,用于管理 Oracle 数据库。应用方法如下

  • 输入 OEM 登录信息
    启动浏览器,然后输入 Oracle Enterprise Manager Console 登录页面。
  • 通过导航访问数据库
    选择您要关闭的数据库作为目标。
  • 关闭数据库
    在选择“可用性”选项后,从“生命周期管理”下选择“Shutdown”。要完成关闭过程,请选择适当的关闭选项(中止、事务性、正常或立即)并按照提示操作。

3. 使用 Oracle SQL Developer

  • Oracle SQL Developer 是一种用于数据库开发的 GUI 工具。使用 SQL Developer,如下关闭数据库
  • 启动 Oracle SQL Developer 来打开 SQL Developer。
  • 使用具有 SYSDBA 权限的用户登录,建立到数据库的连接。
  • 执行关闭命令:请参阅 SQL*Plus 部分,了解如何在新的 SQL 工作表中执行相应的关闭命令。
  • 关闭 Oracle 数据库时,您应仔细评估环境的需求以及数据库的当前状态。

以下是关于每种关闭方法和选项的更深入信息

1. 详细的关闭选项:立即关闭

  • 命令:SHUTDOWN IMMEDIATELY;
  • 描述:这是最受欢迎的关闭选项。它可确保数据库被整洁地关闭。数据库被温和地关闭和卸载,所有连接的用户立即断开连接,并且所有活动事务都被回滚。
  • 使用场景:当您需要快速关闭数据库但仍要确保数据完整性且不想等待用户完成任务时,此选项很有用。

2. 正常关闭

  • 命令:SHUTDOWN NORMAL;
  • 描述:此选项会延迟数据库关闭,直到所有用户断开连接。关闭过程启动后,不再允许连接。
  • 使用场景:如果您可以等待所有用户注销,并且在关闭之前有充足的时间,请选择此选项。此过程可确保非常顺畅的关闭。

3. 事务性关闭

  • 命令:“SHUTDOWN TRANSACTIONAL” ;
  • 描述:在关闭之前启用所有正在进行的事务完成。不允许建立新连接或事务。
  • 使用场景:不要等待用户断开连接;使用此选项以确保在数据库关闭之前完成所有事务。

4. 中止关闭

  • 命令:SHUTDOWN ABORT;
  • 描述:这是最快的关闭方式,类似于断电。数据库会突然终止,而无需等待任何活动进程完成。在随后的启动中可能需要实例恢复。

结论

总而言之,选择最佳的关闭选项和技术将取决于您环境的特定需求。由于 SHUTDOWN IMMEDIATE 在速度和安全性之间取得了良好的平衡,因此通常推荐使用它。选择最佳关闭技术时,请牢记数据库的当前状态、正在进行的事务和用户活动。通过进行规划,并在用户了解可用工具和命令的情况下,数据库关闭过程将顺利有效地运行。