云计算百科
云计算领域专业知识百科平台

宝塔服务器: docker安装 oracle11g镜像

我是用win本地docker先将 oracle11g镜像下载好 然后导出上传到 宝塔面板上面的 

具体命令: 

下载镜像:大概6.8个G左右

docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

然后导出镜像: 

docker save -o D:\\www\\oracle11g.tar registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

等导出完成后 再将该文件上传到 宝塔服务器某个路径地址

上传成功以后 使用SSH命令 将本地镜像导入到 docker里面

docker load -i /data/docker/oracle11g/oracle_11g_image.tar

面板上面也有导入本地镜像功能,但是我使用的时候导入失败了..  

导入成功以后 使用 docker images 命令查看本地镜像列表

下一步 使用命令将容器启动:

docker run \\
–privileged \\
-d \\
–restart=always \\
-v /data/oracle:/data/oracle \\
-p 1521:1521 \\
–name oracle11g \\
-e ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2 \\
-e ORACLE_SID=helowin \\
-e PATH=/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin \\
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

注意: 确保宿主机上面的 /data/oracle 这个目录存在

1. docker run 作用:这是启动一个新的 Docker 容器的命令。
2. –privileged 作用:授予容器几乎所有的主机权限。这允许容器内的进程执行通常需要超级用户权限的操
作,如加载内核模块、更改网络配置等。 注意事项:虽然有时是必要的,但应谨慎使用此选项,因为它
可能会带来安全风险。
3. -d 作用:以分离模式(后台)运行容器。这意味着容器会在后台运行,而不会占用当前终端。
等效选项:–detach
4. –restart=always 作用:设置容器的重启策略为始终重启。无论容器因什么原因停止(包括手动停止),
Docker 都会尝试重新启动它。
其他选项:
no:不自动重启容器。
on-failure:仅在容器退出状态码表示失败时重启。
unless-stopped:总是重启容器,除非容器被手动停止。
5. -v /data/oracle:/data/oracle 作用:将主机上的 /data/oracle 目录挂载到容器内
的 /data/oracle 目录。这样可以实现数据持久化,即使容器停止或删除,数据仍然保留在主机上。
等效选项:–volume
格式:host_path:container_path[:options]
6. -p 1521:1521 作用:将主机的 1521 端口映射到容器的 1521 端口。这使得你可以通过主机的 IP 地
址和端口 1521 访问容器内的 Oracle 数据库服务。
等效选项:–publish
格式:host_port:container_port
7. –name oracle11g 作用:为容器指定一个名称 oracle11g。这使得你可以通过这个名称而不是容器 ID
来引用容器。
等效选项:无
8. registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 作用:指定要使用的镜像。这里是阿里
云容器镜像服务中的 helowin/oracle_11g 镜像。
格式:repository/image_name:tag(如果省略标签,默认使用 latest)
总结:
这条命令的作用是启动一个名为 oracle11g 的 Docker 容器,使用来自阿里云的 helowin/oracle_11g 镜像

完事儿 下一步 直接进入到 oracle容器里面   这一步很关键, 之前看别的文章是 docker exec -it oracle11g bash这样进入的,会有一些问题  下面直接使用 root来进入 权限大一点

docker exec -it -u root oracle11g bash

 修改环境变量: (不可以省略  也创建了吧)

vi /etc/profile   

export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2 export ORACLE_SID=helowin export PATH=$ORACLE_HOME/bin:$PATH

保存后使配置文件生效:

source /etc/profile

设置权限: 

# 进入容器内部
docker exec -it -u root oracle11g bash

# 检查现有用户和组
id oracle

输出-> uid=500(oracle) gid=500(oinstall) groups=500(oinstall),501(dba),502(oper)
oracle 用户的 UID 是 500。
dba 组的 GID 是 501。

# 在主机上执行
chown -R 500:501 /data/oracle
chmod -R 750 /data/oracle
或者,如果您更喜欢使用用户名和组名:

# 在主机上执行
chown -R oracle:dba /data/oracle
chmod -R 750 /data/oracle
确保更改已正确应用:

ls -l /data/oracle
您应该看到类似以下的输出:

total 8
drwxr-x— 2 oracle dba 4096 Dec 21 09:36 archivelog
drwxr-x— 3 oracle dba 4096 Dec 23 14:12 data

注意:为了以防万一 导致挂载不成功  我是在 宿主机服务器, 以及容器里面 以及容器里面的 su oracle用户上  都设置了一遍 chown -R 500:501 /data/oracle                                              chmod -R 750 /data/oracle

😒😒😒😒😒😒😓😓😓😭😭😭😭这个玩意儿 折腾了我一下午

这一步很重要啊,, 错误的话导致容器重启后 无法挂载本地导致数据库文件丢失  我就遇到这个问题

创建连接命令:

ln -s $ORACLE_HOME/bin/sqlplus /usr/bin

 下面是修改默认用户密码:

切换用户,并登录         命令: su – oracle           命令: sqlplus /nolog                  SQL> conn /as sysdba   修改sys system用户的密码(密码个人自定义,这里用root代表)           SQL> alter user system identified by root;                   SQL> alter user sys identified by root;           SQL> create user admin identified by root;        –创建一个管理账号,自定义账号和密码           SQL> grant connect,resource,dba to admin;     –授权给管理账号    

#关闭数据库 SQL> shutdown immediate; #开启mount状态 SQL> startup mount; # 开启归档日志,出现Database altered. 表示开启成功 SQL> alter database archivelog; #查看归档状态 SQL> SELECT log_mode FROM v$database; #打开数据库,一定要执行 SQL> alter database open;

确保归档日志文件被写入到预期的位置。你可以使用以下查询来查看归档日志的目的地:

SQL> SHOW PARAMETER log_archive_dest_1;

你可以使用以下查询来查看归档日志的状态和信息:

SQL> SELECT * FROM v$archived_log;

为了防止归档日志文件占用过多磁盘空间,你可以配置自动删除旧的归档日志文件。例如,设置保留天数:

ALTER SYSTEM SET log_archive_max_processes = 4 SCOPE=BOTH; 

ALTER SYSTEM SET log_archive_min_succeed_dest = 1 SCOPE=BOTH; 

ALTER SYSTEM SET db_recovery_file_dest_size = 10G SCOPE=BOTH; 

ALTER SYSTEM SET db_recovery_file_dest = '/data/oracle/archivelog' SCOPE=BOTH;

要确保 /data/oracle/archivelog  oracle容器里面的目录存在

然后重启数据:

SQL> shutdown immediate;  —-  先停止 Database closed. Database dismounted. ORACLE instance shut down.

SQL> startup;   —-再启动 ORACLE instance started.

Total System Global Area 1603411968 bytes Fixed Size                  2213776 bytes Variable Size             419432560 bytes Database Buffers         1174405120 bytes Redo Buffers                7360512 bytes Database mounted. Database opened.

SQL> show parameter recovery   —查看设置是否生效

NAME                                 TYPE        VALUE ———————————— ———– —————————— db_recovery_file_dest                string      /data/oracle/archivelog db_recovery_file_dest_size           big integer 10G recovery_parallelism                 integer     0 SQL> 

2025-03-05 回来修改  :以上归档设置的根据空间来自动清理的,导致清理不及时 会造成数据库无法连接情况

解决此错误:需要建立根据时间自动清理的脚本文件  参考以下图片内容

下面附上一些建表相关语句(参考用)

oracle 创建表空间 授权用户等命令 创建表空间 注意:(/data/oracle 表空间一定要在这个下面 因为此目录挂载到了宿主机 所以不在这儿会引起错误的 很麻烦) CREATE TABLESPACE tablespace_my DATAFILE '/data/oracle/data/tablespace_my.dbf' SIZE 512m AUTOEXTEND ON NEXT 32m MAXSIZE 2048m EXTENT MANAGEMENT LOCAL;

创建用户 CREATE USER root IDENTIFIED BY 123456 DEFAULT TABLESPACE tablespace_my TEMPORARY TABLESPACE temp PROFILE DEFAULT;

授权 GRANT CONNECT, RESOURCE TO root; GRANT CREATE SESSION TO root; GRANT CREATE TABLE TO root; GRANT CREATE VIEW TO root; 如果需要授予用户DBA权限(请谨慎操作,因为这会赋予用户广泛的数据库管理权限): GRANT DBA TO root;

创建表 CREATE TABLE wms_question (   id NUMBER(19,0) NOT NULL,   no NUMBER(10,0) NOT NULL,   title VARCHAR2(255 CHAR) NOT NULL,   txt CLOB,   status CHAR(1 CHAR) NOT NULL,   del_flag CHAR(1 CHAR) DEFAULT '0' NOT NULL,   remark VARCHAR2(200 CHAR) ) TABLESPACE tablespace_my

设置主键自增 ALTER TABLE wms_question ADD CONSTRAINT pk_wms_question PRIMARY KEY (id);

创建序列 CREATE SEQUENCE wms_question_seq START WITH 1 INCREMENT BY 1;

创建触发器 查询序列每次自增1 CREATE OR REPLACE TRIGGER wms_question_trg BEFORE INSERT ON wms_question FOR EACH ROW BEGIN   SELECT wms_question_seq.NEXTVAL INTO :new.id FROM dual; END;

下面是创建好之后的一些操作记录(—————可忽略)

[root@392b7517da3f oracle]# ls -l /usr/bin/sqlplus
lrwxrwxrwx 1 root root 59 Dec 21 09:19 /usr/bin/sqlplus -> /home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/sqlplus
[root@392b7517da3f oracle]#
[root@392b7517da3f oracle]#
[root@392b7517da3f oracle]#
[root@392b7517da3f oracle]#
[root@392b7517da3f oracle]#
[root@392b7517da3f oracle]# su oracle
[oracle@392b7517da3f ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.1.0 Production on Sat Dec 21 09:29:06 2024

Copyright (c) 1982, 2009, Oracle. All rights reserved.

SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> conn /as sysdba
Connected.
SQL>
SQL>
SQL>
SQL> alter user system identified by root;

User altered.

SQL> alter user sys identified by root;

User altered.

SQL> create user admin identified by root;

User created.

SQL> grant connect,resource,dba to admin;

Grant succeeded.

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 1603411968 bytes
Fixed Size 2213776 bytes
Variable Size 402655344 bytes
Database Buffers 1191182336 bytes
Redo Buffers 7360512 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> SELECT log_mode FROM v$database;

LOG_MODE
————
ARCHIVELOG

SQL> alter database open;

Database altered.

SQL> lsnrctl status
SP2-0734: unknown command beginning "lsnrctl st…" – rest of line ignored.
SQL> ALTER SYSTEM SET log_archive_max_processes = 4 SCOPE=BOTH;

System altered.

SQL> ALTER SYSTEM SET log_archive_min_succeed_dest = 1 SCOPE=BOTH;

System altered.

SQL> ALTER SYSTEM SET db_recovery_file_dest_size = 10G SCOPE=BOTH;

System altered.

SQL> ALTER SYSTEM SET db_recovery_file_dest = '/path/to/archivelog' SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest = '/path/to/archivelog' SCOPE=BOTH
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-01261: Parameter db_recovery_file_dest destination string cannot be
translated
ORA-01262: Stat failed on a file destination directory
Linux-x86_64 Error: 2: No such file or directory

SQL> ALTER SYSTEM SET db_recovery_file_dest = '/data/oracle/archivelog' SCOPE=BOTH;
ALTER SYSTEM SET db_recovery_file_dest = '/data/oracle/archivelog' SCOPE=BOTH
*
ERROR at line 1:
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-01261: Parameter db_recovery_file_dest destination string cannot be
translated
ORA-01262: Stat failed on a file destination directory
Linux-x86_64 Error: 2: No such file or directory

SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> cd /
SP2-0042: unknown command "cd /" – rest of line ignored.
SQL>
SQL>
SQL>
SQL>
SQL>

SQL> SQL>
SQL>
SQL>

SQL> SQL>
SQL>
SQL>

SQL> SQL>
SQL>
SQL>
SQL>
SQL>
SQL>

SQL> SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL>
SQL> ALTER SYSTEM SET db_recovery_file_dest = '/data/oracle/archivelog' SCOPE=BOTH;

System altered.

SQL>
SQL>
SQL>
SQL> SHOW PARAMETER db_recovery_file_dest

NAME TYPE VALUE
———————————— ———– ——————————
db_recovery_file_dest string /data/oracle/archivelog
db_recovery_file_dest_size big integer 10G

如果重启之后导致数据库监听失败等原因 参考以下操作

服务器docker 进入oracle
检查环境变量 echo $ORACLE_HOME
echo $ORACLE_SID
echo $PATH

容器:/home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin
listener.ora 监听文件内容————— 远程链接时候可能需要
# listener.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/listener.ora
# Generated by Oracle configuration tools.

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = )(PORT = 1521))
(SERVICE_NAME = helowin)
)
)
ADR_BASE_LISTENER = /home/oracle/app/oracle

tnsnames.ora 文件内容———————–
# tnsnames.ora Network Configuration File: /home/oracle/app/oracle/product/11.2.0/dbhome_2/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_HELOWIN =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

HELOWIN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = helowin)
)
)

~
~
一,oracle容器命令 : docker exec -it -u root oracle11g bash 以root用户身份进入bash
二,启动挂载 : startup mount; "当你执行 STARTUP MOUNT; 命令时,Oracle 会完成以下操作:启动实例:初始化 SGA 并启动必要的后台进程。读取初始化参数文件:加载 init.ora 或 spfile 中的参数。挂载数据库:读取控制文件,并验证数据库的物理结构(如数据文件和重做日志文件的位置)。但是,它不会打开这些文件,因此用户还不能访问数据。"
三,su oracle,
sqlplus / as sysdba 命令进入
(
1. 确认所有控制文件
SQL> SHOW PARAMETER CONTROL_FILES;
2. 选择最新的控制文件"根据您的错误信息,/home/oracle/app/oracle/oradata/helowin/control01.ctl 版本为 1963,而 /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl 版本为 841。显然,control01.ctl 是较新的版本。"
3. 复制最新的控制文件 "为了确保一致性,您可以将最新的控制文件复制到其他位置。假设 control01.ctl 是最新的版本,可以将其复制到 control02.ctl 的位置:"
cp /home/oracle/app/oracle/oradata/helowin/control01.ctl /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl
4. 重新启动并挂载数据库
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
# 开启归档日志,出现Database altered. 表示开启成功
SQL> alter database archivelog;
#查看归档状态
SQL> SELECT log_mode FROM v$database;
#打开数据库,一定要执行
SQL> alter database open;
)

赞(0)
未经允许不得转载:网硕互联帮助中心 » 宝塔服务器: docker安装 oracle11g镜像
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!