仅安装数据库软件后,如何从命令行设置新的 oracle 实例?

Jon*_*Raa 4 oracle windows command-line

我试图让自己熟悉从命令行设置新实例/数据库的过程,目的是构建一个部署数据库的工具。

我们正在考虑使用的过程是

  1. (可选)创建一个新实例以部署到
  2. 使用impdp导入一些数据
  3. 在数据库上运行升级脚本以将其升级到所需的版本

我目前关注的一点(+刚刚破解)是实例创建,尽管我很想听听对其其他部分的评论+关于替代方法或好主意的任何信息!我对数据库和 oracle 都很陌生,我不得不从头开始解决问题。

所有这一切的关键要求是应该以可以编写脚本的方式完成,以便我们可以自动化流程。

我正在使用 12c 标准版一的 Windows 工作,并且只安装了数据库软件。

Jon*_*Raa 7

创建新实例

以下命令行调用将创建一个新的数据库 + 实例

dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbName sid -sysPassword pass -systemPassword pass
Run Code Online (Sandbox Code Playgroud)

因为我有一个专门的 oracle 用户进行安装,所以我还必须使用 -serviceUserPassword。关于密码,尽管如果您错过这些密码处于静默模式,那么系统会提示您输入密码,而不是程序失败,因此从技术上讲,最低限度是

dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbName sid 
Run Code Online (Sandbox Code Playgroud)

您将无法编写脚本 - 该程序将无限期挂起。

这个命令的用法有点神秘,如果你弄错了,它会提供非常有用的信息:

'Not all required options provided for the command "createDatabase".Please refer to the manual for details.'
Run Code Online (Sandbox Code Playgroud)

值得庆幸的是,如果您最终浏览了大量的在线文档,您最终可以在这里找到它需要的信息以及所有选项的内容和用途。

我在这里发现的另一件事是它可能会失败,但它不会从命令提示符告诉您 - 您应该检查它生成的日志文件(它会告诉您这些文件的去向)。仅仅因为它说 100% 完成并不意味着它确实有效!你本可以 100% 失败!特别是如果它完成得非常快,那么这是一个警告信号 - 预计它至少需要几分钟。我发现我第二次需要以管理员身份运行它- 我怀疑情况总是如此,但在第一次运行时,UAC 被禁用了。

启动监听器

这个位是每个服务器一次,所以不需要脚本来满足我的需要。我认为值得一提,因为还需要做一些事情才能使我的实例在其他机器上可用。

我发现在执行上述操作后,我无法远程连接到数据库,但可以从本地 sqlplus 连接。在某种程度上,这种本地访问是误报,因为结果证明服务器上没有运行侦听器(可能是因为只安装了软件)。您可以通过查看TNSLSNR.exe是否在服务器上运行来确定是否属于这种情况。

幸运的是,如果侦听器尚未运行,则启动侦听器很容易。您使用名为lsnrctl的命令行程序。这可能是我用过的最好的 oracle 命令行程序。它会告诉您如何使用它,并且可以毫不费力地工作。您可以交互式地使用它并在它出现时输入“开始”。

请注意,您可能需要从管理员 shell 运行上述内容, 如果您看到类似以下内容:

LSNRCTL> start
Starting tnslsnr: please wait...

Unable to OpenSCManager: err=5
 TNS-12560: TNS:protocol adapter error
 TNS-00530: Protocol adapter error
Run Code Online (Sandbox Code Playgroud)

然后尝试以管理员身份进行操作。

自动注册

启动后我仍然无法从外部连接到数据库。您可以使用lsnrctl status来确定侦听器是否知道数据库实例。如果您在输出中的某处收到一条消息,指出

The listener supports no services
Run Code Online (Sandbox Code Playgroud)

那么它不起作用。我想使用自动注册,因为这听起来像是要走的路,而且从阅读中发现,实例在启动时向侦听器注册。

要重新启动实例,请执行以下操作(此处的文档):

使用 sqlplus 命令行。您需要以具有 SYSDBA 特权(例如系统)语法的用户身份登录:

sqlplus name/pass as SYSDBA
Run Code Online (Sandbox Code Playgroud)

然后运行“关机”并等待它完成。然后运行“启动”并等待它完成。

这里有一个很好的帖子,它也提出了另一种方法

注意到,如果你没有一个tnsnames.ora文件,你需要指定连接字符串中的主机-这不会工作:

sqlplus name/pass@serviceName 
Run Code Online (Sandbox Code Playgroud)

这样做:

sqlplus name/pass@//localhost/serviceName
Run Code Online (Sandbox Code Playgroud)

您好,您应该将您的实例注册到侦听器。您可以通过再次运行 lsnrctl status 来验证这一点。

您应该会看到如下内容:

Service "horse" has 1 instance(s).
 Instance "horse", status READY, has 1 handler(s) for this service...
Run Code Online (Sandbox Code Playgroud)

打开防火墙端口

使服务器上的实例可访问的最后一步是打开防火墙上的端口。您可以从 lsnrctl 状态消息中确定需要打开的端口 - 应该有一个如下所示的部分:

Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=host)(PORT=1521)))
Run Code Online (Sandbox Code Playgroud)

如果您没有此处提到的 listener.ora 文件,则 1521 是默认端口

要在我们的 Windows 7 服务器上的防火墙上打开一个端口,我使用了以下说明

完成上述所有操作后,我可以从本地计算机连接到实例。成功!希望部署更多实例只需要重复 dbca 命令。由于侦听器已经启动,因此应该立即注册。我会试试这个并发布任何进一步的并发症。