今天说一下Oracle Database 21c 安装和卸载,我折腾了7天,差不读学会了,个人用的是windows10系统
安装
注册账号
1.如果没有oracle官网账户,先去注册一个账号
邮件地址和密码记住,其他的随便填
2.从官网下载安装包
文件比较大,需要稍微等一会,下载好的文件是这样
开始安装
1.关闭你的安全软件,比如腾讯管家,360,火绒之类的,然后关闭防火墙
其实我个人感觉关不关不影响什么,但是为了确保一次性安装成功,还是关掉,毕竟卸载是真的费劲
2.建立一个空文件夹,命名为oracle,文件夹路径不要有空格,不要有中文,里面再分别建立两个文件夹,命名为base和home ,我的路径是D:\software\Oracle,(文件里的db.rsp先不用管,后面会看到)
3.把之前从官网下载好的压缩包解压到home文件夹,注意不要搞错了,东西比较多,需要一些时间,解压后是这样的
4.点击最后的setup.exe程序,选择安装
5.点击setup.exe程序,会出现如下界面
可能刚开始只出现CMD命令界面,一片黑,什么都没有,你会以为安装包错误或者哪里有问题,这是正常现象,稍等一会就好了,出现如下界面
我选择创建并配置单实例数据库,这么做可以把要装的东西全部装好,如果你选择仅安装软件,后面还要装其他东西,也比较麻烦,可以参考这个视频
点击下一步后,出现如下界面,选择桌面类
点击下一步,出现如下界面
选择创建新的windows用户(我是盗用别人的图,所以光标停留在第一个上面),点击下一步之后,出现如下界面
注意基目录是base文件夹,别搞错了,数据库文件位置不用管。然后设置密码,和之前的密码可以一样.也可以不一样, 当你点击下一步的时候,注意这里可能会出现两个提示
提示
1.
2. 提示你安装软件需要多少MB的内存,没关系,继续点击下一步就好了,这两个只是建议罢了
继续点击下一步,出现如下界面
可以点击保存响应文件,放在一个安全位置,然后点击安装
大概需要20到30分钟左右,时间比较长。完成之后点击确定即可
环境配置
配置path变量
1.选择电脑,右键点击打开属性。
2.选择高级系统设置
3.选择环境变量
4.在“系统变量”中找到名为“Path”的变量,并双击打开
5.点击“新建”按钮,添加Oracle可执行文件的路径(这里的可执行文件的路径指的是之前home文件夹中的bin文件路径,不要搞错了),添加好以后点击确定
配置“ORACLE_HOME”变量
新建一个名为“ORACLE_HOME”的系统变量(注意是系统变量,不是刚才的path变量),其值为Oracle数据库的安装目录路径(这里指的是home文件夹路径)。
ORACLE_HOME
ORACLE_HOME的定义
ORACLE_HOME:是Oracle数据库软件安装目录的环境变量,它指向包含Oracle数据库实例所需的所有可执行文件和库文件的目录
一致性要求
配置文件中的ORACLE_HOME:在Oracle的配置文件中(如listener.ora、tnsnames.ora等),当需要指定Oracle软件的安装位置时,应使用与环境变量中设置的ORACLE_HOME相一致的路径。
环境变量中的ORACLE_HOME:环境变量是操作系统级别的设置,用于告诉操作系统和其他程序Oracle软件的位置。在启动数据库实例、运行Oracle工具或脚本时,这些程序会查找环境变量中的ORACLE_HOME来确定Oracle软件的安装目录。
为什么需要一致性
避免错误:如果配置文件中的ORACLE_HOME与环境变量不一致,可能会导致数据库无法正确启动、监听器无法监听连接请求、客户端无法连接到数据库等问题。
简化管理:保持一致性可以简化数据库的管理和维护工作,因为管理员不需要记住多个不同的路径,也不必担心路径不一致带来的问题。
为了正确配置ORACLE_HOME
,你应该:
1.确定你的Oracle数据库软件的安装位置。
2.在该位置中找到包含bin
、lib
、network
等子目录的顶级目录。(这个非常重要,有的人把两个文件夹安装路径搞错了)
3.将这个顶级目录的路径设置为ORACLE_HOME
环境变量的值。
配置TNS_ADMIN
作用
一.指定TNS配置文件目录:
1.TNS_ADMIN是一个环境变量,用于指定存储Oracle网络服务(TNS)配置文件的目录。TNS配置文件包含了数据库实例的连接信息,如数据库名称、服务器地址、端口号等。
2.通过设置TNS_ADMIN,数据库管理员可以指定一个中心位置来存储这些配置文件,便于统一管理和维护。
二.简化配置文件管理:
1.在多个数据库实例之间共享TNS配置文件,使得不同的应用程序和服务可以使用相同的连接信息。
2.当需要更新配置文件时,只需在中心位置进行更改,而无需在每个应用程序或服务中单独进行。
三.支持服务器迁移和重命名:
在服务器迁移或数据库实例重命名时,通过更新中心位置的TNS配置文件,可以确保所有应用程序和服务能够继续正确连接到数据库。
步骤
这的变量值指的是base文件夹下的admin文件路径
这里有两个重要文件说一下
下面关于listener.ora,tnsnames.ora的内容只是了解一下,安装过程中无需修改,安装好如果测试成功也无需修改
listener.ora
1.SID_NAME可以是任何符合Oracle命名规则的字符串。通常,它应该简洁明了,能够反映数据库实例的用途或名称
2.ORACLE_HOME:指定Oracle软件安装的目录路径。
3.PROGRAM
在Oracle数据库中,PROGRAM一词通常不是直接用于listener.ora配置文件中的术语。如果你是在Oracle的Scheduler环境中遇到PROGRAM对象,那么它是指一个由数据库管理员(DBA)定义的对象,用于执行特定的功能或操作。PROGRAM对象在Oracle的DBMS_SCHEDULER包中创建和管理。
以下是如何填写(或定义)Oracle Scheduler中的PROGRAM对象的一个清晰、分点表示和归纳的指南:
1. 确定PROGRAM的目的和类型
目的:首先明确PROGRAM需要执行什么任务,比如执行一个PL/SQL代码块、调用一个存储过程、执行一个外部命令等。
类型:根据目的,选择PROGRAM的类型(PLSQL_BLOCK、STORED_PROCEDURE、EXECUTABLE)。
2. 使用DBMS_SCHEDULER.CREATE_PROGRAM过程创建PROGRAM
PROGRAM_NAME:为PROGRAM对象指定一个唯一的名称。
PROGRAM_TYPE:根据第1步中确定的类型,填写PLSQL_BLOCK、 STORED_PROCEDURE或EXECUTABLE。
PROGRAM_ACTION:
如果PROGRAM_TYPE是PLSQL_BLOCK,则填写要执行的PL/SQL代码块。
如果PROGRAM_TYPE是STORED_PROCEDURE,则填写要调用的存储过程的名称。
如果PROGRAM_TYPE是EXECUTABLE,则填写要执行的外部命令及其路径。
其他可选参数:
NUMBER_OF_ARGUMENTS:如果PROGRAM需要参数,则指定参数的数量(默认为0)。
ENABLED:指定是否将PROGRAM置为有效状态(默认为FALSE)。
COMMENTS:为PROGRAM添加注释信息。
4.在 ENVS 中,它应该指向与 ORACLE_HOME 相同的路径下的 bin 目录中的 oraclr.dll 文件。
在修改listener.ora文件后,需要重启Oracle监听器以使更改生效。可以使用lsnrctl stop命令停止监听器,然后使用lsnrctl start命令启动监听器。或者使用 lsnrctl reload 命令重新加载监听器配置,并使用 lsnrctl status 命令检查监听器的状态。
直接把命令复制到CMD界面就行
问题
一.lsnrctl reload显示无监听程序怎么办
当 lsnrctl reload 显示“无监听程序”时,这通常意味着 Oracle 的监听器(Listener)服务当前没有运行,或者无法正确识别到监听器的配置。为了解决这个问题,你可以按照以下步骤进行排查和解决:
1. 检查监听器服务状态
首先,确认 Oracle 监听器服务是否正在运行。你可以通过以下命令来检查监听器的状态:
lsnrctl status
如果输出显示监听器没有运行,那么你需要启动监听器服务。
2. 启动监听器服务
如果监听器服务没有运行,你可以使用以下命令来启动它:
lsnrctl start
或者,你也可以在 Windows 服务管理器中手动启动 Oracle 的监听器服务,服务名称通常类似于 OracleOraDb<version>_home<n>TNSListener(例如,OracleOraDb11g_home1TNSListener)。
3. 检查监听器配置文件
如果监听器已经启动,但 lsnrctl reload 仍然显示“无监听程序”,那么可能是监听器配置文件(通常是 listener.ora)存在问题。检查该文件是否位于正确的位置(通常在 $ORACLE_HOME/network/admin 目录下),并且配置是否正确。
4. 检查环境变量
确保 ORACLE_HOME 环境变量设置正确,指向包含 bin、network/admin 等目录的 Oracle 主目录。
5. 查看监听器日志文件
如果监听器无法启动或运行,查看监听器的日志文件(如 listener.log)可能会提供有用的错误信息。日志文件的位置通常在 $ORACLE_HOME/diag/tnslsnr/<hostname>/listener/trace 目录下。
6. 检查网络配置和防火墙设置
确保没有网络配置或防火墙设置阻止监听器端口(默认为 1521)的通信。
7. 重新启动数据库和监听器
有时候,重新启动数据库和监听器可以解决一些看似复杂的问题。首先,使用 SQL*Plus 或其他数据库管理工具以管理员身份连接到数据库,并执行以下命令来关闭和重新启动数据库:
shutdown immediate;
startup;
然后,重新启动监听器服务。
8. 检查 Oracle 版本和补丁
确保你的 Oracle 数据库和监听器软件是最新的,或者至少没有已知的与监听器相关的严重错误。
二.lsnrctl start 以后显示TNS-12560: TNS: 协议适配器错误
遇到 TNS-12560: TNS: 协议适配器错误 在尝试启动 Oracle 监听器(Listener)时,通常表示监听器无法找到或加载适当的网络协议适配器。这个问题可能由多种原因引起,以下是一些可能的解决步骤
1. 检查监听器服务状态
首先,确认 Oracle 监听器服务是否已经在服务列表中,并且其状态为“已启动”。你可以通过 Windows 的服务管理器(services.msc)来检查这一点
2. 检查 Oracle 数据库服务
确保 Oracle 数据库服务也已启动。监听器需要数据库服务来响应连接请求。同样,在服务管理器中检查 Oracle 数据库服务的状态。
3. 检查监听器配置文件
监听器的配置文件(listener.ora)通常位于 $ORACLE_HOME/network/admin 目录下。检查该文件中的配置是否正确,特别是监听器的地址和端口号。
确保 HOST 和 PORT 的值设置正确。如果 HOST 设置为 localhost 但你的数据库服务器有特定的 IP 地址,你可能需要将其更改为该 IP 地址。
4. 检查环境变量
确保 ORACLE_HOME 环境变量已正确设置,并指向 Oracle 数据库的安装目录。同时,确保 PATH 环境变量包含 $ORACLE_HOME/bin 目录。
5. 检查网络连接
使用 ping 命令或其他网络工具来验证数据库服务器是否可以从你的客户端机器访问。如果无法访问,可能是网络连接问题。
6. 检查防火墙和安全组设置
确保没有防火墙或安全组规则阻止监听器端口(默认为 1521)的通信。你可能需要在防火墙设置中添加入站和出站规则来允许此端口的通信。
7. 重启监听器和数据库服务
有时候,重启监听器和数据库服务可以解决临时的连接问题。你可以使用 lsnrctl stop 命令停止监听器,然后使用 lsnrctl start 命令重新启动它。同时,你也可以重启 Oracle 数据库服务。
8. 查看监听器日志
监听器的日志文件(如 listener.log)通常包含有关连接问题的详细信息。检查该文件以获取更多关于 TNS-12560 错误的线索。
9. 检查注册表(仅限 Windows)
在某些情况下,Windows 注册表中的 Oracle 相关条目可能不正确。你可以检查注册表中的 HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE 键,确保所有相关的 Oracle 配置都正确无误。
tnsnames.ora
host
两个文件中都出现了host,HOST参数的填写是一个关键的配置步骤,它决定了Oracle监听器将监听哪些网络地址上的连接请求。关于HOST参数应该填写电脑设备名称(主机名)还是其他值,以下是一个清晰、分点表示和归纳的回答:
一、HOST参数的作用
指定监听地址:HOST参数用于指定Oracle监听器应该监听哪些网络地址上的连接请求。
影响监听范围:该参数的设置直接影响到哪些客户端可以成功连接到Oracle数据库服务器。
二、填写选项
1. 填写电脑设备名称(主机名)
优点:
灵活性:如果主机名与多个IP地址相关联(例如,通过DNS或/etc/hosts文件配置),监听器将能够监听所有这些IP地址上的连接请求。
易于管理:在主机名发生变化时(如更换网络接口卡或重新配置网络),无需更新listener.ora文件,因为监听器会根据新的主机名解析到相应的IP地址。
缺点:
依赖DNS或/etc/hosts:如果DNS或/etc/hosts文件配置不正确,监听器可能无法正确解析主机名,导致连接问题。
2. 填写具体的IP地址
优点:
明确性:直接指定IP地址可以确保监听器只在该IP地址上监听连接请求,避免了潜在的地址冲突或解析问题。
适合静态环境:在IP地址不会频繁变化的环境中,使用IP地址作为HOST参数可以简化配置。
缺点:
灵活性差:如果主机的IP地址发生变化(例如,更换网络接口卡或迁移到新的网络环境),需要手动更新listener.ora文件中的HOST参数。
多IP地址问题:如果主机有多个IP地址,并且希望监听器在所有IP地址上监听连接请求,则需要为每个IP地址单独配置一个监听地址条目。
三、推荐做法
默认使用主机名:在大多数情况下,推荐使用主机名作为HOST参数的值。这样做可以提供更好的灵活性和适应性,尤其是在主机有多个IP地址或IP地址可能发生变化的情况下。
确保名称解析正确:同时,需要确保DNS或/etc/hosts文件中的名称解析配置正确无误,以避免因名称解析问题导致的连接失败。
特殊场景考虑:在特定场景下(如需要精确控制监听地址或处于高度静态的网络环境中),也可以考虑使用具体的IP地址作为HOST参数的值。
配置NLS_LANG
这个可以配置,也可以不用配置,我个人没有配置
作用
在Oracle数据库中,配置NLS_LANG环境变量以指定字符集和地域信息是一个重要的步骤,它确保了客户端应用程序与Oracle数据库之间的字符数据能够正确转换和显示。NLS_LANG环境变量由三个部分组成:语言(LANGUAGE)、地域(TERRITORY)和字符集(CHARSET),格式为<Language>_<Territory>.<Charset>
1.LANGUAGE:指定Oracle数据库反馈的消息(如异常信息、提示信息等)所使用的语言,以及字符数据的排列顺序等。例如,简体中文为SIMPLIFIED CHINESE,美式英文为AMERICAN。
2.TERRITORY:指定默认的日期、货币以及数字格式。例如,中国为CHINA,美国为AMERICA。
3.CHARSET:指定客户端应用程序所使用的字符集。Oracle支持的每个字符集都有唯一的缩写,如ZHS16GBK(GBK)、AL32UTF8(UTF-8)等。
步骤
1.新建系统变量:在“系统变量”区域,点击“新建”按钮
2.输入变量名和变量值:
一.变量名:输入NLS_LANG。
二.变量值:根据你的需要设置字符集和地域信息,例如SIMPLIFIED CHINESE_CHINA.ZHS16GBK。
3..点击“确定”:完成输入后,点击“确定”按钮保存设置,并可能需要重启计算机以使更改生效
注意事项
1.与数据库字符集匹配:尽量确保客户端的NLS_LANG设置与Oracle数据库的字符集设置相匹配,以避免字符转换错误或乱码问题。
2.查看数据库字符集:可以通过查询NLS_DATABASE_PARAMETERS视图(SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET';)来查看数据库的字符集设置。
3.测试设置:在更改NLS_LANG设置后,建议进行测试以确保设置正确无误。
因为我个人没有配置NLS_LANG,所以我就不演示了
验证环境变量配置
完成环境变量配置后,你可以通过以下方式验证配置是否成功:
1.打开命令提示符:按下Win + R键,输入cmd并回车,打开命令提示符窗口。
2.输入命令:在命令提示符窗口中,输入以下命令来验证环境变量是否设置正确
echo %ORACLE_HOME%
echo %PATH%
echo %TNS_ADMIN%
echo %NLS_LANG%
3.查看输出:如果命令提示符窗口显示了正确的路径或值,说明环境变量配置成功。
我的echo %NLS_LANG%没有配置,所以不显示路径
验证软件
安装好以后进行验证
一.CMD界面验证
sqlplus system/你设置的数据库密码
或者用下面这个命令,然后再输入密码,这种方式更安全
sqlplus system
二.测试连接
用户名密码不要搞错了
连接成功
三.测试sql语句
1.查询数据库中所有用户(需要DBA权限)
SELECT * FROM dba_users;
2.查看当前用户信息
SELECT * FROM user_users;
3.查看当前用户的缺省表空间
SELECT username, default_tablespace FROM user_users;
4.查看当前用户会话的权限
SELECT * FROM session_privs;
5. 查看用户下所有的表
SELECT * FROM user_tables;
sql语句测试完成以后,把电脑重新启动一遍,再打开数据库试试看,是否正常 ,但是重启电脑并不代表重启数据库,这两个概念不一样
可能出现的错误
1.ORA-12541: 无法连接到数据库。%s 中没有监听程序。 (CONNECTION_ID=zEl67SYAQk+dffNiS3TfOg==)
当时我没有配置TNS_ADMIN环境变量,然后一直报错,我还不知道问题出在哪里
解决办法
1. 检查监听器状态
在Oracle数据库服务器上,打开命令行终端。
运行命令lsnrctl status来检查监听器的状态。
如果监听器未运行,使用命令lsnrctl start来启动监听器。
2. 检查监听器配置文件
找到监听器配置文件listener.ora,它通常位于ORACLE_HOME/network/admin目录下。
使用文本编辑器打开listener.ora文件,检查配置文件中的监听程序设置是否正确。
确保监听程序的名称与服务名或SID匹配。
确保监听程序的端口号与数据库实例的监听端口匹配(默认通常是1521)。
确保监听程序的协议(通常是TCP)与数据库实例的网络协议匹配。
3. 检查网络连接
使用ping命令检查客户端和服务器之间的网络连通性。
确保客户端和服务器之间的网络配置(如IP地址、子网掩码、网关等)正确无误。
4. 检查防火墙和安全组设置
检查服务器和客户端的防火墙设置,确保Oracle使用的端口(默认为1521)没有被阻止。
如果使用云服务,检查安全组设置,确保允许Oracle端口的入站和出站连接。
5. 检查Oracle客户端配置
检查客户端的tnsnames.ora文件配置是否正确。
确保连接描述符中的HOST、PORT和SERVICE_NAME或SID与数据库服务器的实际配置相匹配。
如果修改了tnsnames.ora文件,需要重启Oracle客户端以应用更改。
6. 验证服务名或SID
确认连接字符串中指定的服务名或SID与数据库实例的实际名称相匹配。
可以使用show parameter service_name或show parameter spfile命令查询数据库的服务名。
7. 检查权限问题
确认用户是否有足够的权限连接到数据库。
如果用户权限不足,需要联系数据库管理员获取相应权限。
8. 查看Oracle日志文件
检查Oracle的日志文件(如alert.log),了解监听器或数据库实例的详细错误信息。
日志文件中可能包含有关连接失败的更多详细信息,有助于进一步诊断问题。
卸载
1.数据备份
在进行任何卸载操作之前,务必先进行数据备份。尽管卸载过程中不会直接删除数据文件,但出于谨慎的考虑,最好还是提前做好数据备份工作。
2.停止数据库服务
在任务管理器中,点击服务,找到以Oracle开头的服务,右键停止即可,或者通过执行以下命令来停止数据库服务:$ sqlplus / as sysdba,然后输入SQL> shutdown immediate;
停止服务
1.用windows图标键(win键)+R键打开运行窗口,输入service.msc,运行服务
2.打开服务找到oracle相关的,全部右键点击以后,选择停止
把上面5个服务全部停掉
删除相关注册表
用windows图标键(win键)+R键打开运行窗口,输入regedit,打开注册表编辑器,删除以下路径下的Oracle相关项
一.删除HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE下节点
二.删除计算机\HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI下所有oracle内容
三.删除计算机\HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services下所有oracle内容
注意别把ControlSet001和CurrentControlSet搞错了
这个.NET Data Provider for Oracle有可能删除不了,我提高用户权限,甚至用bat命令都不行,大家不用管,这个不删除不影响最终结果
还有一部分
把这5个全部删除
四.删除计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services下所有oracle内容
注意别把ControlSet001和CurrentControlSet搞错了
这个.NET Data Provider for Oracle有可能也删除不了,大家不用管,这个不删除不影响最终结果
还有一部分
把这5个全部删除
删除计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application下所有oracle内容
软件删除注册表
到这里,可以手动删除的注册表已经全部删除,现在需要用软件了,我用的是RegistryFinder
https://wwf.lanzn.com/b00b3tbmjc
密码:dy2p
从这里下载 好以后,打开软件
点击搜索,输入oracle
点击查找
无法删除注册表
1.可以参考这个帖子
暴力解决注册表删不掉的问题_给了权限也删除不了的注册表-CSDN博客
2.用bat命令
新建一个txt文件,把下面这段代码复制粘贴进去,然后保存重新修改后缀为bat,再次点击运行就可以
@echo off
echo WARNING: This script will delete a registry key. Be sure you know what you are doing!
pause
REM Set the registry key path you want to delete
set "REG_KEY=HKEY_CURRENT_USER\Software\SomeApp\UnwantedKey"
REM Use reg delete command to delete the registry key
reg delete "%REG_KEY%" /f
if %errorlevel% equ 0 (
echo Registry key deleted successfully.
) else (
echo Failed to delete registry key.
)
pause
set "REG_KEY=HKEY_CURRENT_USER\Software\SomeApp\UnwantedKey"
注意,这里替换成你要删除的注册表路径,要明确注册表作用再删除,否则会出事故
删除安装文件夹
1.把之前建立的home文件夹和base文件夹删除
2.删除这个目录下的所有文件夹
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Oracle - OraDB21Home1
3.删除这个这个目录下的文件
C:\ProgramData\Oracle
软件删除文件夹
用Everything这个软件搜索Oracle,然后把出现的相关文件夹全部删除,注意辨别,别把自己和oracle相关的学习资料也干掉
下载链接:下载 - voidtools
删除环境变量
删除之前设置的环境变量.在“系统变量”中找到名为“ORACLE_HOME”的并删除
在“系统变量”中找到名为“Path”的变量,删除和oracle相关的
删除USER
在这个路径下面有个你安装数据库时候设置的用户名,记得删除
注意:有时候删除这个用户名会提示你电脑有蓝屏或者崩溃的风险,那就不要删除,把电脑重新启动以后再删除
以上就是Oracle Database 21c 安装和卸载过程,欢迎指正