oracle

个人理解

监听器先“开门”
在 127.0.0.1:1521 或 0.0.0.0:1521 上启动并监听,等待任何指向它的请求。同时读取静态配置listener.ora

lsnrctl status               #查看
lsnrctl start [监听器名称]    # 启动
lsnrctl stop [监听器名称]     # 停止
lsnrctl reload [监听器名称]   # 重新加载配置(不中断服务)
监听器 → 饭店的大门和前台,开门迎客。
服务(SERVICE_NAME) → 菜单上的“口味”,比如“川菜”“粤菜”。
实例(INSTANCE_NAME / SID) → 具体的一道菜,只有“已出锅(READY)”才能端上桌。
客户端请求 → 顾客进门说“我要吃川菜”,前台先看本店有没有“川菜”这个口味,再看该口味下有没有已出锅的菜。
如果该口味下没有 READY 的菜,就告诉顾客“对不起,这道菜暂时做不了”。
所以,想吃哪一种口味,必须确认那一口味下确实“有菜且已出锅(READY)”。

net Configuration Assistant 傻瓜式重装且重启

实例再“报到”
数据库实例启动后,PMON 把实例名/服务名注册到监听器(动态或静态),监听器才知道“有人可接客”。

SHOW PARAMETER local_listener
数据库实例启动后,PMON 进程就是读取 local_listener 参数里的地址(主机+端口)去向对应的监听器注册。
如果 local_listener 为空,就默认去 localhost:1521 注册。
分为两种方式:
间接:
到客户端连接文件 (`tnsnames.ora`)中查询是否存在这个**监听器名称**(**逻辑名称**),从而找到HOST和PORT
LISTENER_ORCL =  (<-----监听器名称/逻辑名称)
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  或
LISTENER_ORCL =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.101)(PORT = 1521))
  )
直接:
ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))';

只有两步都完成,客户端请求才能:
“先找到门(监听器)→ 再被领到正确房间(实例)→ 开始执行 SQL”。

快速定位tnsnames.ora

tnsping dummy    执行后大概显示目录位置

直接查看SHOW PARAMETER local_listener值

sqlplus / as sysdba
SQL> SHOW PARAMETER local_listener;

简洁流程

监听器开通道且读静态配置listener.ora,

lsnrctl status               #查看
lsnrctl start [监听器名称]    # 启动
lsnrctl stop [监听器名称]     # 停止
lsnrctl reload [监听器名称]   # 重新加载配置(不中断服务)
net Configuration Assistant 傻瓜式重装且重启

数据库启动读local_listener值动态注册

​ 间接:查文件tnsnames.ora

​ 找目录:tnsping dummy

​ 分析:tnsnames.ora,去库中把值改为监听器的名称。

​ 直接:ALTER SYSTEM SET local_listener=‘(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))’;

​ ALTER SYSTEM REGISTER;

sqlplus / as sysdba
SQL> SHOW PARAMETER local_listener;
SQL> -- 改为空值的方式,自动连接(没有成功过)
ALTER SYSTEM RESET local_listener SCOPE=BOTH;
ALTER SYSTEM RESET local_listener SCOPE=SPFILE; 
ALTER SYSTEM SET local_listener='' SCOPE=BOTH;
SQL> SHUTDOWN IMMEDIATE   -- 重启
SQL> STARTUP			  -- 重启
SQL> SHOW PARAMETER service_names;  查询注册的动态服务名
SQL> ALTER SYSTEM REGISTER;   -- 强制 PMON 立即向监听器注册

常见问题:

  1. 无法在cmd直接执行sqlplus / as sysdba
  2. 数据库或实例启动失败

卸载

备份数据
C:\Windows\System32>expdp his/his@orcl full=y directory=DATA_PUMP_DIR dumpfile=full_orcl_backup.dmp logfile=expdp_orcl.log
停服务
net stop OracleServiceORCL
启服务
net start OracleServiceORCLcmd
管理员运行
D:\app\54411\product\11.2.0\dbhome_1\deinstall\deinstall.bat
按提示一直执行

三条检查注册表是否干净的命令(以管理员身份运行)

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Oracle"
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Oracle"
sc query | find /I "oracle"

如果不干净,用“管理员”重新打开 PowerShell

# 管理员 PowerShell
# 1. 停止并删除服务
Get-Service *oracle* | Stop-Service -Force -ErrorAction SilentlyContinue
Get-Service *oracle* | % { sc.exe stop $_.Name 2>$null; sc.exe delete $_.Name 2>$null }

# 2. 删除注册表
Remove-Item -Path "HKLM:\SOFTWARE\Oracle" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "HKLM:\SOFTWARE\Wow6432Node\Oracle" -Recurse -Force -ErrorAction SilentlyContinue

# 3. 清理 PATH
$p = [Environment]::GetEnvironmentVariable('PATH','Machine')
$p = ($p -split ';' | Where-Object { $_ -notmatch 'oracle' }) -join ';'
[Environment]::SetEnvironmentVariable('PATH',$p,'Machine')

Write-Host "清理完成,请重启电脑后再运行 setup.exe"

安装

安装时候,注意修改一下安装目录,一直点点点

安装好后,开启服务

配置一个监听器

启动数据库,并修改连接地址使用直接寻址连到监听器

检查实例是否注册到监听器中

自己测试cmd能否连接

用工具是否能连接,不能连接记得改一下oci.dll 路径

顺便配置一下环境变量


无法直接连接数据库解决方案

通过挂载 Mount 但不启动的方式修改数据

set ORACLE_SID=<ORCL> #设置orcl
sqlplus / as sysdba  #直接登录数据库

如果登录失败,则需要将本机用户添加到ORA_DBA组

###### **添加用户到 `ORA_DBA`**

命令提示符(管理员权限)

```cmd
net localgroup ORA_DBA
```

检查输出中是否包含当前用户名

```
别名             ORA_DBA
注释             Oracle 数据库管理员组
 
成员
-------------------------------------------------------------------------------
54411
Administrator
```

- **如果未列出**:需手动添加用户到 `ORA_DBA` 组(见方法 2)。
- **如果已列出**:继续下一步排查。

手动添加用户到 `ORA_DBA` 组

```cmd
cmd

net localgroup ORA_DBA 54411 /add
```

**重启系统**(或注销并重新登录)使组权限生效。

ALTER SYSTEM SET db_domain='' SCOPE=SPFILE;
ALTER SYSTEM SET service_names='orcl' SCOPE=SPFILE;
ALTER SYSTEM SET local_listener='' SCOPE=SPFILE;


SHUTDOWN IMMEDIATE; #关闭数据库
STARTUP;  #启动数据库
ALTER SYSTEM REGISTER; #强制重新注册

数据库参数

SHOW PARAMETER local_listener;  -- 应为空(默认动态注册)或指向监听器
SHOW PARAMETER service_names;   -- 应包含 "orcl"
SHOW PARAMETER db_domain;       -- 检查域名(如存在需拼接)


db_name 和 db_domain 的关系
服务名组成:
若 service_names 未显式设置,Oracle默认使用 DB_NAME.DB_DOMAIN 作为服务名。
若 db_domain 为空,则服务名仅为 DB_NAME。
优先级:
service_names 的显式配置优先级高于默认组合(DB_NAME.DB_DOMAIN)。
参数 作用
local_listener LISTENER_ORCL 数据库尝试向名为 LISTENER_ORCL 的监听器注册(默认监听器通常是 LISTENER)。
service_names orcl.168.1.48 数据库注册的服务名 = service_names + db_domain(即 orcl + 168.1.48)。
db_domain 168.1.48 附加到服务名的域名,可能导致客户端解析失败。

实例无法启动解决方案

出现的问题

OR

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值