Tips: AUL License, DBA Tools, weibo.com/dbatools

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版本玩玩吧。

Oracle到MySQL的数据迁移工具

Posted by anysql on 2011-04-02

    前段时间使用SQLULDR2和MySQL的Load Data命令迁移了大量数据, 操作步骤复杂一些, 但性能高, 但对于记录数较少的大量小表, 还是比较麻烦的, 刚好前几天想学习一下MySQL的C客户端编程, 于是就想写一个简洁的从Oracle迁移数据到MySQL的小程序, 作为练习题, 一直相信学什么可以用什么!

    可以下载新工具ora2mysql进行测试, 目前请不要用于做正式迁移. 使用方法如下:

D:\>ora2mysql user1=scott/tiger user2=/@localhost:3306:test table=emp
        0 rows processed at 2011-04-02 15:03:08.
        2 rows processed at 2011-04-02 15:03:08.

    在速度方面,由于不支持Array操作,因此速度比较慢,希望Oracle能让SQL * Plus也能连接MySQL库,或改造一下MySQL客户端,增加Array接口。

D:\>ora2mysql user1=scott/tiger user2=/@::test table1=emp_bak table2=emp
        0 rows processed at 2011-04-02 19:48:51.
    100000 rows processed at 2011-04-02 19:49:17.
    200000 rows processed at 2011-04-02 19:49:42.
    300000 rows processed at 2011-04-02 19:50:07.
    400000 rows processed at 2011-04-02 19:50:32.
    500000 rows processed at 2011-04-02 19:50:57.
    600000 rows processed at 2011-04-02 19:51:23.
    700000 rows processed at 2011-04-02 19:51:48.
    800000 rows processed at 2011-04-02 19:52:14.
    900000 rows processed at 2011-04-02 19:52:39.
  1000000 rows processed at 2011-04-02 19:53:03.
  1100000 rows processed at 2011-04-02 19:53:29.
  1200000 rows processed at 2011-04-02 19:53:56.
  1300000 rows processed at 2011-04-02 19:54:24.
  1400000 rows processed at 2011-04-02 19:54:53.

    目前还不支持BLOB类型, 也不支持字符集的设置, 请大家理解与支持.


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