12c不可见列

在12c中,Oracle允许隐藏某些列。这个操作可以由用户自己来控制,通过CREATE TABLE或者ALTER TABLE等方式。被隐藏的列之后也可以通过ALTER TABLE还原。一般访问表时都是无法显示出隐藏字段的,比如select * from table或者DESC TABLE。 隐藏列的基本特性: 一般对表的访问都不会显示隐藏列(SELECT * FROM TABLE, DESC TABLE) 数据库通常会按表创建的顺序来存放字段,如果你将这张表新增了一个字段,这个新字段默认会排在表的最后。当表含有隐藏字段时,则表字段的……

阅读全文

12c返回指定行数

如果对返回结果进行行数的过滤时,通常都是通过order by + rownum <的方式,对于返回中间行数的情况就需要通过嵌套分页的写法,而在其他类型的数据库比如Mysql中可以比较方便的直接通过limit的方式 SELECT * FROM t1 ORDER BY 1 LIMIT 0, 10; row limiting概念 从12c开始,oracle对这方面的功能大大的增强,引入了Row_limiting_clause语句格式,允许查询sql能限制返回的行数以及返回结果集开始的行位置。许多查询sql需要限制返回的行数和修改返回行数的起始位置,比如在返回结果集中……

阅读全文

linux下帐号密码过期

早上看到告警备份失败,检查发现今天并未发起备份任务,查看定时任务时报错 [oracle@ ~]$ crontab -l Authentication token is no longer valid; new one required You (oracle) are not allowed to access to (crontab) because of pam configuration. 看提示是oracle用户的认证有问题,不允许其调用crontab任务,可能跟pam配置文件的设置有关。 检查secure日志文件,查看具体报错信息 vim /var/log/secure su: pam_unix(su-l:session): session opened for user oracle by (uid=0) su: pam_unix(su-l:session): session closed for user oracle su: pam_unix(su-l:session): session closed for user oracle su: pam_unix(su-l:session): session opened for user oracle by root(uid=0) crontab: pam_unix(crond:account): expired password for user oracle (password aged) 看样子是因为oracle帐号密码超期了。 在/etc/shadow文件中以加密的方式储存了每个linux用户的账户信息,和一些账户……

阅读全文

In-Database Archiving

数据库内归档可以将表中的行标记为非活动状态来进行归档,这些非活动的行可以使用压缩来进行优化,但是应用程序看不到这些数据。如果想要看到这些数据的话可以通过在会话级别设置参数。 通过数据库内归档的技术,可以在一个数据库当中保存更多的数据,并维持更长的数据保存周期,并且不会降低应用程序的性能。这些归档数据也可以通过压缩来提高性能,应用升级的过程中,也可以延迟对这些归档数据的修改以此来提高升级效率。 开启数据库内归档 ROW ARCHIVAL子句用来开启数据库内归档,可以通过在CREATE TAB……

阅读全文

Identity Columns

标识列是12c的一个新特性,能自动生成列里的值,一部分功能与mysql中的自增列有点类似,简化了应用程序的开发和其他关系型数据库迁移到oracle。这个特性主要是利用一个默认的序列生成器,通过这个生成器来绝对字段增加或者减少的整数值。 drop table t1 purge; create table t1 (id number generated by default as identity, name varchar2(10)); insert into t1 (name) values ('xb'); commit; select * from t1; ID NAME ---------- ---------- 1 xb 对于标识列来说,我们要么指定一个默认的序列去生成字段值或者只对那些插入NULL的情况生成字段值。根据标识列的定义可以有GENERATED ALWAYS和GENERATED BY DEFAU……

阅读全文

在线迁移pdb

在线迁移pdb的目的 某些情况下要对cdb进行升级、停机等操作,而其中的部分pdb需要保持对外提供服务,那么就可以将pdb迁移到其他的cdb上运行。在线迁移pdb是目前在不停机或者最短停机时间情况下移动pdb的最快方法,如果采用其他的拔下再插入的方式,那么就需要一定的停机时间。 将pdb在不同的数据中心移动时,或者从私有机房迁移到云上环境时,所有的数据都需要物理的移动。对于那些特别大的pdb来说,这个过程则会消耗较长的时间。而PDB在线迁移则可以完全的消除这些不便之处,在线迁移p……

阅读全文

Proxy PDB

关于proxy pdb proxy pdb可以让你访问远端cdb像在本地访问一样,类似一个符号链。 可以通过创建一个本地代理pdb来引用一个不同cdb里的pdb,这个被引用的pdb则称为引用pdb。如果要访问引用pdb的数据,那么可以直接访问本地代理pdb即可,简化了一些书写。当不同cdb里的应用容器有相同的应用程序时,可以通过代理pdb来同步应用容器的根节点。 创建代理pdb时都需要创建数据链,都是在本地代理pdb所属的CDB中创建数据链,指向远端的CDB或者引用pdb。 同样也可以在应用容器中创……

阅读全文

Application Container

顾名思义,表示应用容器。与之前的cdb不同的是,它是作为CDB中的一个pdb存在的,在应用容器下面还可以创建新一级的pdb给应用程序使用。这个应用容器中的程序是可以同步到挂在它下面的一个或多个相同业务模块的pdb当中去。 关于应用容器 应用容器是一个可选的、用户创建的CDB组件,用于存储一个或多个应用端的数据和字典信息。一个CDB可以包含0个或多个应用容器。 比如你可以在一个应用容器中创建多个与销售相关的pdb,这些pdb可以共享一个由一组公共表和表定义的应用端。 创建PDB时只需要……

阅读全文

12c新特性:只读分区

除了只读表以外,12c中引入了只读分区特性,每个分区或子分区可以独立的设置成只读或者读写,这样对于那些需要对指定分区数据的访问权限做控制的情况带来了方便。如果这个分区或子分区被设置成了只读模式,那么任何对这个分区或子分区的数据进行修改的操作都会报错,这样对这些数据进行了很好的保护。 只读分区: 只读属性确保了数据的不变 数据的不变并不会阻止表的DDL操作,比如新增和修改列 表和分区或子分区都可以被设成只读 只读对象与只读表空间: 只读表空间保护物理文件不被修改 允许那些不接触存储的DDL操……

阅读全文

刷新克隆PDB

可刷新的克隆pdb是指一个可以定期从源pdb同步的只读克隆库,可以用来当做报表库或者准生产环境来做测试用途。 刷新pdb 只有在创建的时候指明了是可刷新的克隆pdb,你才可以进行刷新操作。 当手动刷新pdb时,源端pdb自从上次刷新时间之后所有的变化都会同步到被刷新pdb当中来,你也可以手动刷新那些配置成自动刷新的pdb。 所以在创建pdb时,你必须要通过REFRESH MODE MANUAL或REFRESH MODE EVERY minutes语句。 创建可刷新的克隆pdb sys@ORA12C> create pluggable database pdb3new from pdb3@to_remote refresh mode manual; Pluggable database created. 打开新建的pd……

阅读全文