Tips: ASM Recovery, AUL License, DBA Tools, MyDUL.net, weibo.com/dbatools

用squldr2进行Oracle到MySQL的数据迁移

Posted by anysql on 2012-05-17

    从Oracle迁移数据到MySQL时,通常用文本或SQL语句的方式,但都为MySQL的特殊字符处理而发愁,后来淘宝丁奇告诉MySQL的标准函数中有unhex函数,可以将十六进制的串转换成原来的字符串,从而轻松解决原来很麻烦的特殊字符处理的问题,于是对sqluldr2作了改进处理,对于所有的字符字段,都直接转换成十六进制串处理算了。

E:\dbpress>sqluldr2 anysql/anysql query=tab text=mysqlins
INSERT INTO `tab` (`TNAME`,`TABTYPE`,`CLUSTERID`) VALUES
(unhex(’4150505f43415445474f5259′),unhex(’5441424c45′),null),
(unhex(’4150505f444550454e4453′),unhex(’5441424c45′),null),
……
(unhex(’545f4d565445535432′),unhex(’5441424c45′),null);

    不管增加了多不功能,sqluldr2都保持了一如即往的导出性能,生成复杂INSERT语句的速度和直接导出文本一样快。

E:\dbpress>sqluldr2 anysql/anysql query=test3 text=mysqlins file=temp.txt
      0 rows exported at 2012-05-17 08:38:51, size 0 MB.
1000000 rows exported at 2012-05-17 08:38:59, size 244 MB.
2000000 rows exported at 2012-05-17 08:39:11, size 492 MB.
3000000 rows exported at 2012-05-17 08:39:23, size 740 MB.
4000000 rows exported at 2012-05-17 08:39:37, size 984 MB.
4764032 rows exported at 2012-05-17 08:39:46, size 1175 MB.
        output file temp.txt closed at 4764032 rows, size 1175 MB.

    有了这个功能后,sqluldr2会成为最流行的从Oracle迁移数据到MySQL的工具,我们自己及淘宝DBA都在日常工作中使用它。

WebChart的JSON格式输出

Posted by anysql on 2011-12-09

    WebChart增加JSON格式输出,可以将查询结果以JSON格式的文本进行输出,直接作为ExtJS的Ext.data.Store的输入. 页面(jsontest.rhtml)定义如下:

webchart.doctype=json

webchart.query_1=select empno, ename from emp order by empno

    用浏览器访问页面时,返回JSON格式的纯文本.

{
  “metaData”:
  {
      “root”: “rows”,
      “fields”: [
        {"name": "empno", "type": "int"},
        {"name": "ename"}],
      “remoteSort”: true
  },
  “rows”:
  [
      {
        "empno": 1,
        "ename": "Lou Fangxin"
      },
      {
        "empno": 2,
        "ename": "Zhi Qiong"
      }
  ]
}

    在ExtJS 4中可以直接用如下代码,得到一个Store类型变量.

Ext.define(‘mydata’, {extend: ‘Ext.data.Model’});
var store2 = Ext.create(‘Ext.data.Store’,
    {model: ‘mydata’, proxy:{type: ‘ajax’, url: ‘sampledata.txt’, reader: {type: ‘json’}}});

    然后用ExtJS进行表格输出或者画图,将数据接口直接交给WebChart来方便地处理.

多个测试环境的表结构同步

Posted by anysql on 2011-04-19

    一个复杂系统往往会有几套开发测试环境,对于开发DBA或测试环境DBA来讲,维护这些环境之间的同步是一个比较烦琐的事情。在2005年时,曾和当时的三个同事,花了足足三天时间来手工同步两个环境的表结构差异,最后促使我去开发一个表结构自动同步工具,现在是对那个工具的进一步升级。

– GetDDL: DDL Script Generator for Oracle, Release 3.0.1
– (@) Copyright Lou Fangxin (AnySQL.net) 2010, all rights reserved.
– Oracle Data Recovery, System Tuning and Monitoring and Tuning Service

Usage: ocidiff fromuser=… touser=… file=…

Options:
  fromuser  — Source Connection String
  fromschema — Source Schema to Switch
  touser    — Destination Connection String
  toschema  — Destination Schema to Swith
  tstab      — Tablespace for Tables
  tsind      — Tablespace for Indexes
  sync      — Sync List (ALL,SEQUENCE,TABLE,INDEX,VIEW,SOURCE,COMMENT)
  file      — Output Script File Name
  log        — SQL*Plus Spool log file name
  auto      — Automaticall call SQL*Plus to sync(YES)

    上面的命令行选项,对于DBA来讲应当都比较容易理解,就不一个一个讲了。File和Log选项有一些特殊的设置,指定文件名时可以用%Y来表示年份,用%M来表示月份,同理用%D来表示日期,以便给自动同步工具留下足够的运行日志。

ocidiff …… file=scott_%%y%%m%%d.sql log=scott_%%y%%m%%d.log …

    运行时加上”AUTO=YES”选项,会自动调用SQL*Plus连接到远程库上执行,执行后会留带日期的SQL和日志文件。

D:\ocidiff>dir /b scott_*
scott_20110419.log
scott_20110419.sql

    对于生成的自动同步SQL的脚本准确性,还需要进行大量的测试及进一步的改进,下载试试吧。

AUL for Oracle ASM数据恢复测试

Posted by anysql on 2011-04-18

    创建了一个跨越在两个盘中的Oracle ASM表空间,并在上面建了一个有49万条记录的表,用来进行ASM恢复测试。

SQL> select disk_number, name,path from v$asm_disk;

DISK_NUMBER NAME            PATH
———– —————- ——————————
          0 TEST_0000        D:\ORACLEASM\FILE01.ASM
          1 TEST_0001        D:\ORACLEASM\FILE02.ASM

SQL> create table emp_asm tablespace asmdemo as
  2  select * from emp_bak where rownum < 500000;

    第一次测试是在两个ASM盘都在的情况,应当可以恢复出49万条记录才是准确的,先从ASM中恢复出Oracle数据文件。

ASM> disk disk.txt
  2 ASM disks opened.
—- ———————————–
  0 d:\oracleasm\file01.asm
  1 d:\oracleasm\file02.asm
ASM> scan
RFN File            Size  Blocks
—- ————— —– ——–
  5 aulasm_0005.dbf    25    3079
ASM> create file aulasm_0005.dbf size 26
ASM> open rfn 5 file aulasm_0005.dbf
RFN File
—- ———————————————————
  5 aulasm_0005.dbf
ASM> restore
Restore by ASM extent map file.

    然后在AUL中进行数据恢复,确认是不是恢复出全部49万条记录。

AUL> unload object 13456 to 13456.txt;
2011-04-18 14:52:45
Sucessfully unload 499999 rows …
2011-04-18 14:53:05

    第二次测试中丢失了第二块盘,应当可以恢复出大约一半的记录才是对的,先从ASM中恢复出Oracle数据文件。

ASM> disk disk.txt
  1 ASM disks opened.
—- ———————————–
  0 d:\oracleasm\file01.asm
ASM> scan
RFN File            Size  Blocks
—- ————— —– ——–
  5 aulasm_0005.dbf    25    3079
ASM> create file aulasm_0005.dbf size 26
ASM> open rfn 5 file aulasm_0005.dbf
RFN File
—- ———————————————————
  5 aulasm_0005.dbf
ASM> restore
Restore by ASM extent map file.

    然后在AUL中进行数据恢复,看看从AUL中恢复出来多少条记录,在这里刚好是将近一半,说明结果良好。

AUL> unload object 13456 to 13456.txt;
2011-04-18 14:55:09
Sucessfully unload 257375 rows …
2011-04-18 14:55:20

    第三次测试中丢失了第一块盘,应当可以恢复出另一半的记录才是对的,理论上第二次和第三次恢复记录数之和应当和第一次恢复的记录数相等。

ASM> disk disk.txt
  1 ASM disks opened.
—- ———————————–
  0 d:\oracleasm\file02.asm
ASM> scan
RFN File            Size  Blocks
—- ————— —– ——–
  5 aulasm_0005.dbf    24    3071
ASM> create file aulasm_0005.dbf size 26
ASM> open rfn 5 file aulasm_0005.dbf
RFN File
—- ———————————————————
  5 aulasm_0005.dbf
ASM> restore
Restore by ASM extent map file.

    然后在AUL中进行数据恢复,看看从AUL中恢复出来多少条记录。计算了一下第二次和第三次恢复出来的记录数之后刚好等于第一次恢复的记录数,证明ASM恢复软件可用。

AUL> unload object 13456 to 13456.txt;
2011-04-18 14:57:30
Sucessfully unload 242624 rows …
2011-04-18 14:57:40

    顺便透露一个Linux版AUL的改进消息,许可证不再动态了,只有服务器重起了才会改变,以方便大家进行数据恢复,毕竟Linux服务器很稳定,对大家来讲应当是更有利的许可证模式。

Oracle ASM灾难恢复工具–AULASM

Posted by anysql on 2011-04-15

    昨天晚上花了几个小时时间,写了一个Oracle ASM的灾难恢复软件, 当Oracle ASM一个或多个盘损坏或丢失时, 可以最大化地将其余盘上的数据恢复出来.

    程序还是采用不为大家所爱的命令行界面.

AUL : AnySQL UnLoader(MyDUL) for Oracle ASM, release 1.0.0

(C) Copyright Lou Fangxin 2011 (AnySQL.net), all rights reserved.

ASM> help
  DISK      — open ASM disks.
  SCAN      — scan ASM disks
  RESTORE    — restore data file from ASM
  CREATE    — create empty data file
  OPEN      — open data file
  QUIT/EXIT  — exit the program.

    打开磁盘组文件, 配置文件中列出各个盘的路径或镜象文件位置就行.

ASM> disk disk.txt
  2 ASM disks opened.
—- ———————————–
  0 d:\oracleasm\file01.asm
  1 d:\oracleasm\file02.asm

    扫描磁盘组,找出可能的数据文件.

ASM> scan
  5 aulasm_0005.dbf    1      12

    创建空的数据文件, 并打开.

ASM> create file aulasm_0005.dbf size 1
ASM> open rfn 5 file aulasm_0005.dbf
RFN File
—- ———————————————————
  5 aulasm_0005.dbf

    从ASM中读出数据块,写入对应的文件。

ASM> restore

    然后用AUL去恢复,这里步骤就不详解了。

D:\oracleasm>aul5b
Register Code: QYOW-EHSO-EIXO-MEKA-VQFG
AUL : AnySQL UnLoader(MyDUL) for Oracle 8/8i/9i/10g/11g, release 5.1.2

(C) Copyright Lou Fangxin 2005-2010 (AnySQL.net), all rights reserved.

AUL> open db.txt
*  ts#  fno  rfn ver bsize    blocks filename
- —- —- —- — —– ———- ———————————–
Y    6    5    5 a2  8192      16384 aulasm_0005.dbf
AUL> scan data
2011-04-15 09:19:38
RDBA=0x0140000c(5/12),type=0×06,fmt=0xa2,seq=0×02,flag=0×04
seg/obj=0×00003486=13446,csc=0×0000.00412ee2,itc=3,typ=1 – DATA
tab#=  0    nrow=  2    offs=  0

2011-04-15 09:19:38

    下载Windows版本玩玩吧。


(©)Copyright 2006-2010 AnySQL.net. All rights reserved.