数据文件位置调整

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

鸿图霸业 谁与争锋

龙在沙滩被虾戏,虎落平阳被犬欺.
虎伏深山听风啸,龙卧浅滩等海潮.
海到尽头天做岸,山登绝顶我为峰.
如日东山能在起,大鹏展翅恨天低。
谁无虎落平阳日,待我风山再起时.
有朝一日龙得水,必令长江水倒流.
有朝一日凤囬巢,必让长城永不倒.
有朝一日虎归山,必要血染半边天.
有朝一日狮入林,我要气吼山河震.
有朝一日游地府,我让地府底朝天.
有朝一日游天边,众神跪在我身边.
有朝一日凤翔天,我要天下尽我鸣.
有朝一日我出头,我要天下唯我尊.
天下英雄出我辈,一入江湖岁月摧.
宏图霸业谈笑中,不胜人生一场醉.

sql server 2005镜像配置

1、服务器ip地址和数据库版本
主机:192.168.1.1
备机:192.168.1.110
数据库:sql server 2005 sp4
2、主备实例互通
1)创建证书

--主机执行
USE MASTER
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'xifenfei';
GO
USE MASTER
GO
CREATE CERTIFICATE HOST_A_cert
       WITH SUBJECT = 'A certificate for database mirroring',
       START_DATE = '11/25/2009',
       EXPIRY_DATE = '12/31/2199';
GO
--备机执行
USE MASTER
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'xifenfei';
GO
USE MASTER
GO
CREATE CERTIFICATE HOST_B_cert
       WITH SUBJECT = 'A certificate for database mirroring',
       START_DATE = '11/25/2009',
       EXPIRY_DATE = '12/31/2199';
GO

2)创建连接的端点

--主机执行
create endpoint endpoint_mirroring
state=started
as
tcp (listener_port=5022,listener_ip=all)
for
database_mirroring
(authentication=certificate HOST_A_cert,encryption=supported,role=all);
--备机执行
create endpoint endpoint_mirroring
state=started
as
tcp (listener_port=5022,listener_ip=all)
for
database_mirroring
(authentication=certificate HOST_B_cert,encryption=supported,role=all);

3)备份证书以备建立互联

--主机执行
backup certificate HOST_A_cert to file='E:\database\key\HOST_A_cert.cer';
--备机执行
backup certificate HOST_B_cert to file='C:\database\mssql\key\HOST_B_cert.cer';

4)互换备份证书
拷贝证书文件到对象文件夹中
5)添加登录名、用户

--主机执行
create login HOST_B_login with password='20091125';
create user HOST_B_user for login HOST_B_login;
create certificate HOST_B_cert authorization HOST_B_user from file='C:\database\mssql\key\HOST_B_cert.cer';
grant connect on endpoint::endpoint_mirroring to [HOST_B_login];
--备机执行
create login HOST_A_login with password='20091125';
create user HOST_A_user for login HOST_A_login;
create certificate HOST_A_cert authorization HOST_A_user from file='E:\database\key\HOST_A_cert.cer';
grant connect on endpoint::endpoint_mirroring to [HOST_A_login];

3、建立镜像关系
1)备份还原数据库

/*尝试从刚刚使用的全备文件进行还原,在还原数据的时候需要使用”WITH NO RECOVERY“选项。*/
--主机执行
backup database test to disk='D:\sqlbackup\test091124full.bak'
backup log test to disk='D:\sqlbackup\test091124log.bak'
--备机执行
restore database acmr_10jqka from disk='D:\sqlbackup\test091124full.bak' with replace,norecovery
restore log acmr_10jqka from disk='D:\dbbackup\118_sql\acmr_10jqka091125log.bak' with norecovery

2)建立镜像

/*注意:先备机,后主机*/
--备机执行
alter database acmr_10jqka set partner='TCP://192.168.1.1:5022';
--主机执行
alter database test set partner='TCP://192.168.1.110:5022';

3)事务安全性设置

/*默认情况下,事务安全级别的设置为FULL,即“同步运行模式”,而且,SQL SERVER 2005标准版只支持同步模式。*/
/*如果关闭事务安全级别FULL模式,则可以切换到异步运行模式,该模式可使性能达到最佳。*/
--主机执行
use master
go
alter database test set partner safety full;   --事务安全,同步模式
alter database test set partner safety off;    --事务不安全,异步模式

4)切换

--主机执行下面命令后,即切换为备机角色
use master
go
alter database test set partner failover;
/*同理,也可以在备机(主体数据库)上执行上面命令,之后切换为备机(备数据库)*/

show hidden parameter

1、创建查看隐藏参数视图(show_hidden_v$parameter)

--conn "/ as sysdba"
create or replace view show_hidden_v$parameter
    (INST_ID, NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE,
    ISMODIFIED , ISADJUSTED , ISDEPRECATED, DESCRIPTION, UPDATE_COMMENT, HASH)
    as
    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'),
          ksppdesc,
          ksppstcmnt,
          ksppihash
     from x$ksppi x, x$ksppcv y
    where (x.indx = y.indx);

2、授权用户访问隐藏视图(show_hidden_v$parameter)

--conn "/ as sysdba"
grant select on show_hidden_v$parameter to chf;

3、建立同义词(v$parameter

--conn chf/xifenfei(sys下面已经有该同义词)
create synonym v$parameter for sys.show_hidden_v$parameter;

4、直接查询隐藏参数

select
x.ksppinm name,
x.ksppdesc description,
y.ksppstvl value,
y.ksppstdf isdefault,
decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod,
decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE') isadjusted from
sys.x$ksppi x,
sys.x$ksppcv y
where
x.inst_id=userenv('Instance') and
y.inst_id=userenv('Instance') and
x.indx=y.indx and
x.ksppinm like '%_&par%'
order by
translate(x.ksppinm,'_','');

table()函数用法

因为开发需求需要,存储多个列的结果集,使用table()可以实现
1、创建type

create or replace type t_yqjjrgstj as object
(
  THSCODE   VARCHAR2(96),
  GSJC      VARCHAR2(120) ,
  SSHY      VARCHAR2(180),
  STOCKCODE VARCHAR2(18) ,
  KGLX      VARCHAR2(360),
  GPLX      VARCHAR2(180),
  SSXQ      VARCHAR2(60),
  H_CODE    VARCHAR2(30),
  --额外数据,挑选条件中需要
  JYSDM     VARCHAR2(36) ,--交易所代码
  EJHY      VARCHAR2(180),--证监会二级分类
  JJKGR     VARCHAR2(360)--实际控股人
)

2、实例化type

create or replace type t_jgb_yqjjrgstj as table of t_yqjjrgstj;

3、创建函数

create or replace function f_gjb_yqjjrgstj(in_date in date default sysdate)
  return t_jgb_yqjjrgstj
  PIPELINED as
  v_test_1 t_jgb_yqjjrgstj := t_jgb_yqjjrgstj();
begin
  for t in (select * from test_yqjbzl) loop
    pipe row(t_yqjjrgstj(t.thscode,
                         t.gsjc,
                         t.sshy,
                         t.stockcode,
                         t.kglx,
                         t.gplx,
                         t.ssxq,
                         t.h_code,
                         t.jysdm,
                         t.ejhy,
                         t.jjkgr));
  end loop;
  return;
end f_gjb_yqjjrgstj;

4、测试

select thscode "同花顺" from table(f_gjb_yqjjrgstj()) where SSXQ='北京';

异构数据库初始化大字段处理

一、source端

SOURCEISTABLE
SOURCEDB oracle
RMTHOST 127.0.0.1, MGRPORT 7820
RMTFILE D:\ogg\oracle\dirdat\i1
table dbo.t_v;
table dbo.t_t;

二、target端

SPECIALRUN
END RUNTIME
SETENV (NLS_LANG =AMERICAN_AMERICA.ZHS16GBK)
userid ogg,password xifenfei
EXTFILE D:\ogg\oracle\dirdat\i1
SOURCEDEFS D:\ogg\oracle\dirdef\t_v.def
discardfile D:\ogg\oracle\dirtmp\repsz.dsc,append,megabytes 100
MAP "dbo.t_v", target mssql.t_v;
MAP "dbo.t_t", target mssql.t_t
, colmap ( id = id , text_t = @binary(t_text));

三、执行
extract paramfile dirprm\einit1.prm reportfile dirrpt\einit1.rpt
replicat paramfile dirprm\rinit1.prm reportfile dirrpt\rinit1.rpt
四、试验说明
如果大字段数据库过长,如这里的text字段类型过长是,在l1中有数据,但是target端的数据库中无对应数据,初步分析原因可能有:
1、defgen定义文件中确定文件长度导致
2、target端编码和clob列相关限制有关(可能性不大)
3、goldengate软件内在机制导致,还需要彻底的阅读官网文档
4、现在好像到target端的最终长度为4000byte(根据数据库编码不同区分汉字、字母、数字),在本测试中,如果source端使用ntext,target只能接收1000个汉字,如果是text类型,可以接受1333个汉字。
5、试验环境说明:sql server 2005 to oracle 11g,source端表(id int primary key auto,t_text text),target端(id number primary key,text_t clob)
—出现异常原因已经找到(2011年2月22日23:27:51)
When the size of a large object exceeds 4K, Oracle GoldenGate stores the data in segments within the Oracle GoldenGate trail. The first 4K is stored in the base segment, and the rest is stored in a series of 2K segments. Oracle GoldenGate does not support the filtering, column mapping, or manipulation of large objects of this size. Full Oracle GoldenGate functionality can be used for objects that are 4K or smaller.
大致意思就是当内容超过4k时,就不能使用过滤、列映射、或者操作大字段,当内容等于或者小于4k时,所有的goldengate函数都可以使用。上面问题是当t_text内容大于4k时,不能进行大对象操作。
疑问:那当有数据超过4k该怎么处理
—试验测试(2011年2月23日23:34:13)
初始化后,同步数据库过程中,异构数据库不同列类型(如:mssql中的text到oracle中的clob),也必须使用sourcedefs,使用适当的函数对列类型进行转换(如:colmap ( id = id , t_lob = @binary(t_lob))),对于大于4k的数据,还是和初始化一样不能被处理。该问题等待寻找解决方案