使用在线重定义改变表的所在表空间

通常情况下,在线改变一个表的定义信息是很困难的。例如,当需要在不影响应用使用的情况下,将表从一个表空间迁至另一个表空间上。如果使用ALTER TABLE命令,则会影响数据的可用性。此时我们就需要用到在线重定义技术,Oracle 9i以上的版本提供了DBMS_REDEFINITION这个包。
现在debugo用户的t表在下TBS_MSSM表空间下,需要迁移到TBS_ASSM表空间下:
Continue reading

Posted in Database, Oracle.

Oracle Shared Pool点滴

1. What’s cursor
A handle or name for a private SQL area inthe PGA. Because cursors are closely associated with private SQL areas, theterms are sometimes used interchangeably.

2. Open_cursors
OPEN_CURSORS specifies the maximum number of open cursors (handles to private SQL areas)
a session can have at once. You can use this parameter to prevent a session from opening an excessivenumber of cursors.
It is important to set the value of OPEN_CURSORS highenough to prevent your application from running out of open cursors. The numberwill vary from one application to another. Assuming that a session does notopen the number of cursors specified by OPEN_CURSORS, there is no added overhead to setting this value higher than actually needed.
3. Shared pool包括
(1). Library cache:存储最近的可执行状态(解析过/编译过)的SQL语句和PL/SQL代码。
(1.1) library cache或 data dictionary cache的miss比buffer cache的miss代价大的多。例如软解析只需要CPU和library cache latch资源,而硬解析需要大量的CPU、library cache latch和shared pool latch。硬解析在SQL语句的解析和执行阶段都会发生。所以分配足够的内存是非常必要的。
(1.2) 如果没设置large_pool的情况下,Sharedserver连接,共享查询,RMAN都消耗了大量的shared pool内存。所以在SGA内存设置large pool来处理这些操作很有必要。
(1.3) shared pool中的内存分配以块的形式进行分配,以减少碎片的产生。
(2). Data dictionary cache: 数据字典缓存
(3). Server result cache:缓存查询和PL/SQL执行结果。可选的缓存区,由result_cache_max_size参数控制。
4. 在默认的CURSOR_SHARING=EXACT情况下,不同SQL文本、空格,大小写和注释的SQL语句都不能共享。例如
SELECT * FROM employees;
SELECT * FROM Employees;
SELECT * FROM employees;

Continue reading

Posted in Database, Oracle.

使用Oracle LogMiner找回丢失的数据

最近的一次应用上线故障,导致一些数据被错误的DML修改。这里考虑用LOG MINER从归档日志文件中找回DML信息来恢复。

数据库是一个包含2节点的RAC环境,首先通过gv$archived_log查询一下那个时间段的日志信息:

Continue reading

Posted in Database, Oracle.

Oracle 10.2.0.4.x 升级实录

三年前的一个单机Oracle数据库版本是10.2.0.4.3,需要升级到10.2.0.4.12,该版本是10.2.0.4系列最后一个稳定补丁版本。如今10.2只有Software Extended Support的许可才能下载相应的补丁=。=
对应的补丁如下:
Bug 12879933 – 10.2.0.4.12 (Apr 2012) Database Patch Set Update (PSU) Overlay (文档 ID 12879933.8)
(It is an overlay patch which must be installed on top of 10.2.0.4.4 Patch:9352164.)
所以还需要升级到10.2.0.4.4
Bug 9352164 – 10.2.0.4.4 (Apr 2010) Database Patch Set Update (PSU) (文档 ID 9352164.8)

1. 更新Opatch

—-检查opatch版本—-

Continue reading

Posted in Database, Oracle.

Oracle自动任务执行时间详解

Oracle 11g默认启动了统计信息收集等自动任务,默认运行时间是周一到周五22点以及周六,周天的早上6点。
Continue reading

Posted in Database, Oracle.

Scala 高级函数特性

函数和其他常量、变量一样,也是一个值。

Continue reading

Posted in Dev, Java|Scala.

利用oifcfg修复错误的网卡配置

在进行Oracle(版本11.2.0.3.5)三节点RAC(racdb01, racdb02, racdb03)的Clusterware安装选择网卡时显示

*    172.19.17.0(public网段)    public
*    192.168.1.0(private网段)    private

其中网卡是*,而非eth0/eth1。虽然clusterware安装成功,安装后续数据库prerequisite check时会报错。
Continue reading

Posted in Database, Oracle.

在Linux下查看CPU的方法

物理机是一台4颗CPU的刀片服务器,可以用下面信息查看CPU信息.
Continue reading

Posted in Linux.

Oracle sysresv OS共享内存和信号量工具

Oracle从8i开始提供一个小工具sysresv, 可以查看和清理操作系统上对应的ORACLE_SID的共享内存段ID(Shared Memory)和信号量ID(Semaphores)。
usage : sysresv [-if] [-d ] [-l sid1 …]
-i : Prompt before removing ipc resources for each sid
-f : Remove ipc resources silently, oevrrides -i option
-d : List ipc resources for each sid if on
-l sid1 .. : apply sysresv to each sid
Default : sysresv -d on -l $ORACLE_SID
Note : ipc resources will be attempted to be deleted for a
sid only if there is no currently running instance
with that sid.

如果这个实例崩溃了,共享内存没有即时清理,可以使用这个工具的-if来清理共享内存。经过测试,无论使用kill -9 pmon还是shutdown abort以后,相应的共享资源立即被回收。而实例正常时无法清理共享资源。可见这个工具的应用场景并不大。

Posted in Database, Oracle.

在线重建索引的ora-08104错误

今天遇到一个问题,alter index <index_name> rebuild online)时,可能由于网络的原因导致session断开连接。然后在之后的再次重建索引时,有ORA-08104(this index object <object_id> is being online built or rebuilt)错误。
Continue reading

Posted in Database, Oracle.