关于java处理不同数据库字符集的数据同步
两个数据库字符集不一样,如何快速增量同步数据.[@more@]环境: DB-A 字符集:US7ASCII DB-B 字符集:ZHS16GBK 需求: 从DB-A中将一个表的中文数据通过JAVA定时任务同步到DB-B. DB-A库中表的信息如下: CREATE TABLE USER_INFO (USER_ID number, USER_NAME varchar2(50)); 如果用一般的方式来SELECT,和INSERT,不管客户端用什么样的字符集,数据到DB-B上肯定会显示乱码. 解决方法1 (在数据库实现) 解决思路:通过视图将数据转换成二进制数据,绕过字符集的转换,然后让目标库来读取. 1. 在DB-A库上创建视图:
PLSQL不规范的参数命名导致的问题
PLSQL代码编写过程中,对标识符的命名一定要规范,不然会引发一些非常莫名的问题...[@more@]我们先通过环境来引出问题:有一个PROCEDURE用来更新积分表. ****************************************************************************************************desc">heyf@VOUCHER>desc fi_bonus_user_amount; Name Type -------------------------- ------------------------------------ ID VARCHAR2(20) CORPORATION_ID
SELECT也需要COMMIT
SELECT (DBLINK) 需要 COMMIT来释放事务;[@more@]业务环境: A机器10.0.69.101 -- heyf B机器10.2.226.24 -- VOUCHER 有业务需求,B需要去连接A取数据,下面创建一个简单的环境. 在B机器上: TNSNAMES.ora heyf = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.69.101 )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = heyf) ) ) create">heyf@VOUCHER>create database link a connect to heyf identifie
Oracle (block clean out) oracle的块清除
Clean out有2种: fast commit cleanout delayed block cleanout[@more@] 1,如果一个事务(transaction)修改不超过10%buffer cache的数据块时,oracle做的是fast commit cleanout。2,如果一个事务(transaction)修改的块超过10% buffer cache,那么"超过的块"就执行delayed block cleanout,3,在事务commit前,修改的数据块已经写入硬盘,当发生commit时,oracle并不会把block重新读入内存来做cleanout,这样成本太高. 而是把cleanout留到下一次对此块的访问(select,update)时完成。 下面我们来简单看一下这两种情况: -
SQL优化-COUNT_ INDEX的巧用
一个SQL COUNT 优化案例,作一个小结[@more@]SQL需求:在一个8000W的表中,找出修改时间为某一时间段的记录,并且某字段不为空:select count(*) from aliim.udb_user_profile a where a.gmt_modified >= to_date('2008-07-21 14:29:38', 'yyyy-mm-dd hh24:mi:ss') and a.gmt_modified <= to_date('2008-07-21 15:34:50', 'yyyy-mm-dd hh24:mi:ss') and a.AEP_USER_ID is not null首先想到的是在 gmt_modified 字段中创建单列索引,让查询走索引,并返回到表中过滤 a.AEP_USER_ID is not null.create index udb_user_profile_g
行的存储(块内连接与块外连接)
都说ORACLE一个行能存储1000个字段,本人在看CONCEPTS的时候发现这么一段:Oracle stores each row of a database table containing data for less than 256 columns as one or more row pieces.咋一眼看上去,以为CONCEPTS说只能存储256个字段。 再仔细看:[@more@]If an entire row can be inserted into a single data block,then Oracle stores the row as one row piece. However, if all of a row’s data cannot be inserted into a single data block or an update to an existing row causes the rowto outgrow its data block,
关于锁的快速定位
当我们在执行某个update,或delete的时候,发布自己的SQL等在那里,如何更快速地定位到问题源?[@more@]--------查看哪些对象被锁了!select t2.username, t2.sid, t2.serial#, t3.object_name, t2.OSUSER, t2.MACHINE, t2.PROGRAM from v$locked_object t1, v$session t2, dba_objects t3 where t1.session_id = t2.sid and t1.object_id = t3.object_id order by t2.logon_time;--------察看表锁(可以查看什么类型的锁)select /*+ rule */ s.sid sid,s.username username,s.machine machine,l.
SQL优化好助手:Runstats
在SQL优化的过程中,我们有时候需要比较两个SQL或者过程的性能.这里推荐一个工具:RUNSTATS包[@more@]这个包在使用前需要自己创建,脚本如下: conn / as sysdba; grant select on V_$STATNAME to &&USERNAME; grant select on V_$MYSTAT to &USERNAME; grant select on V_$TIMER to &USERNAME; grant select on V_$LATCH to &USERNAME; drop table run_stats; create global temporary table run_stats ( runid varchar2(15), name varchar2(80), value int ) on commit preserve rows;--create VIEWcr
oracle的正则表达式(regular expression)简单介绍
Oracle 10g正则表达式提高了SQL灵活性。有效的解决了数据有效性, 重复词的辨认, 无关的空白检测,或者分解多个正则组成的字符串等问题。[@more@]Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。特殊字符:'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。'$' 匹配输入字符串的结尾位置。如果设置了 Reg
执行计划大刚OUTLINE的管理
10G,LINUX as3[@more@]更改优化器 alter session set optimizer_boal=choose;--first_rows创建OUTLINE,看执行计划,如果计划合适,就为SQL创建OUTLINE create or replace outline myoutline for category mycategory on select empno ,ename from emp where empno>0; 或者 alter session set create_stored_outlines=true; alter session set create_stored_outlines=false; -----注意,以上两种方式产生的OUTLINE有区别: 用例子来说明。 <见CURSOR_CHARING=FORCE与大刚>让SESSION使用O
用SQLLOAD导入CLOB数据
10G,SUSE 9,SQLPLUS[@more@]1,创建表结构create table sqlload_test ( EMPNO number,ENAME varCHAR2(20),JOB varCHAR2(20),MGR number,SAL number,COMM number,DEPTNO number,resume clob)2,建立数据oracle@linux:~> cat > ulcase91.dat <<EOFResume for Mary ClarkCareer Objective: Manage a sales team with consistent record breakingperformance.Education: BA Business University of Iowa 1992Experience: 1992-1994 - Sales Support at MicroSales Inc.Won "Best Sales Support" award in 1993 and 199419
DG-备库日志的应用迟时检查
ora9i,LINUXas3 ,DG归档日志管理,看书笔记,测试 ,测试前请先配置SSH密钥[@more@]#first set envORACLE_BASE=/SERVER/ora9;export ORACLE_BASEORACLE_HOME=$ORACLE_BASE/product/9.2;export ORACLE_HOMEPATH=$ORACLE_HOME/bin:$PATH;export PATHORACLE_SID=ora9i; export ORACLE_SID#start checkDATE=`date +%Y-%m-%d:%H:%M:%S`filepath=$ORACLE_BASE/oradata/$ORACLE_SID/archive/logpath=$ORACLE_BASE/admin/$ORACLE_SID/bdumpremotefile=`ssh -p 10088 oracle@192.168.18.91 "ls -t /SERVER/ora9/oradata/ora9i/archive/*|head -
DG-在主库/备库删除已经应用过的日志.txt
ora9i,LINUXas3 ,DG归档日志管理,看书笔记,测试[@more@]ORACLE_BASE=/SERVER/ora9;export ORACLE_BASEORACLE_HOME=$ORACLE_BASE/product/9.2;export ORACLE_HOMEPATH=$ORACLE_HOME/bin:$PATH;export PATHORACLE_SID=ora9i; export ORACLE_SID#delete archive log on STANDBY database which has been appliedgrep "Media Recovery Log" $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_${ORACLE_SID}.log| awk '{print "rm -f ",$4}' >$ORACLE_BASE/rmarchlog.shcd $ORACLE_BASE/admin/$ORACLE_SID/bdumpcat alert_
Oracle 9+ Data Gard环境中重建控制文件
环境:LINUX AS 3+ORA 9.2.4 +DATA GUARDMAX LOGFILES ,RESETLOGS[@more@]经过,已经搭建好了基于归档日记传输的最大性能保护模式的DG,想把它改成基于REDO 日记传输模式。在备库新建STANDBY REDO 的时候报错:SQL> alter database add standby logfile group 4 ('/SERVER/ora9/oradata/ora9i/redo04.log') size 100M;Database altered.SQL> alter database add standby logfile group 5 ('/SERVER/ora9/oradata/ora9i/redo05.log') size 100M;Database altered.SQL> alter database add standby logfile group 6 ('/SERVER/or
Ora10G 用ASH生成性能报告
报告内容:TOP等待事件,TOP SQL,TOP SQL命令类型,TOP Session内容.[@more@]具体实现方式: SQL> @$ORACLE_HOME/rdbms/admin/ashrpt.sqlCurrent Instance~~~~~~~~~~~~~~~~DB Id DB Name Inst Num Instance----------- ------------ -------- ------------631770879 ORA10 1 ora10Specify the Report Type~~~~~~~~~~~~~~~~~~~~~~~Enter 'html' for an HTML report, or 'text' for plain textDefaults to 'html'Enter value for report_type: text --输入产生的报告文件类型Type Specified: textInstances in this Workload Repository sche
Ora10G跨平台传输表空间
10G新特性[@more@]一,查看源数据库平台信息SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;PLATFORM_NAME ENDIAN_FORMAT---------------------------------------------Linux IA (32-bit) Little二,查看目标机平台信息SQL> SELECT d.PLATFORM_NAME, ENDIAN_FORMAT FROM V$TRANSPORTABLE_PLATFORM tp, V$DATABASE d WHERE tp.PLATFORM_NAME = d.PLATFORM_NAME;PLATFORM_NAME ENDIAN_FORMAT-------------
关于oracle 10G for suse 9 的rman: can't open target
刚在SUSE 9 上装完ORACLE 10G,并DBCA建了数据库,想对数据库作一个全备份.结果 oracle@linux:/> rman target /rman: can't open target[@more@]这是由于调用的是非Oracle的RMAN的缘故:oracle@linux:/> which rman/usr/X11R6/bin/rman在/usr/X11R6/bin/下存在一个名为rman的命令:oracle@linux:/> ./rman -helprman [-f <ASCII|roff|TkMan|Tk|Sections|HTML|XML|MIME|LaTeX|LaTeX2e|RTF|pod>] [-S(ource of man page passed in)] [-F(ormatted man page passed in)] [-r <man reference printf string>] [-l