AFFIRM和NOAFFIRM
AFFIRM保证在日志写入进程(LGWR)能够继续写入可以重用主数据库上的联机重做日志文件之前,能够同步执行并成功完成到备用目的地的归档重做日志文件或备用重做日志文件的所有磁盘I/O操作,因此,LGWR在写入到主数据库上的本地联机重做日志文件之前一直等待。需要AFFIRM来达到没有数据丢失的目的
NOAFFIRM指示将要同步地执行到归档重做日志文件和备用重做日志文件的所有磁盘I/O操作;在备用目的地上的磁盘I/O操作完成之前,可以重用主数据库上的联机重做日志文件
ALTERNATE和NOALTERNATE
当原始的归档目的地失效时,ALTERNATE指定一个可替换使用的LOG_ARCHIVE_DEST_n目的地
ARCH和LGWR
ARCH默认情况下指定ARCH进程负责将重做数据传送到归档目的地。LGWR指定LGWR进程执行日志传输操作
DB_UNIQUE_NAME和NODB_UNIQUE _NAME
DB_UNIQUE_NAME为目的地指定唯一的数据库名字
DELAY和NODELAY
DELAY指定在备用站点上归档重做数据日志和将归档重做日志文件应用到备用数据库之间的时间间隔;DELAY可以用来保护备用数据库免受损坏或错误的主数据的影响。如果没有指定DELAY和NODELAY,默认采用NODELAY
DEPENDENCY和NODEPENDENCY
DEPENDENCY允许向一个目的地传输重做数据,然后在多个被备用数据库之间共享它的归档的重做日志文件。当创建DEPENDENCY时,必须使用REGISTER和SERVICE属性
LOCATION和SERVICE
每个目的地必须指定LOCATION或SERVICE属性来标识一个本地磁盘目录(通过LOCATION)或一个远程数据库目的地(通过SERVICE),Log Transport Service可以向此数据库传送重做数据
MANDATORY和OPTIONAL
如果目的地是OPTIONAL,到此目的地的归档操作可能失败,然而仍可以重用联机重做日志文件并最终可以重写它。
如果一个MANDATORY目的地的归档操作失败,则不能重写联机重做日志文件
MAX_FAILURE和NOMAX_FAILURE
MAX_FAILURE指定在主数据库永久放弃备用数据库之前执行的重新打开尝试的最大次数
NET_TIMEOUT和NONET_TIMEOUT
NET_TIMEOUT指定在终结网络连接之前主系统上的日志写入器(log writer)进程等待来自网络服务器进程的状态所允许的秒数。默认值是180秒
QUOTA_SIZE和NOQUOTA_SIZE
QUOTA_SIZE指示本地目的地能够使用的一个磁盘设备上的512字节物理存储块的最大数量
QUOTA_USED和NOQUOTA_USED
QUOTA_USED标识在一个特定的目的地上归档的512字节数据块的数量
REGISTER和NOREGISTER
REGISTER指示归档重做日志文件的位置将记录在对应的目的地
REOPEN和NOREOPEN
REOPEN指定在归档器(archiver)进程(ARCn)或日志写入器进程(LGWR)尝试再次访问一个以前失效的目的地之前允许的最小秒数(默认值是300秒)
SYNC和ASYNC
在使用日志写入器进程(LGWR)时,SYNC和ASYNC指定网络I/O操作是同步执行还是异步执行。默认情况下,SYNC=PARALLEL,用于存在多个使用SYNC属性的目的地的情况下。所有的目的地应该使用相同的值
TEMPLATE和NOTEMPLATE
TEMPLATE为备用目的地上的归档重做日志文件或备用重做日志文件的名字定义了一个目录规范和格式模版。可以在主或备用初始化参数文件中指定这些属性,但是该属性只适用于正在归档的数据库角色
VALID_FOR
VALID_FOR根据以下的因素来标识Log Transport Service什么时候可以向目的地传送重做数据:(1)数据库当前运行在主角色还是备用角色下,(2)当前是否正在该目的地的数据库上归档联机重做日志文件、备用重做日志文件或者这两类文件。该属性的默认值是VALID_FOR= (ALL_LOGFILES, ALL_ROLES)。其他的取值包括PRIMARY_ROLE、STANDBY_ROLE、ONLINE_LOGFILES和STANDBY_LOGFILE
VERIFY和NOVERIFY
VERIFY指示archiver进程应该检验完成的归档重做日志文件内容的正确性。默认值是NOVERIFY
mysql中group by操作
在我的思想中,group by函数应该的使用应该是SELECT 列表中指定的每一列也必须出现在 GROUP BY 子句中,除非这列是用于聚合函数,但是今天帮同事调试一个mysql中的group by函数,让我大跌眼镜,当时感觉不可思议,然后回来做了个简化版试验,试验过程如下:
mysql表结构
mysql> desc t;
+——-+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——-+————–+——+—–+———+——-+
| id | int(11) | YES | | 0 | |
| name | varchar(100) | YES | | NULL | |
| aa | varchar(45) | YES | | NULL | |
+——-+————–+——+—–+———+——-+
3 rows in set (0.01 sec)
插入数据
mysql> select * from t;
+——+——+——-+
| id | name | aa |
+——+——+——-+
| 1 | aaaa | bbbb |
| 1 | 1111 | 2222 |
| 1 | 2222 | 33333 |
| 1 | 2222 | 44444 |
| 2 | 2222 | 44444 |
| 2 | 2222 | 1111 |
| 3 | 2222 | 1111 |
| 1 | 2222 | 44444 |
| 1 | 2222 | 44444 |
| 1 | 2222 | 44444 |
| 3 | 2222 | aaaa |
+——+——+——-+
11 rows in set (0.00 sec)
group by 查询语句
mysql> select id,count(1) ,aa from t group by id;
+——+———-+——-+
| id | count(1) | aa |
+——+———-+——-+
| 1 | 7 | bbbb |
| 2 | 2 | 44444 |
| 3 | 2 | 1111 |
+——+———-+——-+
3 rows in set (0.00 sec)
在本试验中,一共select id,count(1),aa,结果group by按照规则,除了聚合函数(count(1))外,其他两列(id,aa)都应该包含在group by中,可是试验只是包含了id。
对试验结果的说明
1、包含在group by后面的id列的count(1)统计数据为正确的
2、按照正常思维,aa的数据不能展示出来,可是mysql选择了展示表中aa数据的第一条
3、上述2也是个人猜测,暂时未查到官方相关说明
v$和gv$来源
本篇文章以v$parameter和gv$parameter为例做讲解
1、查看v$parameter对象类型,并查看其创建sql语句
SELECT * FROM all_objects a WHERE a.object_name='V$PARAMETER'; select dbms_metadata.get_ddl(object_type=>'SYNONYM',NAME=>'V$PARAMETER',SCHEMA=>'PUBLIC') from dual; --V$PARAMETER SYNONYN CREATE OR REPLACE PUBLIC SYNONYM "V$PARAMETER" FOR "SYS"."V_$PARAMETER"
2、查看V_$PARAMETER对象类型,并查看其创建语句
SELECT * FROM all_objects a WHERE a.object_name='V_$PARAMETER'; select dbms_metadata.get_ddl(object_type=>'VIEW',NAME=>'V_$PARAMETER',SCHEMA=>'SYS') from dual; --V_$PARAMETER VIEW CREATE OR REPLACE FORCE VIEW "SYS"."V_$PARAMETER" ("NUM", "NAME", "TYPE", "VALUE", "DISPLAY_VALUE", "ISDEFAULT", "ISSES_MODIFIABLE", "ISSYS_MODIFIABLE", "ISINSTANCE_MODIFIABLE", "ISMODIFIED", "ISADJUSTED", "ISDEPRECATED", "ISBASIC", "DESCRIPTION", "UPDATE_COMMENT", "HASH") AS SELECT "NUM", "NAME", "TYPE", "VALUE", "DISPLAY_VALUE", "ISDEFAULT", "ISSES_MODIFIABLE", "ISSYS_MODIFIABLE", "ISINSTANCE_MODIFIABLE", "ISMODIFIED", "ISADJUSTED", "ISDEPRECATED", "ISBASIC", "DESCRIPTION", "UPDATE_COMMENT", "HASH" FROM V$PARAMETER;
3、查看V$PARAMETER类型,并查看其创建语句
SELECT * FROM v$fixed_table a WHERE a.name='V$PARAMETER'; SELECT * FROM V$FIXED_VIEW_DEFINITION WHERE VIEW_name='V$PARAMETER'; --V$PARAMETER VIEW SELECT NUM, NAME, TYPE, VALUE, DISPLAY_VALUE, ISDEFAULT, ISSES_MODIFIABLE, ISSYS_MODIFIABLE, ISINSTANCE_MODIFIABLE, ISMODIFIED, ISADJUSTED, ISDEPRECATED, ISBASIC, DESCRIPTION, UPDATE_COMMENT, HASH FROM GV$PARAMETER WHERE INST_ID = USERENV('Instance')
4、查看GV$PARAMETER类型,及其创建sql语句
SELECT * FROM v$fixed_table a WHERE a.name='GV$PARAMETER'; SELECT * FROM V$FIXED_VIEW_DEFINITION WHERE VIEW_name='GV$PARAMETER'; --GV$PARAMETER VIEW SELECT X.INST_ID, X.INDX + 1, KSPPINM, KSPPITY, KSPPSTVL, KSPPSTDVL, KSPPSTDF, DECODE(BITAND(KSPPIFLG / 256, 1), 1, 'TRUE', 'FALSE'), DECODE(BITAND(KSPPIFLG / 65536, 3), 1, 'IMMEDIATE', 2, 'DEFERRED', 3, 'IMMEDIATE', 'FALSE'), DECODE(BITAND(KSPPIFLG, 4), 4, 'FALSE', DECODE(BITAND(KSPPIFLG / 65536, 3), 0, 'FALSE', 'TRUE')), DECODE(BITAND(KSPPSTVF, 7), 1, 'MODIFIED', 4, 'SYSTEM_MOD', 'FALSE'), DECODE(BITAND(KSPPSTVF, 2), 2, 'TRUE', 'FALSE'), DECODE(BITAND(KSPPILRMFLG / 64, 1), 1, 'TRUE', 'FALSE'), DECODE(BITAND(KSPPILRMFLG / 268435456, 1), 1, 'TRUE', 'FALSE'), KSPPDESC, KSPPSTCMNT, KSPPIHASH FROM X$KSPPI X, X$KSPPCV Y WHERE (X.INDX = Y.INDX) AND BITAND(KSPPIFLG, 268435456) = 0 AND ((TRANSLATE(KSPPINM, '_', '#') NOT LIKE '##%') AND ((TRANSLATE(KSPPINM, '_', '#') NOT LIKE '#%') OR (KSPPSTDF = 'FALSE') OR (BITAND(KSPPSTVF, 5) > 0)))
5、查看gv$parameter同义词和gv_$parameter视图
--GV$PARAMETER SYNONYM CREATE OR REPLACE PUBLIC SYNONYM "GV$PARAMETER" FOR "SYS"."GV_$PARAMETER" --GV_$PRAMETER VIEW CREATE OR REPLACE FORCE VIEW "SYS"."GV_$PARAMETER" ("INST_ID", "NUM", "NAME", "TYPE", "VALUE", "DISPLAY_VALUE", "ISDEFAULT", "ISSES_MODIFIABLE", "ISSYS_MODIFIABLE", "ISINSTANCE_MODIFIABLE", "ISMODIFIED", "ISADJUSTED", "ISDEPRECATED", "ISBASIC", "DESCRIPTION", "UPDATE_COMMENT", "HASH") AS SELECT "INST_ID", "NUM", "NAME", "TYPE", "VALUE", "DISPLAY_VALUE", "ISDEFAULT", "ISSES_MODIFIABLE", "ISSYS_MODIFIABLE", "ISINSTANCE_MODIFIABLE", "ISMODIFIED", "ISADJUSTED", "ISDEPRECATED", "ISBASIC", "DESCRIPTION", "UPDATE_COMMENT", "HASH" FROM GV$PARAMETER
6、总结
x$(table)–>gv$(view)–>v$(view)–>v_$(view)–>v$(SYNONYM)
x$(table)–>gv$(view)–>gv_$(view)–>gv$(synonym)
1)sys的fixed table x$
2)sys的fixed view: GV$
3)sys的fixed view: V$
4)sys的普通view: V_$
5)public的synonym: v$
6) sys的fixed view: gv_$
7) public的synonym: gv$
如果用sys访问v$, 就是3=>2=>1,other user访问v$, 就是5=>4=>3=>2=>1.
如果用sys访问gv$, 就是6=>2=>1,other user访问gv$, 就是7=>6=>2=>1.
查找V$PARAMETER 基表
1、使用trace查找show parameter执行语句
alter session set events '10046 trace name context forever,level 12'; show parameter process; alter session set events '10046 trace name context off';
2、查找trace文件
SELECT d.VALUE || '/' || LOWER (RTRIM (i.INSTANCE, CHR (0))) || '_ora_' || p.spid || '.trc' trace_file_name FROM (SELECT p.spid FROM v$mystat m, v$session s, v$process p WHERE m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr) p, (SELECT t.INSTANCE FROM v$thread t, v$parameter v WHERE v.NAME = 'thread' AND (v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE))) i, (SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d
3、格式化trace文件
tkprof D:\oracle\diag\rdbms\xff\xff\trace\xff_ora_4780.trc D:\oracle\diag\rdbms\xff\xff\trace\abc.txt
4、找出对应sql语句
SELECT NAME NAME_COL_PLUS_SHOW_PARAM, DECODE(TYPE, 1, 'boolean', 2, 'string', 3, 'integer', 4, 'file', 5, 'number', 6, 'big integer', 'unknown') TYPE, DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%process%') ORDER BY NAME_COL_PLUS_SHOW_PARAM, ROWNUM;
5、查找上面语句发现使用v$parameter对象
6、查看第一种来源
select owner,object_name,object_type from dba_objects where object_name ='V$PARAMETER'; select dbms_metadata.get_ddl(object_type=>'SYNONYM',NAME=>'V$PARAMETER',SCHEMA=>'PUBLIC') from dual;
7、无结果,查看第二种来源
select * from v$fixed_table where name ='V%PARAMETER%'; select * from v$fixed_view_definition where view_name='GV$PARAMETER';
8、得出结果,从中学习到数据库中的对象有两种来源
1)sys的fixed table : x$ksppi x, x$ksppcv y
2)sys的fixed view: GV$PARAMETER
3)sys的fixed view: V$PARAMETER
4) sys的普通view: V_$PARAMETER
5) public的synonym: v$parameter
所以,如果用sys访问v$parameter, 就是3=>2=>1
other user访问v$parameter, 就是5=>4=>3=>2=>1.
有dba权限,存储过程中引用视图v$session提示表不存在
需要显示授权
grand select on sys.V_$SESSION to xxx;
说明:不能直接授权给v$session
原因:v$session是公共同义词,不能被授权
(可以通过select * from dba_objects where object_name=’V$SESSION’;查询出来)
note:11gr2版本存在该问题,其他版本暂时未知
数据文件位置调整
1、关闭数据库
shutdown immediate;
2、移动数据文件
mv /u01/ora10g/oradata/ggtarget /u02/ora10g/oradata
3、数据库至于nomount状态
startup nomount;
4、创建pfile
create pfile from spfile;
5、修改pfile中control_files
6、使用pfile把数据库至于mount状态
shutdown immediate;
startup mount pfile=/u01/ora10g/product/10.2.0/db_1/dbs/initggtarge.ora;
7、修改文件位置
--查询select name from v$datafile; alter database rename file '/u01/ora10g/oradata/ggtarge/system01.dbf' to '/u02/ora10g/oradata/ggtarge/system01.dbf'; alter database rename file '/u01/ora10g/oradata/ggtarge/undotbs01.dbf' to '/u02/ora10g/oradata/ggtarge/undotbs01.dbf'; alter database rename file '/u01/ora10g/oradata/ggtarge/sysaux01.dbf' to '/u02/ora10g/oradata/ggtarge/sysaux01.dbf'; alter database rename file '/u01/ora10g/oradata/ggtarge/users01.dbf' to '/u02/ora10g/oradata/ggtarge/users01.dbf'; --查询select member from v$logfile; alter database rename file '/u01/ora10g/oradata/ggtarge/redo01.log' to '/u02/ora10g/oradata/ggtarge/redo01.log'; alter database rename file '/u01/ora10g/oradata/ggtarge/redo02.log' to '/u02/ora10g/oradata/ggtarge/redo02.log'; --查询select name from v$tempfile; alter database rename file '/u01/ora10g/oradata/ggtarge/temp01.dbf' to '/u02/ora10g/oradata/ggtarge/temp01.dbf';
8、创建spfile
create spfile to pfile;
9、重启数据库使用spfile启动
shutdown immediate;
startup;
ssh等效连接配置
1、配置SSH(两台机器上均需执行)
A、以ORACLE用户登陆
mkdir ~/.ssh chmod 700 ~/.ssh
B、使用SSH-KEYGEN生成SSH协议的RSA密钥
ssh-keygen -t rsa
2、添加密钥到授权密钥文件(任意一台机器上执行)
以下三条命令在11.1.1.2上执行
ssh 11.1.1.2 cat /home/oracle/.ssh/id_rsa.pub>>authorized_keys ssh 11.1.1.3 cat /home/oracle/.ssh/id_rsa.pub>>authorized_keys scp authorized_keys 11.1.1.3:/home/oracle/.ssh/ chmod 600 ~/.ssh/authorized_keys (两台机器均需要执行)
3、测试(两台机器上均执行)
ssh 11.1.1.2 date ssh 11.1.1.3 date
如果不要求输入密码就出现系统日期,说明SSH配置成功(第一次可能需要输入yes)
grouping_id()使用
1、创建表
desc test_rollup; Name Type Nullable Default Comments ----------- ------------ -------- ------- -------- TYPE_NAME VARCHAR2(10) Y TYPE_VALUE NUMBER Y TYPE_NAME2 VARCHAR2(10) Y TYPE_VALUE2 NUMBER Y
2、插入数据
select * from test_rollup; TYPE_NAME TYPE_VALUE TYPE_NAME2 TYPE_VALUE2 ---------- ---------- ---------- ----------- a 123 t1 120 a 423 t2 200 a 523 t1 555 b 223 x1 504 b 283 x2 484 c 103 y1 333 c 843 y2 984 c 899 y2 151 c 100 y2 150 d 204 s1 606 10 rows selected
3、使用grouping_id查询结果
select type_name, type_name2, decode(grouping_id(type_name), 0, type_name, '总计')g_type, decode(grouping_id(type_name2), 0, type_name2, decode(grouping_id(type_name),0,'小计','总计'))g2_type, grouping_id(type_name, type_name2)gg_type, sum(type_value), sum(type_value2) from test_rollup group by rollup(type_name, type_name2); TYPE_NAME TYPE_NAME2 G_TYPE G2_TYPE GG_TYPE SUM(TYPE_VALUE) SUM(TYPE_VALUE2) ---------- ---------- ---------- ---------- ---------- --------------- ---------------- a t1 a t1 0 646 675 a t2 a t2 0 423 200 a a 小计 1 1069 875 b x1 b x1 0 223 504 b x2 b x2 0 283 484 b b 小计 1 506 988 c y1 c y1 0 103 333 c y2 c y2 0 1842 1285 c c 小计 1 1945 1618 d s1 d s1 0 204 606 d d 小计 1 204 606 总计 总计 3 3724 4087 12 rows selected
rollup和grouping使用
1、创建表
create table test_rollup ( type_name varchar2(10), type_value number );
2、插入数据结果
select * from test_rollup; a 123 a 423 a 523 b 223 b 283 c 103 c 843 c 899 c 100
3、使用rollup函数
select type_name, sum(type_value) from test_rollup group by rollup(type_name); a 1069 b 506 c 1945 3520
4、使用rollup和grouping函数
select type_name, sum(type_value), grouping(type_name) from test_rollup group by rollup(type_name); a 1069 0 b 506 0 c 1945 0 3520 1
5、显示统计信息
select decode(grouping(type_name), 0, type_name, '总计'), sum(type_value) from test_rollup group by rollup(type_name); a 1069 b 506 c 1945 总计 3520
鸿图霸业 谁与争锋
龙在沙滩被虾戏,虎落平阳被犬欺.
虎伏深山听风啸,龙卧浅滩等海潮.
海到尽头天做岸,山登绝顶我为峰.
如日东山能在起,大鹏展翅恨天低。
谁无虎落平阳日,待我风山再起时.
有朝一日龙得水,必令长江水倒流.
有朝一日凤囬巢,必让长城永不倒.
有朝一日虎归山,必要血染半边天.
有朝一日狮入林,我要气吼山河震.
有朝一日游地府,我让地府底朝天.
有朝一日游天边,众神跪在我身边.
有朝一日凤翔天,我要天下尽我鸣.
有朝一日我出头,我要天下唯我尊.
天下英雄出我辈,一入江湖岁月摧.
宏图霸业谈笑中,不胜人生一场醉.