Archive for 一月 21st, 2009

kfed disk header

星期三, 一月 21st, 2009


kfbh.endian: 1 ; 0×000: 0×01 定义平台的类型是little还是big,其中little是1 big 0
select * from GV_$TRANSPORTABLE_PLATFORM
2*
SQL> /

INST_ID PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
———- ———– ——————————————————————————– ————–
1 1 Solaris[tm] OE (32-bit) Big
1 2 Solaris[tm] OE (64-bit) Big
1 7 Microsoft Windows IA (32-bit) Little
1 10 Linux IA (32-bit) Little
1 6 AIX-Based Systems (64-bit) Big
1 3 HP-UX (64-bit) Big
1 5 HP Tru64 UNIX Little
1 4 HP-UX IA (64-bit) Big
1 11 Linux IA (64-bit) Little
1 15 HP Open VMS Little
1 8 Microsoft Windows IA (64-bit) Little

INST_ID PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
———- ———– ——————————————————————————– ————–
1 9 IBM zSeries Based Linux Big
1 13 Linux 64-bit for AMD Little
1 16 Apple Mac OS Big
1 12 Microsoft Windows 64-bit for AMD Little
1 17 Solaris Operating System (x86) Little
1 18 IBM Power Based Linux Big

17 rows selected.

kfbh.hard: 130 ; 0×001: 0×82 HARD.magic and block size
kfbh.type: 1 ; 0×002: KFBTYP_DISKHEAD 元数据块类型 这个就是磁盘头
kfbh.datfmt: 1 ; 0×003: 0×01
kfbh.block.blk: 0 ; 0×004: T=0 NUMB=0×0
kfbh.block.obj: 2147483649 ; 0×008: TYPE=0×8 NUMB=0×1
kfbh.check: 580165501 ; 0×00c: 0×22949f7d
kfbh.fcn.base: 212 ; 0×010: 0×000000d4
kfbh.fcn.wrap: 0 ; 0×014: 0×00000000
kfbh.spare1: 0 ; 0×018: 0×00000000
kfbh.spare2: 0 ; 0×01c: 0×00000000
kfdhdb.driver.provstr: ORCLDISK ; 0×000: length=8
kfdhdb.driver.reserved[0]: 0 ; 0×008: 0×00000000
kfdhdb.driver.reserved[1]: 0 ; 0×00c: 0×00000000
kfdhdb.driver.reserved[2]: 0 ; 0×010: 0×00000000
kfdhdb.driver.reserved[3]: 0 ; 0×014: 0×00000000
kfdhdb.driver.reserved[4]: 0 ; 0×018: 0×00000000
kfdhdb.driver.reserved[5]: 0 ; 0×01c: 0×00000000
kfdhdb.compat: 168820736 ; 0×020: 0×0a100000
kfdhdb.dsknum: 1 ; 0×024: 0×0001
kfdhdb.grptyp: 2 ; 0×026: KFDGTP_NORMAL
kfdhdb.hdrsts: 3 ; 0×027: KFDHDR_MEMBER
kfdhdb.dskname: TEST_ASM_0001 ; 0×028: length=13
kfdhdb.grpname: TEST_ASM ; 0×048: length=8
kfdhdb.fgname: TEST_ASM_0001 ; 0×068: length=13
kfdhdb.capname: ; 0×088: length=0
kfdhdb.crestmp.hi: 32917154 ; 0×0a8: HOUR=0×2 DAYS=0×15 MNTH=0×1 YEAR=0×7d9
kfdhdb.crestmp.lo: 954749952 ; 0×0ac: USEC=0×0 MSEC=0×215 SECS=0xe MINS=0xe
kfdhdb.mntstmp.hi: 32917167 ; 0×0b0: HOUR=0xf DAYS=0×15 MNTH=0×1 YEAR=0×7d9
kfdhdb.mntstmp.lo: 2410016768 ; 0×0b4: USEC=0×0 MSEC=0×17c SECS=0×3a MINS=0×23
kfdhdb.secsize: 512 ; 0×0b8: 0×0200
kfdhdb.blksize: 4096 ; 0×0ba: 0×1000
kfdhdb.ausize: 1048576 ; 0×0bc: 0×00100000
kfdhdb.mfact: 113792 ; 0×0c0: 0×0001bc80
kfdhdb.dsksize: 1019 ; 0×0c4: 0×000003fb
kfdhdb.pmcnt: 2 ; 0×0c8: 0×00000002
kfdhdb.fstlocn: 1 ; 0×0cc: 0×00000001
kfdhdb.altlocn: 2 ; 0×0d0: 0×00000002
kfdhdb.f1b1locn: 2 ; 0×0d4: 0×00000002
kfdhdb.redomirrors[0]: 0 ; 0×0d8: 0×0000
kfdhdb.redomirrors[1]: 1 ; 0×0da: 0×0001
kfdhdb.redomirrors[2]: 2 ; 0×0dc: 0×0002
kfdhdb.redomirrors[3]: 65535 ; 0×0de: 0xffff
kfdhdb.dbcompat: 168820736 ; 0×0e0: 0×0a100000
kfdhdb.grpstmp.hi: 32917154 ; 0×0e4: HOUR=0×2 DAYS=0×15 MNTH=0×1 YEAR=0×7d9
kfdhdb.grpstmp.lo: 954423296 ; 0×0e8: USEC=0×0 MSEC=0xd6 SECS=0xe MINS=0xe
kfdhdb.ub4spare[0]: 0 ; 0×0ec: 0×00000000
kfdhdb.ub4spare[1]: 0 ; 0×0f0: 0×00000000
kfdhdb.ub4spare[2]: 0 ; 0×0f4: 0×00000000
kfdhdb.ub4spare[3]: 0 ; 0×0f8: 0×00000000
kfdhdb.ub4spare[4]: 0 ; 0×0fc: 0×00000000
kfdhdb.ub4spare[5]: 0 ; 0×100: 0×00000000
kfdhdb.ub4spare[6]: 0 ; 0×104: 0×00000000
kfdhdb.ub4spare[7]: 0 ; 0×108: 0×00000000
kfdhdb.ub4spare[8]: 0 ; 0×10c: 0×00000000
kfdhdb.ub4spare[9]: 0 ; 0×110: 0×00000000
kfdhdb.ub4spare[10]: 0 ; 0×114: 0×00000000
kfdhdb.ub4spare[11]: 0 ; 0×118: 0×00000000
kfdhdb.ub4spare[12]: 0 ; 0×11c: 0×00000000
kfdhdb.ub4spare[13]: 0 ; 0×120: 0×00000000
kfdhdb.ub4spare[14]: 0 ; 0×124: 0×00000000
kfdhdb.ub4spare[15]: 0 ; 0×128: 0×00000000
kfdhdb.ub4spare[16]: 0 ; 0×12c: 0×00000000
kfdhdb.ub4spare[17]: 0 ; 0×130: 0×00000000
kfdhdb.ub4spare[18]: 0 ; 0×134: 0×00000000
kfdhdb.ub4spare[19]: 0 ; 0×138: 0×00000000
kfdhdb.ub4spare[20]: 0 ; 0×13c: 0×00000000
kfdhdb.ub4spare[21]: 0 ; 0×140: 0×00000000
kfdhdb.ub4spare[22]: 0 ; 0×144: 0×00000000
kfdhdb.ub4spare[23]: 0 ; 0×148: 0×00000000
kfdhdb.ub4spare[24]: 0 ; 0×14c: 0×00000000
kfdhdb.ub4spare[25]: 0 ; 0×150: 0×00000000
kfdhdb.ub4spare[26]: 0 ; 0×154: 0×00000000
kfdhdb.ub4spare[27]: 0 ; 0×158: 0×00000000
kfdhdb.ub4spare[28]: 0 ; 0×15c: 0×00000000
kfdhdb.ub4spare[29]: 0 ; 0×160: 0×00000000
kfdhdb.ub4spare[30]: 0 ; 0×164: 0×00000000
kfdhdb.ub4spare[31]: 0 ; 0×168: 0×00000000
kfdhdb.ub4spare[32]: 0 ; 0×16c: 0×00000000
kfdhdb.ub4spare[33]: 0 ; 0×170: 0×00000000
kfdhdb.ub4spare[34]: 0 ; 0×174: 0×00000000
kfdhdb.ub4spare[35]: 0 ; 0×178: 0×00000000
kfdhdb.ub4spare[36]: 0 ; 0×17c: 0×00000000
kfdhdb.ub4spare[37]: 0 ; 0×180: 0×00000000
kfdhdb.ub4spare[38]: 0 ; 0×184: 0×00000000
kfdhdb.ub4spare[39]: 0 ; 0×188: 0×00000000
kfdhdb.ub4spare[40]: 0 ; 0×18c: 0×00000000
kfdhdb.ub4spare[41]: 0 ; 0×190: 0×00000000
kfdhdb.ub4spare[42]: 0 ; 0×194: 0×00000000
kfdhdb.ub4spare[43]: 0 ; 0×198: 0×00000000
kfdhdb.ub4spare[44]: 0 ; 0×19c: 0×00000000
kfdhdb.ub4spare[45]: 0 ; 0×1a0: 0×00000000
kfdhdb.ub4spare[46]: 0 ; 0×1a4: 0×00000000
kfdhdb.ub4spare[47]: 0 ; 0×1a8: 0×00000000
kfdhdb.ub4spare[48]: 0 ; 0×1ac: 0×00000000
kfdhdb.ub4spare[49]: 0 ; 0×1b0: 0×00000000
kfdhdb.ub4spare[50]: 0 ; 0×1b4: 0×00000000
kfdhdb.ub4spare[51]: 0 ; 0×1b8: 0×00000000
kfdhdb.ub4spare[52]: 0 ; 0×1bc: 0×00000000
kfdhdb.ub4spare[53]: 0 ; 0×1c0: 0×00000000
kfdhdb.ub4spare[54]: 0 ; 0×1c4: 0×00000000
kfdhdb.ub4spare[55]: 0 ; 0×1c8: 0×00000000
kfdhdb.ub4spare[56]: 0 ; 0×1cc: 0×00000000
kfdhdb.ub4spare[57]: 0 ; 0×1d0: 0×00000000
kfdhdb.acdb.aba.seq: 0 ; 0×1d4: 0×00000000
kfdhdb.acdb.aba.blk: 0 ; 0×1d8: 0×00000000
kfdhdb.acdb.ents: 0 ; 0×1dc: 0×0000
kfdhdb.acdb.ub2spare: 0 ; 0×1de: 0×0000
(全文…)

ASM相关转换

星期三, 一月 21st, 2009
ASM涉及到的几种转换
 
一 从非
ASM文件转换到ASM文件,用RMAN
 
1 首先连接到RMAN
 
 
rman>connect target
 
2 首先将要转换的表空间离线或者READ ONLY
 
alter tablespace test offline;
 
3 复制数据文件到ASM磁盘组内
 
backup as copy tablespace test format '+TEST_ASM';
 
4 文件切换到ASM
 
switch datafile 6 to copy;
 
二、默认的
ASM只有2个控制文件
 
SQL> /
 
STATUS  NAME                                                                             IS_ BLOCK_SIZE FILE_SIZE_BLKS
-----
-- -------------------------------------------------------------------------------- --- ---------- --------------
        +
TEST_ASM/boson/controlfile/current.256.676757355                                NO       16384            430
        +
TEST_ASM/boson/controlfile/current.257.676757357                                YES      16384            430
 
添加控制文件的步骤如下:
 
1alter system set controfile_files=''
 
2 关闭数据库
 
shutdown immediate
 
3 启动到nomount状态
 
startup nomount
 
4RMAN恢复到指定的位置
 
restore controlfile to 'TEST_ASM/boson/controlfile/controlfile3.ctl' from
'TEST_ASM/boson/controlfile/current.257.676757357';
 
5 打开数据库
 
alter database mount;
alter database open;
 
三、数据库级转换和单个表空间差不多
步骤如下:
 
Step 1: 创建ASMinit.ora
touch init+ASM.ora ;
*.
instance_type='asm'
*.
remote_login_passwordfile='SHARED'
*.
large_pool_size=12M
*.
asm_power_limit=10
*.
background_dump_dest='/u01/app/oracle/admin/+ASM/bdump'
*.
core_dump_dest='/u01/app/oracle/admin/+ASM/cdump'
*.
user_dump_dest='/u01/app/oracle/admin/+ASM/udump'
*.
asm_diskstring='/dev/raw/raw*
Step 2: 创建ASM的SPFILE
export ORACLE_SID=+ASM
sqlplus / as sysdba
create spfile from pfile=
'/tmp/init+ASM.ora';
 
Step 3: 启动ASM实例
 
startup nomount
Step 4: 创建需要的磁盘
Step 5: 更改磁盘文件的权限
chown oracle:oinstall /dev/rdisk*3
 
Step 6: 创建磁盘组
 
根据硬件和应用的要求选择合适的冗余度
create diskgroup test_asm normal redundancy failgroup fail_1 disk
'/dev/raw/raw1*' name  test_asm_0001,failgroup fail_2 disk'/dev/raw/raw2*' name test_asm_0002;
 
 
Step 7: 准备转换数据库到ASM
ALTER SYSTEM SET DB_CREATE_FILE_DEST=
'+TEST_ASM' SCOPE=BOTH;
 
Step 8: RMAN转换
RMAN> BACKUP BACKUPSET ALL DELETE INPUT;
RMAN> BACKUP AS COPY DATAFILECOPY ALL DELETE INPUT;
RMAN> BACKUP AS COPY ARCHIVELOG ALL DELETE INPUT;
RMAN> BACKUP DEVICE TYPE DISK INCREMENTAL LEVEL 0 AS COPY TAG
'ASM_Migration' DATABASE FORMAT '+DATA_AREA';
step 9:
转换REDO和TEMP 先DROP 在在DISKGROUP 添加REDO 和TEMP
 
step 10:
switch
 
 
四、使用DBMS_FILE_TRANSFER 也可以做以上转换
http://blue-prince.spaces.live.com/Blog/cns!12D6E6CCFACF4283!996.entry
从Oracle 10g开始,Oracle提供了DBMS_FILE_TRANSFER这么一个程序包,可以方便地在本地数据库和远程数据库,ASM和文件系统间传输数据库文件。这样数据库文件的传输就方便了许多,尤其是在传输基于ASM存储的数据文件时,不再局限于利用RMAN来进行传输。下面介绍一下这个包的用法。
 
DBMS_FILE_TRANSFER包一共包含了3个存储过程,分别提供本机之间、本机从远程主机抓取以及本机上传至远程主机三种传输数据库文件的功能。要求传输用户有对源目录读和对目标目录写的权限,单个数据库文件必须是512字节的整数倍并且文件大小必须小于或者等于2TB。
 
1、COPY_FILE。可以在数据库本机的文件系统之间,ASM磁盘组之间或者文件系统和ASM磁盘组之间方便地传输数据库文件。
 
DBMS_FILE_TRANSFER.COPY_FILE(
source_directory_object IN VARCHAR2,–源目录
source_file_name IN VARCHAR2,–源文件名
destination_directory_object IN VARCHAR2,–目标目录
destination_file_name IN VARCHAR2);–目标文件名
 
SQL> create directory data as ‘+DATA/HELLODB/DATAFILE’;
SQL> create directory test as ‘+TEST/HELLODB/DATAFILE’;
SQL> exec DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘TEST’,’system.dbf’)
ASMCMD> ls -a
+TEST/HELLODB/DATAFILE/system.dbf => COPY_FILE.256.654701983
 
 
2、GET_FILE。从远程数据库读取数据库文件并在本机的文件系统或者ASM磁盘组上创建一份复制文件。
 
DBMS_FILE_TRANSFER.GET_FILE(
source_directory_object IN VARCHAR2,
source_file_name IN VARCHAR2,
source_database IN VARCHAR2, –到远程数据库的db link名
destination_directory_object IN VARCHAR2,
destination_file_name IN VARCHAR2);
 
begin
DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘lnk_test’,’TEST1′,’system.dbf’);
end;
/
 
 
3、PUT_FILE。在本地数据库将数据库文件传输至远程数据库的文件系统或者ASM磁盘组。
 
DBMS_FILE_TRANSFER.PUT_FILE(
source_directory_object IN VARCHAR2,
source_file_name IN VARCHAR2,
destination_directory_object IN VARCHAR2,
destination_file_name IN VARCHAR2,
destination_database IN VARCHAR2); –到目标数据库的db link名
 
begin
DBMS_FILE_TRANSFER.COPY_FILE(’DATA’,’system.286.650339101′, ‘TEST2′,’system.dbf’, ‘lnk_test’);
end;

asm failgroup and css

星期三, 一月 21st, 2009
ASM有三种冗余度
external redundancy
normal redundancy
high redundancy
 
第一种是外部冗余,也就是说通过硬件级别的
RAID来保护数据
第二种是正常冗余,也就是
2路镜像来保护数据,默认的
第三种是高度冗余,也就是通过
3路镜像来保护数据
还有要说明的
ASM镜像是数据文件extent级别的镜像,不是整个磁盘的镜像,因此最好保持磁盘大小一样
并且在
normal redundancy中,又有primary extentsecond extent,写的时候两个并行写,读的时候默认从主的读,并且2extent一定分布在不同的failgroup里,也就是FAILGROUP的意义

asm operation

星期三, 一月 21st, 2009
最近有个客户一定要上ASM,没办法之前学习过,不过一直没用,重新温习下,下篇介绍下KFED的使用
 
一、
ASM的相关参数
 
instance_type:有2个,ASM或者RDBMS
DB_UNIQUE_NAME
ASM_POWER_LIMIT:
ASM_DISKGROUPS
ASM_DISKSTRING
 
二、配置一个
ASM实例
 
touch init+ASM.ora
添加一句
instance_type=asm
 
export ORACLE_SID=+ASM
 
sqlplus / as sysdba
 
create spfile from pfile='/tmp/init+ASM.ora';
 
startup nomount;
 
三、启动和关闭
ASM
 
startup force/nomount/mount
shutdown normal/immediate/transactional/abort
 
四、创建磁盘组
 
三种级别
 
normal redundancy
 
high redundancy
 
external redundancy
 
 
 
CREATE DISKGROUP disk_group_1 NORMAL REDUNDANCY
 
FAILGROUP failure_group_1 DISK
    
'/dev/raw/raw1' NAME diska1,
    
'/dev/raw/raw2' NAME diska2,
 
FAILGROUP failure_group_2 DISK
    
'/dev/raw/raw3' NAME diskb1,
    
'/dev/raw/raw4' NAME diskb2
 
 
删除一个磁盘组及其相关磁盘
 
drop diskgroup disk_group including contents
 
添加磁盘
 
alter diskgroup disk_group add disk '/dev/disk*3','/dev/disk*4';
 
删除磁盘
 
 
alter diskgroup disk_group drop disk diska2
 
 
 
调整磁盘组或者磁盘的大小
 
 
 
ALTER DISKGROUP disk_group_1
 
RESIZE DISK diska1 SIZE 100G;
 
ALTER DISKGROUP disk_group_1
 
RESIZE DISKS IN FAILGROUP failure_group_1 SIZE 100G;
 
-- Resize all disks in a disk group.
ALTER DISKGROUP disk_group_1
 
RESIZE ALL SIZE 100G;
 
 
撤销
DROP
 
 
ALTER DISKGROUP disk_group_1 UNDROP DISKS;
 
 
手动平衡数据
 
 
ALTER DISKGROUP disk_group_1 REBALANCE POWER 5;
 
 
手动
MOUNT单个或者磁盘组
 
ALTER DISKGROUP ALL DISMOUNT;
ALTER DISKGROUP ALL MOUNT;
ALTER DISKGROUP disk_group_1 DISMOUNT;
ALTER DISKGROUP disk_group_1 MOUNT;
 
 
四、创建目录
 
-- Create a directory.
ALTER DISKGROUP disk_group_1 ADD DIRECTORY '+disk_group_1/my_dir';
 
-- Rename a directory.
ALTER DISKGROUP disk_group_1 RENAME DIRECTORY '+disk_group_1/my_dir' TO '+disk_group_1/my_dir_2';
 
-- Delete a directory and all its contents.
ALTER DISKGROUP disk_group_1 DROP DIRECTORY '+disk_group_1/my_dir_2' FORCE;
 
 
五、别名
 
-- Create an alias using the fully qualified filename.
ALTER DISKGROUP disk_group_1 ADD ALIAS '+disk_group_1/my_dir/my_file.dbf'
 
FOR '+disk_group_1/mydb/datafile/my_ts.342.3';
 
-- Create an alias using the numeric form filename.
ALTER DISKGROUP disk_group_1 ADD ALIAS '+disk_group_1/my_dir/my_file.dbf'
 
FOR '+disk_group_1.342.3';
 
-- Rename an alias.
ALTER DISKGROUP disk_group_1 RENAME ALIAS '+disk_group_1/my_dir/my_file.dbf'
 
TO '+disk_group_1/my_dir/my_file2.dbf';
 
-- Delete an alias.
ALTER DISKGROUP disk_group_1 DELETE ALIAS '+disk_group_1/my_dir/my_file.dbf';
 
 
六、
 
删除文件
 
 
-- Drop file using an alias.
ALTER DISKGROUP disk_group_1 DROP FILE '+disk_group_1/my_dir/my_file.dbf';
 
-- Drop file using a numeric form filename.
ALTER DISKGROUP disk_group_1 DROP FILE '+disk_group_1.342.3';
 
-- Drop file using a fully qualified filename.
ALTER DISKGROUP disk_group_1 DROP FILE '+disk_group_1/mydb/datafile/my_ts.342.3';
 
 
 
ASM 相关视图
 
 
V$ASM_ALIAS
 
V$ASM_CLIENT
V$ASM_DISK
V$ASM_DISKGROUP
V$ASM_FILE
V$ASM_OPERATION
V$ASM_TEMPLATE
V$ASM_DISKGROUP_STAT
 
 
其中
ASM DISK HEAEDER状态有以下几种
 
SQL> select name,header_status from v$asm_disk;
 
NAME                                               HEADER_STATU
------------------------------------------------
-- ------------
                                                  
CANDIDATE
TEST_ASM_0001                                      MEMBER
TEST_ASM_0000                                      MEMBER
TEST_ASM_0002                                      MEMBER
TEST_ASM_0003                                      MEMBER
TEST_ASM_0004                                      MEMBER
TEST_ASM_0005                                      MEMBER
TEST_ASM_0006                                      MEMBER
 
 
Former - This state declares that the disk was formerly part of a diskgroup
Candidate - When a disk is in this state, it indicates that it is available to beadded to a diskgroup.
Member - This state indicates that a disk is already part of a diskgroup.
Provisioned - This state is similar to candidate, in that its available to diskgroups.
However, the provisioned state indicates that this disk has been
configured or made available using ASMLIB
 
 
ASM的一些隐含参数
 
select a.ksppinm "Name", b.ksppstvl "Value"
 
from x$ksppi a, x$ksppcv b
 
where a.indx = b.indx
  
and ksppinm like '\_%asm%' escape '\'
order by a.ksppinm;