0%

如果不再需要使用rman来管理目标数据库,或者目标数据库已经崩溃,可以从rman恢复目录注销掉目标数据库。这样只会从恢复目录中移除目标数据库备份相关的元数据,物理备份不会被删除。

连接目标数据库

最简单的就是连上目标数据库和恢复目录,然后执行unregister database
[sql]
$ rman target user/passwd@tgt catalog user/passwd@catlog;
RMAN> unregister database;
database name is “orcl” and DBID is 1276927241
Do you really want to unregister the database (enter YES or NO)?
[/sql]

不连接目标数据库

如果目标数据库已经崩溃,无法再连接时,可以通过指定目标数据库的DBID或者直接使用名字来注销数据库。

如果不知道目标数据库的DBID或名字,先通过rman数据库的rc_database视图(rc指recovery catalog)来查询相关信息。谨记rman恢复目录可以同时为多个目标数据库提供服务。
[sql]
$ sqlplus user/passwd@catlog;
SQL> select * from rc_database;
DB_KEY DBINC_KEY DBID NAME RESETLOGS_CHANGE# RESETLOGS_TIME


10161 41305 1276927241 ORCL 1981608693 28-JUL-12
[/sql]

使用DBID
[sql]
$ rman catalog user/passwd@catlog;
RMAN> set dbid=1276927241;
executing command: SET DBID
database name is “ORCL” and DBID is 1276927241
RMAN> unregister database;
database name is “ORCL” and DBID is 1276927241
Do you really want to unregister the database (enter YES or NO)?
[/sql]

直接使用目标数据库名字
[sql]
$ rman catalog user/passwd@catlog;
RMAN> unregister database orcl;
database name is “ORCL” and DBID is 1276927241
Do you really want to unregister the database (enter YES or NO)? YES
database unregistered from the recovery catalog
[/sql]

移除恢复目录

如果rman恢复目录不再使用,可以drop掉:
[sql]
$ rman catalog user/passwd@catlog;
RMAN> drop catalog;
[/sql]

References:
[1]Remove a Database from a RMAN Recovery Catalog

===
[erq]

Active Dataguard

在Oracle 11g之前,物理备库(physical Standby)在应用redo的时候,是不可以打开的,只可以mount。从11g开始,在应用redo的时候,物理备库可以处于read-only模式,这就称为Active Dataguard 。通过Active Dataguard,可以在物理备库进行查询或者导出数据,从而减少对主库的访问和压力。

Active Dataguard适用于一些只读性的应用,比如,有的应用程序只是查询数据,进行一些报表业务,不会产生redo数据,这些应用可以转移到备库上,避免对主库资源的争用。

Oracle Active Dataguard 是Oracle Database Enterprise Edition的一个功能,需要额外付费授权来使用这个功能。

如需启用Active Dataguard, 只需要将备库以 read-only 模式打开,而且执行 ALTER DATABASE RECOVER MANAGED STANDBY DATABASE语句就可以。需要注意的是:主库和备库的COMPATIBLE 参数至少要设置为11.0.0。

Duplicate from active database

11g以前使用rman创建备库需要先进行备份,然后将备份传输到备库或者可以被备库直接访问到,会大量占用额外的存储空间。
11g提供了从运行的主库直接创建备库的功能,这样就不再需要提前rman备份数据库,数据库直接从target拷贝到auxiliary,方便快捷,当然其他的一些设置是省不了的。

References:
[1]Oracle 11g Data Guard 物理备库快速配置指南(上)
[2]Oracle 11g Data Guard 物理备库快速配置指南(下)
[3]Creating a Standby Database with Recovery Manager

===
[erq]

硬件维护的时候有人不小心把生产库的电源断掉了,重新启动盘柜和服务器后,oracle 10g 10.2.0.4 startup时出现错误提示:

[sql]
数据库装载完毕。
ORA-01122: 数据库文件 1 验证失败
ORA-01110: 数据文件 1: ‘E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF’
ORA-01207: 文件比控制文件更新 - 旧的控制文件 (file is more recent than controlfile - old controlfile)
[/sql]

由于时间紧迫,且对此错误不甚熟悉,就先将生产库切到了dataguard物理备库,有时间再研究此问题如何恢复。

References:
[1]ORA-01207: old control file完全解决方案

===
[erq]

查看rman脚本备份日志,发现如下错误:

1
2
3
4
5
6
7
8
starting full resync of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of crosscheck command at 10/10/2014 10:26:33
RMAN-03014: implicit resync of recovery catalog failed
RMAN-03009: failure of full resync command on default channel at 10/10/2014 10:26:33
ORA-01654: unable to extend index RMAN_USR.RLH_U1 by 128 in tablespace RMAN_TS

rman恢复目录所在表空间无法扩展

查看表空间利用率
[sql]
SQL> SELECT * FROM dba_tablespace_usage_metrics ORDER BY used_percent DESC;
[/sql]
恢复目录所在表空间利用率已经达到96%

扩大数据文件大小
[sql]
SQL> alter database datafile ‘/u01/oradata/catlogdb/rman01.dbf’ resize 300M;
[/sql]

重新运行rman,问题解决。

===
[erq]

KVM客户机鼠标集成其实很简单,命令行里添加一个参数-usbdevice tablet就可以了,不过KVM运行带图形界面的客户机感觉还是不如virtualbox用起来更方面。KVM更适合服务器领域。

如果手上没有移动存储器,也不想开ftp,那么两台电脑之间可以使用nc(netcat)传输文件,比如现在要在一台mac和一台linux机器之间传输文件。

要接收文件的机器开启监听准备接收文件,本机器的ip地址为1.2.3.4

1
$ nc -l -p 1234 > foo.bar

发送文件的机器开始发送文件

1
$ nc 1.2.3.4 1234 < foo.bar

===
[erq]

HTML页面中储存自定义信息的方式能想到的大概有以下几种:

  • 重用HTML元素的标准属性,比如 id、class、rel 和 title等,这些属性的值根据自己的需要进行解释。DWZ框架使用了这种方式。
  • 上面的方式毕竟违反了标准的语意,容易造成一些问题。HTML5通过标准化的data-数据属性来支持在DOM元素上附加自定义数据
  • 使用span或div元素包含自定义信息,通过样式(display: none;)使其不可见。
  • 使用javascript代码自定义页面DOM元素与Javascript数据结构的关联
  • 使用JQuery的缓存系统,.data方法向DOM元素附加自定义数据,.removeData移除DOM元素关联的自定义数据。如果dom元素从页面中remove,则JQuery会将其关联的自定义数据一并移除,无需显式调用.removeData。但是如果只是detach元素,则不会清除关联数据。这种方式是JQuery对上一种方式的标准化,其缓存系统十分完善。

以上几种方法如无特殊要求,建议使用JQuery的缓存系统。

===
[erq]

因为sql语句中用了中文的”月”,而NLS_LANG设置为”AMERICAN_AMERICA.AL32UTF8”,所以oracle提示了错误”ORA-01843 not a valid month”,只需将NLS_LANG设置为”SIMPLIFIED CHINESE_CHINA.AL32UTF8”即可。

Mac OS X使用BSD版本的命令行工具,虽然都共同遵守POSIX标准,但其与GUN命令行工具仍然有很多的不同,而且明显不如GNU版本的命令好用。

可以用homebrew来安装GNU命令行工具,下面是脚本,更详细的内容请参考[1]
可以先安装最新版本的bash,再运行下面的脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/usr/local/bin/bash

# add source
# brew tap homebrew/dupes

# GNU Coreutils
brew install coreutils

# build tools
brew install autoconf
brew install m4
brew install make

# misc
brew install binutils
brew install diffutils
brew install ed
brew install findutils
brew install gawk
brew install gnu-indent
brew install gnu-sed
brew install gnu-tar
brew install gnu-which
brew install gnutls
brew install grep
brew install gzip
brew install screen
brew install watch
brew install wdiff
brew install wget

# third party
brew install git
brew install less
brew install openssh
brew install python3
brew install rsync
brew install unzip
brew install vim

Update(2020/01/26):
homebrew/dupes已经deprecated,其下的formula迁移到brew/core下。
–default-names选项已经无效。

References:
[1]Install and Use GNU Command Line Tools on Mac OS X

===
[erq]

XMLHttpRequest Level 2 简称XHR2添加了ProgressEvent接口,使得可以不借助第三方插件,使用原生Javascript就可以实现上传下载进度监控。

下载的progess事件由XMLHttpRequest对象自身触发,而上传的progess由XMLHttpRequest.upload对象触发。

使用原生的Javascript可以这样写:

1
2
3
4
5
var xhr = new XMLHttpRequest();
// 下载进度监控
xhr.addEventListener("progress", download_progress_handler, false);
// 上传进度监控
xhr.upload.addEventListener("progress", upload_progress_handler, false);

如果使用JQuery则需要一些曲折,因为JQuery没有对上传下载进度监控提供直接的支持。但是$.ajax函数提供了xhr和xhrFields配置接口,可以修改JQuery内部使用的XMLHttpRequest对象的属性,甚至可以提供自己的XMLHttpRequest对象供JQuery使用。

所有有了以下两种方式来配置$.ajax实现进度监控:

使用xhr配置

1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
//.....
xhr: function() {
// 获取JQuery内部使用的XMLHttpRequest对象
var xhr = $.ajaxSettings.xhr();
// 下载进度监控
xhr.addEventListener('progress', download_progress_handler, false);
// 上传进度监控
xhr.upload.addEventListener('progress', upload_progress_handler, false);
return xhr;//一定要返回,不然jQ没有XHR对象用了
}
});

使用xhrFields配置

1
2
3
4
5
6
7
8
9
10
11
12
$.ajax({
//......
xhrFields: {
onsendstart: function() {
// this指向JQuery内部使用的XMLHttpRequest对象
// 下载进度监控
this.addEventListener('progress', download_progress_handler, false);
// 上传进度监控
this.upload.addEventListener('progress', upload_progress_handler, false);
}
}
});

进度事件处理函数

此时的事件对象为ProgressEvent

1
2
3
4
5
6
7
8
function upload_progress_handler (e) {
if (e.lengthComputable) {
var percentComplete = e.loaded / e.total;
// ...
} else {
// 不能计算进度
}
}

References:
[1]Using XMLHttpRequest
[2]jQuery+FormData+文件上传+上传进度

===
[erq]