| xyz's profile逍遥者寒号的小屋BlogLists | Help |
|
January, 2006 Sql server复制原理及限制
以两个复制服务器A,B双向复制为模型 Sql server的复制分为三种: 1. 快照复制 A每隔一段时间将B中的相应表中的数据全部删除,然后将自己相应表中的 全部插到B中。此种方式显然不适合我们的应用,不予考虑。 2. 事务复制 对A中的每一个满足复制条件的事务,每隔一定时间A都应用到B上,反之亦然。Sql server 通过把数据传给三个存储过程(插入,删除,修改)进行数据的修改,我们可以根据自己的应用改写此存储过程。 存在缺陷:如果从A到B的复制条件和从B到A复制条件相同的话,会产生“踢皮球”的循环现象。既一系列事务应用于A,A会把这些事务应用于B,B收到这一系列事务后,又会把它应用于A……如此循环。 3. 合并复制 每隔一段时间,复制将会把数据库A,B中需要复制的数据合并一下,使得AB中的数据完全一样,数据都是AB数据库中数据的全体数据。如果A和B中数据主键有冲突,则根据优先级只选其中一条数据。 需要注意:为了区分数据来自于哪个地点,sqlserver会将每一个需要复制的表中另加一个字段,在编程时应该注意。 Sql server复制的缺陷: Sql server 每隔一定时间进行一次复制,如果找不到另一台sql server(比如因为网络故障,或是另一台sql server没有启动),经过n(默认为10)次连接后,它的复制功能将会down掉,直至有人将复制功能启动。 需要复制的表中如果在复制之前就有数据,在建立复制时比较麻烦(sql server不提供此类问题的解决方法,需要手动完成)。因此,需要复制的表在使用过程中不能经常变动表结构。oracle的撤销表空间文件丢失1. 2.alter database datafile '\home\oracle\oradata\sid\undotbs.dbf' offline drop; 3. create file=’\home\oracle\new.ora’ from spfile 4. 在new.ora中加入隐藏参数
drop rollback segment _SYSSMU10$; 7. 新建一个回滚表空间 8. 重新制定回滚段表空间 9. 现在把那个坏掉的回滚段删掉重启oracle,万事大吉了 January, 2006 sybase复制 常用配置
1. 复制分区partition越大越好,大小应该为数据流量的6倍,一般可以设为2G.
2. 最大线程数应该大于连接数(数据库和复制服务器)乘以2加3。
3. 复制内存内存加大。 五. 注意事项
1. ASE要建立专门用于复制的sa用户,而且账号密码要和复制服务器的一模一样。
2. _RSSD_prim账号缺少sa权限,导致RSM不能访问复制服务器的配置。
3. RSM客户端置需要配置ID_SERVER及它的数据库地址。
常用操作 1.迁移复制服务器
a) 将相关数据库(RSSD数据库及复制数据库)的复制代理断开 sp_stop_rep_agent db_name(ASE) 或是 suspend log transfer from {data_server.database|all}
b) quiesce队列 admin quiesce_force_rsi; 使用admin quiesce_check检查
c) 删除正在使用的复制分区 drop partition partition_name;
d) 停掉相关的复制服务器(或是挂起路由) suspend route to replication_server;
e) 迁移复制数据库以及RSSD数据库,服务器名称要和以前的一致,重新建立复制服务器的ASE用户,修改连接配置文件。
f) 对RSSD数据库以及复制数据库的第二截断点归零
use db_name
go
sp_stop_rep_agent db_name
go
dbcc settrunc(‘ltm’,’ignore’)
go
use RSSD_db_name
go
rs_zeroltm data_server,database
go
use db_name
go
dbcc settrunc(‘ltm’,’valid’)
go
g) 增加复制分区
add partition partition_name on ‘device_name’ with size size;
h) 重建队列
Rebuild queues
go
Igore loss from data_server.database [to data_server.database|replication_server]
go
i) 恢复复制代理
sp_start_rep_agent db_name;(ASE)
2.建立默认错误处理类。
1.察看运行状态 admin health; admin who; admin who_is_down; admin who_is_up; admin who,sqm; admin who ,sqt; 2. 察看复制服务器配置 rs_config(ASE); rs_helpdb(ASE); rs_helperror(ASE); rs_helpdb(ASE); rs_helppub(ASE); rs_helppubsub(ASE); rs_helpsub(ASE); rs_helprep(ASE); rs_helprepdb(ASE); re_helpreptable(ASE); rs_helproute(ASE); admin disk_space(ASE);
3. 恢复运行 resume connection to data_server.database [skip transaction|executetransaction] (恢复DSI进程); sp_configure ‘enable rep agent threads’,1(ASE); sp_config_rep_agent ‘enable’(ASE); sp_start_rep_agent db_name(ASE);
4. 挂起运行 sp_configure ‘enable rep agent threads’,0(ASE); sp_config_rep_agent ‘disable’(ASE); sp_stop_rep_agent db_name(ASE);
5 用户权限 create user user_name set password{ passwd|null}; grant sa to user_name; drop user user_name;
故障处理 1.队列阻塞。
如果DSI线程DOWN掉的话,连续执行resume connection to data_server.database skip transactoin跳过阻塞事务,直至DSI线成能够正常工作。
否则,监测队列是否正常。使用admin who,sqt;察看info 列此数值形如xxxxxxx:y,xxxxxxx即为此队列号,如果是负数,则说明此队列事务有问题,需要破置队列。y=1,代表是处队列,y=2,代表是入队列。(???不确定???)
使用admin who,sqm;察看First Seg.block Last Seg.block 以及Next read,三个列的数值打效应为fast Oracle复制操作系统AS2.1,数据库 Oracle 9.2。使用企业管理器进行操作。 建立两个数据库Ora_a,Ora_b。由Ora_a.中的用户A向Ora_b中复制数据。
1.Ora_a:使用system用户登录。 设置主体站点Ora_a,设置站点时,可以加入方案A。系统将创建repadmin用户。
2.Ora_a:使用repadmin用户登录。 创建主体组MGP,将需要复制的表加入到主体组中。(不能和“已注册实体化组”中已存在的组重名,否则创建会出错。怎么删掉啊?) 3.Ora_b,使用system用户登录。 创建实体化视图站点Ora_b。系统将在本地创建用户A,MVADMIN,它们的数据库链接以及一个共有数据库链接。 4. Ora_b,使用mvadmin用户 新建实体化视图组,选用”已调度”中上一步建立的数据库链接,加入主体组MGP以及主体组中的要复制的对象A,创建一个刷新组FLUSHGROUP。 中间会出一个”selcet 1 into…”之类的错误,不用理会。 5. OK,插个数据试一下吧。如果不行看看刷新组。 January, 2006 Oracle DataGuardOracle DataGuard的简明安装:1. 安装oracle服务器A使之运行为归档模式,指定不适用nologging并关闭。 Alter system set log_archive_start=TRUE SCOPE=SPFILE; shutdown immediate; alter database archivelog; alter database forcelogging; alter database open; shutdown immediate;
2. 将所有安装文件,数据文件复制到服务器B。 3. Oracle服务器B上创建备份控制文件 4. start mount Alter database create standby controlfle as ‘/home/oracle/oradata/sid/sidstandby01.ctl; Alter database create standby controlfle as ‘/home/oracle/oradata/sid/sidstandby02.ctl; Alter database create standby controlfle as ‘/home/oracle/oradata/sid/sidstandby02.ctl; 5. 修改B的spfile create pfile as spfile; 将控制文件修改为备份控制文件: alter system set crontrolfile=” /home/oracle/oradata/sid/sidstandby01.ctl, /home/oracle/oradata/sid/sidstandby01.ctl, /home/oracle/oradata/sid/sidstandby01.ctl” scope=file; 指定热备的归档日志的位置(此目录要存在) alter system set standby_archive_dest=”/home/oracle/oradata/sid/standbyarchive” scope=file; 指定主,备服务器的服务名(A,B两服务器tnsnames.ora文件中都要配置对方服务名) alter system set fal_server=’A’ scope=file; alter system set fal_client=’B’ scope=file; 自动管理备份归档 alter system set standby_file_managerment=”auto” scope=file;
6. 修改A的spfile alter system set log_archive_dest_2='SERVICE=B MANDATORY REOPEN=60'; scope=file; 7. 关闭A,B重新启动: A:startup B: alter database mount standby database; alter database recover managed standby database disconnect from session; 改变备份模式最大性能: 主库 alter system set log_archive_dest_2='SERVICE=bl21 MANDATORY REOPEN=60' scope=both; alter database set standby database to maximize performance;
最大可用性: 主库 alter system set log_archive_dest_2='service=bl21 LGWR SYNC AFFIRM ' scope= both ; alter database mount exclusive; alter database set standby database to maximize availability;
最大保护: 此模式不支持逻辑备份,并且需要standby redo logfile 主库 alter system set log_archive_dest_2='SERVICE=bl21 LGWR SYNC AFFIRM' scope=both; alter database mount exclusive; alter database set standby to maximize protection;
从库设置备用日志文件 alter database add standby logfile '/home/oracle/oradata/ORCL/stredo01.log' size 100m;
切换switch over 将主备服务器的pfile文件重新配置: log_archive_dest_2 STANDBY_ARCHIVE_DEST fal_server fal_client standby_file_management 主服务器上运行: ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; 主服务器按standby方式启动切换至备机 原备机运行 ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; 关闭后按主机方式启动切换至主机 Fail over???参见switch over将备机切换为主机,主机重新安装为备机?? 其他操作切换日志 alter system switch logfile; 只读方式打开备机B alter database recover managed standby database cancel; alter database open read only; 使用alter database recover managed standby database disconnect from session;可以恢复备用方式 关闭备机B alter database recover managed standby database cancel; shutdown immediate; 查看查看备份模式 select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
归档至备份机的日志: SELECT SEQUENCE#, to_char(FIRST_TIME,'YYYY-mm-dd hh24:mi:ss') ,to_char (NEXT_TIME,'hh24:mi:ss') FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
参数详解log_archive_dest_2 location/service 指定一个本地磁盘目录或远程服务,此参数必须放在最前面 location: 对每个DataGuard配置,必须指定一个磁盘目录用来放归档日志,如: location=’/home/oracle/oradata/sid/archive’ service: 指定一个OracleNet服务,如service=’SvrName’
sync/async sync: 如果是物理备份,则需要创建standby redo logs,逻辑备份不使用standby redo logs,最大保护,最大可用性使用该参数.低性能,高保护.使用lgwr ,sync,affirm async: 如果是物理备份,则需要创建standby redo logs,中性能,中保护.使用lgwr,async,noaffirm lgwr/arch: 指定是lgwr还是archiver将在线日志写入远端 lgwr: 实时传输在线日志,如果失败,自动转为arch arch: 默认值.使用arch传输日志,不需要standby redo logs.高性能,低保护.归档操作时传输? mandatory/optional online redo logsd的策略 mandatory:本地使用mandatory ,强制 optional:远端默认选项,可重写online redo logs affirm/noaffirm 确认归档日志是否成功写入磁盘 affirm:同步写入磁盘,会影响主机性能 noaffirm: 异步写入磁盘,
delay/nodelay delay: 默认值,没有延迟 ondelay: 默认30分,延迟发送至备机,主机的错误不会立即应用于备机
depend/nodepend 是否取决于其他目的机的成功 reopen/noreopen reopen: 默认值,300秒,尝试lgwr或arch noreopen:目标节点失败,则一直保持目标不可用 January, 2006 mysql集群技术AS2.1+mysql-max-4.1.11
需要ndb_mgm(控制台),ndb_mgmd(后台程序)两个文件 mysql1,mysql1: 192.168.255.11,192.168.255.12 [mysqld] #配置mysqld 启动ndbd [--initial](--initial参数只能在头次启动ndbd,它会清空数据与日志) 动后使用,否则会引起数据丢失) 建表时,需加入ENGINE=NDBCLUSTER参数,如
关闭:
备份恢复: mysql的恢复如果执行两遍的话,不会造成数据冲突或重复.
MysqlCluster高级技术
操作系统命令 ndb_restoret 恢复备份 ndb_waiter 校验cluster节点状态 # TCP/IP options: # Management process options: #必须是本地实际ip # Options for data node "A": # SQL node options: id= #1-63,可以不写,自动分配
对mysqld,ndbd都需要连接字符串用来连接MGM November, 2005 mysql复制mysql4.1.12-standard-log下实现Mysql复制
master端 my.cnf配置如下
[mysqld] server-id = 1 //和slave端的id区分开 log-bin //生成日志 创建用户rep_user/123456
赋权限 (GRANT REPLICATION SLAVE ON *.* TO rep_user@'%' IDENTIFIED BY '123456';) 早期版本赋FILE权限 其他配置: binlog-do-db=mydb1,mydb2 //需要生成日志的数据库 binlog-ignore-db=mysql //不需要生成日志的数据库 report-host=slave_name 相关命令: show master status show slave hosts show {master|binary} logs show binlog events purge {master|binary} logs to 'log_name' purge {master|binary} logs before 'date' reset master(老版本flush master) set sql_log_bin={0|1} slave端 my.cnf配置如下
[mysqld] server-id = 2 //和master端的id区分开 master-host=192.168.255.3 //mater的IP master-user=rep_user //master中的复制的帐号 master-password=123456 //master中,复制帐号的密码 my.cnf中的master-*的设置仅在第一次生效,后保存在data/master.info文件里 其他配置:
replicate-do-db=mydb1,mydb2 //需要复制的数据库 replicate-do-table=db_name.tb_name //需要复制的表
replicate-ignore-table=db_name//不需要复制的数据库
replicate-ignore-table=db_name.tb_name //不需要复制的表 replicate-skip-error=123 ??//忽略的错误号
replicate-wild-do-table=
replicate-wild-ignore-table=
replicate-rewrite-table=
master-port=3306 //master数据库的端口号
master-connect-retry=60 //连接重试时间 master-retry-count=86400 //重试次数 master-info-file=master.info //master信息文件 相关命令:
slave start slave stop SLAVE STOP IO_THREAD //此线程把master段的日志写到本地 SLAVE start IO_THREAD SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库 SLAVE start SQL_THREAD reset slave SET GLOBAL SQL_SLAVE_SKIP_COUNTER load data from master show slave status(SUPER,REPLICATION CLIENT) CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master 信息
PURGE MASTER [before 'date'] 删除master端已同步过的日志 经验
使用show slave status Slave_IO_Running,为No,则说明IO_THREAD没有启动,请执行slave start [IO_THREAD]
Slave_SQL_Running为No则复制出错,查看Last_error字段排除错误后执行slave start [SQL_THREAD]
查看Slave_IO_State字段 空 //复制没有启动 Connecting to master//没有连接上master Waiting for master to send event//已经连上 可以使用LOAD DATA FROM MASTER语句来建立slave。但有约束条件: 数据表要全部是MyISAM表,必须有SUPER权限,master的复制用户必须具备RELOAD和SUPER权限。 在master端执行RESET MASTER清除已有的日志变更,
此时slave端会因为找不到master日志无法启动IO_THREAD,请清空data目录下 relay-log.info,hosname-relay-bin*等文件重新启动mysql 中继日志文件默认的文件为hostname-relay-bin.nnn和hostname-relay-bin.index。可用从服务器的--
relay-log和--relay-log-index选项修改。在从服务器中还有一个relay-log.info中继信息文件,可用
--relay-log-info-file启动选项修改文件名。
双机互备则是两个mysql同时配置为master及slave
November, 2005 心灵足迹为什么,总有一些日子,每年都要忘却?二十年的抚养与艰辛,难道还不能让我牢牢记住他们的生日?父亲,9月28日,母亲3月18日。每每想起这些,就有一丝丝的颤动,轻触着我的心。 September, 2005 oracle常用脚本回滚表空间过大处理
查看目前撤销表空间
select segment_name,tablespace_name,status from dba_rollback_segs; 创建撤销表空间 CREATE UNDO TABLESPACE UNDOTBS DATAFILE '/home/oracle/oradata/sid/undotbs.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED; ALTER SYSTEM SET undo_tablespace = UNDOTBS
SCOPE=SPFILE; shutdown startup 删除原撤销表空间 drop tablespace undotbs1; 删除操作原撤销表空间系统文件
改变目前表空间大小
ALTER DATABASE DATAFILE '/home/oracle/oradata/charge/undotbs.dbf' RESIZE 1000M
在表空间中移动数据 移动普通表 select 'alter table ',table_name,' move tablespace tbs_name;' from user_tables 重建普通表的索引 select index_name,tablespace_name from user_indexes; select 'alter index ',index_name,'rebuild tablespace tb_mame' from user_indexes where table_name not in (select table_name from user_indexes where index_type='LOB');
移动带lob字段的表 alter index id_name rebuild select 'alter table ',table_name,' move tablespace tbs_name lob(',column_name,')store as (tablespace tbs_name);' from user_lobs; 重建带lob字段表的普通索引 select 'alter index ',index_name,'rebuild tablespace tb_mame;' from user_indexes
September, 2005 redhat点滴Redhat与时区相关的设置
变量TZ
命令setup tzselect
配置文件:/etc/sysocnfig/clock
/etc/locattime ->/usr/share/zoneinfo/Asia/Shanghai
(/etc/login.defs??) September, 2005 心灵足迹 老婆刚刚打电话过来,她要上火车了。我笑着叮嘱一些“路上要小心”这类的言语,心里却突然之间有种空落落的感觉。两个月在一起生活的时光这么快就结束了?我们又要回到那种两地分居翘首相盼的日子了?虽然在一起的时候经常想起一个人的日子逍遥自在,可是两个月的生活上我已经习惯了一会到家里就有老婆偎前偎后的感觉。昨日,还轻轻抱着她入梦;今天,就要在两地相思。时间真像一把无情的利剑,轻轻的一闪,就把这种温馨斩的筋碎骨断。想起遥遥无期的等待,总有什么东西在胸口轻轻的翻腾。。。 oracle的撤销表空间文件丢失
1. 使用start mount启动,执行: 2. alter database datafile '\home\oracle\oradata\sid\undotbs.dbf' offline drop; 通常使用alter database open就可以把数据库启动了,如果不行的话,执行以下步骤 3. create file=’\home\oracle\new.ora’ from spfile
4. 在new.ora中加入隐藏参数 _corrupted_rollback_segments = (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$)
5. 使用startup restrict pfile='\home\oracle\new.ora';启动数据库
6. 可以使用以下sql查看回滚段: select segment_name,tablespace_name,status from dba_rollback_segs; 删除那些回滚段 drop rollback segment _SYSSMU1$; 。。 drop rollback segment _SYSSMU10$;
7. 新建一个回滚表空间 CREATE UNDO TABLESPACE UNDOTBS DATAFILE '/home/oracle/oradata/sid/undotbs.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED;
8. 重新制定回滚段表空间 ALTER SYSTEM SET undo_tablespace=UNDOTBS scope=both; 现在把那个坏掉的回滚段删掉重启oracle,万事大吉了 |
|
|