创建虚拟机

创建资源-虚拟机

指定oracle映像

其他的选项就不说了都一样。创建完以后启动并SSH连接上虚拟机。(用下载的秘钥有可能和xshell不太兼容,我是用xshell生成了一对新的秘钥对并在azure创建完成以后重新上传了自己生成的公钥)

创建数据库

登录到虚拟机,首先切换到oracle用户。并尝试执行sqlplus,确认环境没有问题。

也可以查看环境变量ORACLE_HOME,确认oracle安装位置。

[mango@oracle19c ~]$ sudo -Hsu oracle
[oracle@oracle19c ~]$ sqlplus
....
....
[oracle@oracle19c ~]$ echo $ORACLE_HOME
/u01/app/oracle/product/19.0.0/dbhome_1

确认无误后创建数据库,示例命令如下

$ORACLE_HOME/bin/dbca -silent \
 -createDatabase \
 -templateName General_Purpose.dbc \
 -gdbName orcl.example.com \
 -sid orcl \
 -characterSet AL32UTF8 \
 -nationalCharacterSet AL16UTF16 \
 -memoryPercentage 40 \
 -emConfiguration NONE \
 -datafileDestination /u01/app/oracle/oradata \
 -storageType FS \
 -redoLogFileSize 50
注:gdbName :这个是以后连接数据库时配置文件中的SERVICE_NAME,sid 就不用说了,其他的没有特殊要求照抄即可。
[oracle@oracle19c ~]$ $ORACLE_HOME/bin/dbca -silent \
> -createDatabase \
> -templateName General_Purpose.dbc \
> -gdbName orcl.example.com \
> -sid orcl \
> -characterSet AL32UTF8 \
> -nationalCharacterSet AL16UTF16 \
> -memoryPercentage 40 \
> -emConfiguration NONE \
> -datafileDestination /u01/app/oracle/oradata \
> -storageType FS \
> -redoLogFileSize 50

Enter SYS user password: 输入SYS用户的密码
Enter SYSTEM user password: 输入SYSTEM用户的密码,最好不要相同

然后就开始创建,这个时间有点长,等待结束即可。输出内容如下:

10% complete
Copying database files
40% complete
Creating and starting Oracle instance
42% complete
46% complete
50% complete
54% complete
60% complete
Completing Database Creation
66% complete
69% complete
70% complete
Executing Post Configuration Actions
100% complete
Database creation complete. For details check the logfiles at:
 /u01/app/oracle/cfgtoollogs/dbca/orcl.
Database Information:
Global Database Name:orcl.example.com
System Identifier(SID):orcl
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details.
[oracle@oracle19c ~]$

继续创建表空间,Schema(用户),赋权

以dba身份连接数据库并

  • 创建一个表空间。
  • 创建一个用户。
  • 为用户赋权。
  • 完成后退出sqlplus
sqlplus / as sysdba

SQL> CREATE TABLESPACE TABLE_SPACE_ME DATAFILE  '/u01/app/oracle/oradata/me.dbf' SIZE 200M AUTOEXTEND ON;
Tablespace created.

SQL> CREATE USER MANGO IDENTIFIED BY password DEFAULT TABLESPACE TABLE_SPACE_ME TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON TABLE_SPACE_ME;
User created.

SQL> grant dba to MANGO;
Grant succeeded.

SQL> exit

至此,用户创建完成,可以尝试在本地连接一下:

[oracle@oracle19c ~]$ sqlplus MANGO/password

SQL*Plus: Release 19.0.0.0.0 - Production on Tue May 2 04:48:25 2023
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@oracle19c ~]$

公开服务到外网

在$ORACLE_HOME/network/admin 目录中添加一个配置文件listener.ora 并设置以下内容,

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
)
)

在这个配置中,监听器将绑定到所有可用的网络接口(0.0.0.0 表示所有IPv4地址),并侦听TCP端口1521。这将允许外部客户端通过TCP连接到这个oracle服务器。

在实际部署中,最好将 0.0.0.0 替换为数据库服务器的实际IP地址或主机名。使用特定的IP地址或主机名可以增强安全性,避免不必要的接口暴露。

cd $ORACLE_HOME/network/admin
vi listener.ora

配置完以后需要重启监听服务,首次创建监听器时执行stop命令会报错,无视即可。

lsnrctl stop
lsnrctl start

oracle的设置到此就完成了,接着需要配置防火墙,允许1521入站。

配置Azure的入站规则,放行1521入站

进入azure后台,打开虚拟机详情页-网络

添加入站端口规则(出站不需要)

配置虚拟机防火墙规则,放行1521

只配置Azure的入站规则是不够的,还需要配置linux主机自身防火墙的规则。

在Azure中可以用以下命令工具完成(5502这一条是微软官方的oracle向导文档中提到的,照做即可)

注意,执行用户不可以是oracle,需要切换回一般用户。oracle用户默认是没有sudo权限的。

sudo firewall-cmd --zone=public --add-port=1521/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5502/tcp --permanent
sudo firewall-cmd --reload

至此,服务器端的配置就完成了。

客户端远程连接数据库

这个大家都很熟悉了。

在tnsnames.ora中添加如下配置,SERVICE_NAME就是之前创建数据库时指定的名字。

MY_DB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl.example.com)
    )
  )

然后在命令行连接即可。

sqlplus MANGO/passowrd@MY_DB

数据库服务开机自启动

默认是不会自动启动的。当虚拟机重启后需要手动启动。用下面的方法使其开机自启动。

  1. 以root用户登录

    sudo su -
  2. 将/etc/oratab文件中配置自动启动的flag从默认的N改为Y

    sed -i 's/:N/:Y/' /etc/oratab
  3. 创建文件 /etc/init.d/dbora ,内容如下,ORA_HOME根据实际情况修改

    #!/bin/sh
    # chkconfig: 345 99 10
    # Description: Oracle auto start-stop script.
    #
    # Set ORA_HOME to be equivalent to $ORACLE_HOME.
    ORA_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
    ORA_OWNER=oracle
    
    case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the Oracle sign-in
        # will not prompt the user for any values.
        # Remove "&" if you don't want startup as a background process.
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME" &
        touch /var/lock/subsys/dbora
        ;;
    
    'stop')
        # Stop the Oracle databases:
        # The following command assumes that the Oracle sign-in
        # will not prompt the user for any values.
        su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME" &
        rm -f /var/lock/subsys/dbora
        ;;
    esac
  4. 修改文件的权限

    chgrp dba /etc/init.d/dbora
    chmod 750 /etc/init.d/dbora
  5. 创建几个软链接

    ln -s /etc/init.d/dbora /etc/rc.d/rc0.d/K01dbora
    ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora
    ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora
  6. 至此,就可以自动启动oracle服务了。可以重启试一下。

    reboot

关于上面第5步创建软连接的说明:

这些命令的作用是在不同的运行级别(runlevel)中创建符号链接(symlink),以便在系统启动或关闭时自动启动或关闭Oracle数据库。这里的三个命令分别针对不同的运行级别:

  1. ln -s /etc/init.d/dbora /etc/rc.d/rc0.d/K01dbora
    这个命令在运行级别0(关机状态)中创建一个名为K01dbora的符号链接。当系统进入运行级别0时,K01dbora脚本将被执行,以关闭Oracle数据库。这里的“K”表示“kill”(关闭),而“01”表示执行顺序(数字越小越早执行)。
  2. ln -s /etc/init.d/dbora /etc/rc.d/rc3.d/S99dbora
    这个命令在运行级别3(多用户、无图形界面)中创建一个名为S99dbora的符号链接。当系统进入运行级别3时,S99dbora脚本将被执行,以启动Oracle数据库。这里的“S”表示“start”(启动),而“99”表示执行顺序(数字越大越晚执行)。
  3. ln -s /etc/init.d/dbora /etc/rc.d/rc5.d/S99dbora
    这个命令在运行级别5(多用户、带图形界面)中创建一个名为S99dbora的符号链接。当系统进入运行级别5时,S99dbora脚本将被执行,以启动Oracle数据库。同样,“S”表示“start”(启动),而“99”表示执行顺序(数字越大越晚执行)。

这样,在不同的运行级别下,系统将自动处理Oracle数据库的启动和关闭操作。

(全文完)

参考

https://learn.microsoft.com/en-us/azure/virtual-machines/workloads/oracle/oracle-database-quick-create

Last modification:May 2, 2023
If you think my article is useful to you, please feel free to appreciate