Oracle、MySQL、PostGreSQL、SQL Server数据库比较系列(三): VARCHAR与VARCHAR2

Oracle 数据库中的 varchar 和 varchar2 数据类型都用于存储字母数字值的动态长度。但它们之间存在一些差异。varchar 数据类型是适用于所有关系数据库产品(Oracle、MySQL、PostgreSQL 和等)的 ANSI 标准数据类型,存储长度不同数据库差异较大。而 varchar2 数据类型是 Oracle 标准数据类型。VARCHAR是Varchar2的同义词,当我们创建 varchar 数据类型时,Oracle 服务器会在内部自动将 varchar 数据类型转换为 varchar2 数据类型。而部分国产库是VARCHAR2是VARCHAR的同义词。

LOB 不当的chunk size会导致严重的空间浪费

前段时间一客户的Oracle数据库使用datapump做了迁移,发现相同数据LOB段迁移前后占用空间有原来的45G增长到了103GB, 朋友在墨天轮社区记录了这个问题click here, 主要原因是因为使用了不同的Lob Chunk Size,导致的空间浪费。这里简单的记录一下这个问题。

,

工具: 分析core dump file

A core dump is an image copy of a processes state at the instant it ‘aborted’. It is produced in the form of a file called ‘core’ usually located in the current directory.

Alert: Oracle 12c/18c/19c “SYS” 用户密码也会自动过期

某年某月某一天,有个客户的oracle归档日志空间突然满了,实例挂起,客户的告警系统一如既往的保持沉默, 我们自己部署的“保镖”脚本被友军打上了#号,友军的“打手”脚本说sys用户密码已过期, wait!wait! are you kidding me? SYS user 密码过期? 逻辑是这样的这套脚本是在DATAGUARD的standby 使用sys@tns方式远程查询已applyed 日志删除,在调用日志里提示“ORA-28002: the password will expire within 7 days“。

, ,

工具:oswbba java 分析

OSW工具不用多说oracle数据库环境建议采集OS系统数据的脚本集, 采集的数据可以拿到其它机器,如WINDOWS上分析输出图形, 在ORACLE 12c后 AHF自动健康框架中已自带, 同时还有oracheck等,当troubleshooting时使用tfactl 可以一并收集相对全面的日志数据,几年前记录过2篇OSW,不做过多介绍,这里简单记录一下在Windows上使用oswbba.jar分析时的一些小问题。

Oracle partition part# 如何增长

Troubleshooting 19c ORA-1: unique constraint (sys.i_indpart_bopart$) during ALTER TABLE SPLIT PARTITION
上一篇blog中提到LOCAL 分区,分区索引part#和分区表part#是相等的,上一篇在还原那个问题时,让part#占用时发现还不是那么简单,如果用10046跟split partition,时而insert,时而存在update, 其实oracle在这方面也是做了优化, 在split分区位置和个数也有性能上的细微的差别。

Troubleshooting 19c ORA-1: unique constraint (sys.i_indpart_bopart$) during ALTER TABLE SPLIT PARTITION

开始了19c的躺雷模式, 再次建议选择ORACLE 19C版本时安装19.11 以上RU。 最近一客户升级了19C, 本月拆分区时遇到了ora-1 内部字典表数据唯一性冲突, 下面简单记录,报错信息如下:

ALTER TABLE ANBOB.TLOG SPLIT PARTITION PART_110_MAX AT (110, TO_DATE(‘ 2022-02-01 00:00:00’, ‘SYYYY-MM-DD HH24:MI:SS’)) INTO (PARTITION PART_110_202201 ,PARTITION PART_310_MAX )
ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-00001: unique constraint (SYS.I_INDPART_BOPART$) violated

,

Troubleshooting 19c ora-600 internal error code [kkshhcdel:wrong-bucket]

Oracle 19c(19.9) RAC on linux, 应用执行一个update sql时报错ora-600, 错误日志如下
ORA-00600: internal error code, arguments: [kkshhcdel:wrong-bucket], [0x58445A790], [0x000000000], [0x67DFB5820], [], [], [], [], [], [], [], []

,

Oracle 19c hang ‘TTnn Sleep 10 seconds and then try to clear SRLs in N time(s)’ wait ‘row cache lock’ & ‘cursor: pin S wait on X’

环境oracle 19c(19.7) on linux, 数据库做了failover后在open resetlogs数据库时,等待了很久的时间,数据库里查询wait event是’row cache lock’ & ‘cursor: pin S wait on X’, DB alert log显示下面的信息:可以看到不断的在输出TTnn Sleep 10 seconds and then try to clear SRLs in N time(s), TTnn进程为异步模式下的REDO传输进程, 在清理standby redo log时hang, 还出现了row cache enqueue生成了SSD(system state dump)trace

,

EVENT #2021DTC# Oracle数据库中的一些Automatic特性

演讲主题: Oracle数据库中的一些Automatic特性
DATE : 12/24/2021

墨天轮
https://www.modb.pro/dtc2021

Event #2021APACOUC# “Oracle 数据库中的在线索引、表、数据文件维护和操作”

Oracle Groundbreakers APAC Virtual Tour 2021

演讲主题: Online index、table、datafile maintenance operations in Oracle database
DATE : 12/05/2021

Oracle、MySQL、PostGreSQL、SQL Server数据库比较系列(二):查询每秒事务数

在做 db benchmarks 时,qps、tps 是衡量数据库性能的关键指标,TPS : Transactions Per Second 是每秒事务数,即数据库服务器在单位时间内处理的事务数。 横向对比计划几类数据库计算tps的方法。

Troubleshooting “sqlplus / as sysdba” hang Case

一套oracle single instance on AIX环境,数据库未启动,客户硬件只是扩容了内存OS重启后,sqlplus启库无法登录,sqlplus / as sysdba命令挂起。

1, rename sqlnet.ora
2, 检查了/etc/hosts
3, 尝试了listener可以启动

Troubleshooting Instance crash ORA-01110 ORA-01208 Due to ORA-63999, Disk Failure

最近一起Oracle数据库自动crash, 再次打开是提示需要做datafile recover, 分析alert日志提示ORA-63999 ORA-01122 ORA-01110 ORA-01208, 问题时logfileswitch并不频繁,当时也没有做duplicat 操作(bug 13498382),ora-1208是因为数据文件头上的ckpt比控制文件上的旧,reover后随后数据文件头被更新,因此可以正常访问而不会发生损坏,判断是IO写丢失导致.

Troubleshooting ORA-600 [4187] Undo segment sequence number is exhausted

每个事务都有一个唯一的 ID,称为 XID,基于Undo segment number 、Undo segment slot number and Undo segment sequence number (wrap#),为每个事务在第一个 DML语句期间分配一个事务 ID(XID), 每次transaction table的slot重用时, slot wrap(sequence number) number就会增加.当slot重用(或wrap#)达到maximum value 4,294,967,295 (2^32 – 1)(0xffffffff)次数时,当再次增加 wrap number 1或多值时,通常会提示ORA-1558 或ORA-600[4187]出现,

, ,

Oracle crash on VMware , OS watchdog show “io_schedule” “__blockdev_direct_IO_newtrunc”

最近同事遇到一个案例,Oracle数据库频繁重启,数据库日志也是各种后台进程IO hang, 环境VMWARE,RHEL6, multipath, 华为存储。iostat显示问题时间段共享存储设备io 为0,%util 100%. RHEL官方有过相同案例,这里简单的记录。

Oracle 19c RAC wait event “enq: KI – contention” using Global temporary tables

如果正在使用oracle 19c rac 安装了19.10,19.11 RU后,关注一下使用了global temporary table(GTT)的运行时间,根据MOS Global temporary table (GTT) usage increased elapsed time after Jan RU 2021 (Doc ID 2798017.1) 记录响应时间会比之前慢9-10倍以上,属于 BUG 33127032,等待事件主要是“end: KI – contention”一个跨实例调用的序列化操作并不常见,通常P2值为59表示全局对象失效。

,

Oracle RAC 环境中配置DNS性能问题或故障对使用SCAN Listener的影响

Oracle 11g 提供了一种特性SCAN LISTENER, 简化客户配置应用连接串,客户请求发给scan listener后实际还是会重定向给VIP listener与客户端建立联系, 标准配置是建议把scan name的域名配置到DNS中,如果不使用DNS只能识别一个scan ip, 配置在/etc/hosts中。 如果使用DNS服务器,对DNS的响应有较高要求,同时也增加了一个故障点

, ,

Troubleshooting Oracle ANYDATA 数据类型存储的自定义类型丢失后ORA-21700

Oracle ANYDATA数据类型几年前在做expdp迁移时接触过,类型XML,LOB导出速度是慢之非常, 今天又一个客户在expdp时一个interval partition表时,部分分区导出报错ORA-21700: object does not exist or is marked for delete错误,依赖的对象不存在,查看表定义存在anydata列,也就是可能anydata这种任何数据类型都可以存储(但还是建议用lob类型代替),但是存储的自定义类型又不存在了,这种情况很危险

,

Oracle 21c 新特性: Automatic Materialized Views

在oracle database 21c版本开始materialized views可以自动的创建和维护,用于自冶数据库。 物化视图提供了显着提高查询性能的潜力,但需要大量的努力和技能来确定要使用的物化视图。结合了工作负载监控来确定需要哪些物化视图。基于决定,物化视图和物化视图日志被自动创建和维护,无需任何手动交互。对于复杂查询SQL的查询块(QB),MVIEW查询重写技术可以优化此类查询