Oracle版本命名

Oracle 11G之后,发布的oracle版本有ORACLE 12C、ORACLE 18C、ORACLE 19C、ORACLE 21C,自oracle 12C之后,oracle发布的版本以年份作为发型版本号,由于2020年疫情,20C未发布。

  • ORACLE 12C R1 12.1.0.X (12.1.0.1、12.1.0.2)
  • ORACLE 12C R2 12.2.0.1 (2017年3月发布)
  • ORACLE 18C 相当于12.2.0.2版本
  • ORACLE 19C 相当于12.2.0.3版本(ORACLE19C是ORACLE12C最后一个发行版本)
  • ORACLE 21C 只支持多租户,不在支持单实例

Oracle常见名词区别

DB_NAME: ①是数据库名,长度不能超过8个字符,记录在datafile、redolog和control file中 ②在DataGuard环境中DB_NAME相同而DB_UNIQUE_NAME不同 ③在RAC环境中,各个节点的DB_NAME 都相同,但是INSTANCE_NAME不同 ④DB_NAME还在动态注册监听的时候起作用,无论是否定义了SERVICE_NAME,PMON进程都会使用DB_NAME动态注册监听

DBID: ①DBID可以看做是DB_NAME在数据库内部的表示,它是在数据库创建的时候用DB_NAME结合算法计算出来的 ②它存在于datafile和control file中,用来表示数据文件的归属,所以DBID是唯一的,对于不同的数据库,DB_NAME可以是相同的,但是DBID一定是唯一的,例如在DataGuard中,主备库的DB_NAME相同,但是DBID一定不同(看过一个很形象的例子,就是可以有同名的人,但是身份证号码一定不同)

DB_UNIQUE_NAME: ①在DataGuard中,主备库拥有相同的DB_NAME,为了区别,就必须有不同的DB_UNIQUE_NAME ②DB_UNIQUE_NAME在DG中会影响动态注册的SERVICE_NAME,即如果采用的是动态注册,则注册的SERVICE_NAME为DB_UNIQUE_NAME,但是实例还是INSTANCE_NAME,即SID

INSTANCE_NAME: ①数据库实例的名称,INSTANCE_NAME默认值是SID,一般情况下和数据库名称(DB_NAME)相同,也可不同 ②initSID.ora 和orapwSID 文件要与INSTANCE_NAME保持一致 ③INSTANCE_NAME会影响进程的名称

SID: ①是操作系统中的环境变量,和ORACLE_HOME,ORACLE_BASE用法相同 ②在操作系统中要想得到实例名,就必须使用ORACLE_SID。且ORACLE_SID必须与INSTANCE_NAME的值一致

SERVICE_NAME: ①数据库和客户端相连是使用的服务名 ②在DataGuard中,如果采用动态注册,建议在主备库使用相同的service_names ③在DataGuard中,如果采用静态注册,建议在主备库上的listener中输入相同的服务名(service_name) ④如果采监听采用了静态注册,那么SERVICE_NAME就等于Listener.ora文件中的GLOBAL_DATABASE_NAME的值

GLOBAL_DATABASE_NAME: ①GLOBAL_DATABASE_NAME 是listener配置的对外网络连接名称,可以是任意值 ②在客户端配置监听的tnsnames.ora 文件中的service_name与这个GLOBAL_DBNAME 保持一致就可以了 ③配置静态监听注册时,需要输入SID和GLOBAL_NAME

参考:https://www.jianshu.com/p/b5385fb63176

Oracle下载中心:https://www.oracle.com/database/technologies/instant-client/downloads.html

下载你服务器数据库版本对应的客户端版本程序,下载x64的Basic版本即可。可能需要账号密码,注册一个登录。

将下载之后的文件解压缩到Navicat的安装目录,比如我的目录是:

D:\Program Files\PremiumSoft\Navicat Premium 15\instantclient_11_2

在这个目录中新建:network/admin/tnsnames.ora文件,加入Oracle连接配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 测试库
mydb_oracle_test =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.111)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = mydb)
    )
  )

之后打开Navicat软件,选择:工具-》选项-》环境-》添加oci.dll文件的路径即可。

image-20210906135549860

ORA-12514:TNS:监听程序当前无法识别链接描述符中请求的服务

该问题是由于缺少监听器的SID_LIST描述项引起的,采用netca进行配置的时候经常不会生成SID_LIST,导致连接出现问题。

参考下面的配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# listener.ora +++++++++++++++++
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = hsdbcenter)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
  
# 这个一定要加上,不然连接不上
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC = (SID_NAME = bmcdb)(ORACLE_HOME = /opt/oracle/product/12.2.0.1/dbhome_1))
  )

ADR_BASE_LISTENER = /opt/oracle
# INBOUND_CONNECT_TIMEOUT_LISTENER = 180
DIAG_ADR_ENABLED_LISTENER = OFF


# tnsnames.ora ++++++++++++++++++
BMCDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hsdbcenter)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = bmcdb)
    )
  )

如何激活Navicat

navicat 15 的激活办法,如下图所示:

第一步:关闭防火墙,关闭外网。打开下面的破解软件,点击(1)Patch。找到安装目录的navicat.exe双击破解,会提示破解成功。

image-20211008164453958

第二步:在上图(2)中点击Serial Keygen中的Generate

第三步:打开Navicat,点击注册或者激活,填入上图中的16位(3)字符。

第四步:选择手动激活,在弹出框中复制Request Code到图(4)中。

第五步:点击图中(5)的Generate按钮,会生成Activation Code并会自动填入注册窗口中。激活完成。

查询占用CPU最高的SQL语句

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-- 先htop看CPU最高的进程spid,带入下面三条语句依次执行。
select sid from v$session where paddr in (select addr from v$process where spid=33329);
-- 上面查询到的 sid 带入并得到 hash_value
select sql_address,sql_hash_value from v$session where sid=1714;
-- 通过 hash_value 查询到 sql_text
select sql_text from v$sqltext where hash_value=1778913515;

-- 找到占用时间过多的SQL会话
select sid,serial#,sql_text,executions from v$sql join v$session on v$sql.sql_id=v$session.sql_id 
where cpu_time>2000000;
-- 杀死某个SQL会话
-- alter system kill session 'sid,serial#';
-- alter system kill session '589,4051';

Oracle服务器查询awr报告

有时候Oracle服务器运行负荷比较大,这个时候可以用Oracle自带的分析工具,分析并导出报告。这个工具就是AWR。

1
2
3
4
sqlplus as sysdba;
SQL> @?/rdbms/admin/awrrpt.sql

# 之后再选择 html 报告输出。 

参考:

https://www.cnblogs.com/liyasong/p/oracle_report1.html

(完)