xyz's profile逍遥者寒号的小屋BlogLists Tools Help

Blog


    January, 2006

    Sql server复制原理及限制

     

    以两个复制服务器A,B双向复制为模型

    Sql server的复制分为三种:

    1.         快照复制

    A每隔一段时间将B中的相应表中的数据全部删除,然后将自己相应表中的

    全部插到B中。此种方式显然不适合我们的应用,不予考虑。

    2.         事务复制

    A中的每一个满足复制条件的事务,每隔一定时间A都应用到B,反之亦然。Sql server 通过把数据传给三个存储过程(插入,删除,修改)进行数据的修改,我们可以根据自己的应用改写此存储过程。

    存在缺陷:如果从AB的复制条件和从BA复制条件相同的话,会产生“踢皮球”的循环现象。既一系列事务应用于A,A会把这些事务应用于B,B收到这一系列事务后,又会把它应用于A……如此循环。

    3.         合并复制

       每隔一段时间,复制将会把数据库A,B中需要复制的数据合并一下,使得AB中的数据完全一样,数据都是AB数据库中数据的全体数据。如果AB中数据主键有冲突,则根据优先级只选其中一条数据。

           需要注意:为了区分数据来自于哪个地点,sqlserver会将每一个需要复制的表中另加一个字段,在编程时应该注意。

    Sql server复制的缺陷

                  Sql server 每隔一定时间进行一次复制,如果找不到另一台sql server(比如因为网络故障,或是另一台sql server没有启动),经过n(默认为10)次连接后,它的复制功能将会down掉,直至有人将复制功能启动。

                  需要复制的表中如果在复制之前就有数据,在建立复制时比较麻烦(sql server不提供此类问题的解决方法,需要手动完成)。因此,需要复制的表在使用过程中不能经常变动表结构。

    oracle的撤销表空间文件丢失

    1.  
     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;

    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.中的用户AOra_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 DataGuard

    Oracle 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.     修改Bspfile

    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.     修改Aspfile

    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,尝试lgwrarch

    noreopen:目标节点失败,则一直保持目标不可用

    January, 2006

    mysql集群技术

    AS2.1+mysql-max-4.1.11
    简单使用模型


    配置:
    管理服务端:192.168.255.10

    需要ndb_mgm(控制台),ndb_mgmd(后台程序)两个文件
    在当前目录下配置config.ini文件
     [NDBD DEFAULT]
     NoOfReplicas=2
     [NDB_MGMD] #可以写成[MGM]
     HostName=192.168.255.10
     [NDBD]
     HostName=192.168.255.11
     DataDir=/usr/local/mysql/data
     [NDBD]
     HostName=192.168.255.12
     DataDir=/usr/local/mysql/data
     [MYSQLD]
     [MYSQLD]
    启动ndb_mgmd程序

    mysql1,mysql1: 192.168.255.11,192.168.255.12
    两个mysql服务器配置一样
    my.cnf配置:

     [mysqld] #配置mysqld
     ndbcluster
     [mysql_cluster] #配置ndbd
     ndb-connectstring=192.168.255.10 #MGM地址

    启动ndbd [--initial](--initial参数只能在头次启动ndbd,它会清空数据与日志)

    动后使用,否则会引起数据丢失)
    启动mysql服务

    建表时,需加入ENGINE=NDBCLUSTER参数,如
    create table x(a int) engine=ndbcluster;
    create table x(a int) engine=ndb;
    或修改原表
    alter table x engine=ndbcluster;


    启动关闭:
    启动:
    必须先起动ndb_mgmd,其次是ndbd, mysqld最好最后启动,否则当ndbd没有启动时将不能访问ndb数据。

    关闭:
    MGM端:ndb_mgm -e shutdown
    Mysqld端: mysql.server stop

     

    备份恢复:
    备份:
    在MGM端执行 ndb_mgm –e start backup,系统将会将数据分散备份至NDBD端的data/BACKUP目录下。
    恢复:
    1. 删除原表或数据
    2. 关闭NDBD结点服务器上运行的mysqld(如果有的话)
    3. 在每一个NDBD端的数据备份文件目录下执行ndb_restore –bx –nx –r –print(-b指备份号,-指节点号,即备份文件中的两个数字。-r指恢复结构,第一个节点要加-m恢复表结构)
    4. 启动被关闭的mysqld

    mysql的恢复如果执行两遍的话,不会造成数据冲突或重复.

     

     

    MysqlCluster高级技术


    Cluster原理:
    Mysqld分三层,一个MGM用于管理配置,m个mysqld给应用程序提供访问,n个ndbd提供集群存储
    mysqld的使用方法和普通版本的mysqld使用相同,不过加入的对ndb数据存储的支持。
    数据是分散存储在每组ndb节点的,每组中ndb节点的数据相同,每组至少有一个ndbd保持运行状态才能访问数据。(组的分配参看NoOfReplicas参数)。ndb节点间保证数据的同步
    备份时,备份数据分散备份至每一个正在运行的ndb节点,所以恢复时需要在每个ndb节点都进行恢复。如果表不存在的话,使用-m参数创建。如果一个ndb节点数据丢失,可以先备份正在运行的ndb,然后使用ndbd –initial 重建整个cluster,然后使用备份恢复.此方法也可用来扩容.
    ndb会对没有主键的用户创建一个隐性主键。
    对双机系统, NoOfReplicas建议设为2.
    常用命令:
     ndb_mgm控制台命令
     ndb_mgm [hostname[port]]
     show 显示当前状态
     node_id start, node_id stop, node_id restart,node_id status 对接点控制
     enter single user mod node_id  只允许一个mysqld连接指定的ndb
     shutdown  关闭ndb,mgm
     start backup,abort backcup  开始/放弃备份
     clusterlog off,clusterlog on,clusterlog toggle,clusterlog info 对集群日志的控制

     操作系统命令
    ndbd ndb节点后台进程
    --initial --initial会清空数据和日志,只有当第一次建立cluster或cluster结构发生改变需要重建时才使用
    --ostart等待mgm启动后启动
    平时不加参数直接执行即可

     ndb_restoret 恢复备份
    ndb_resore –bx –ny –r –m –print 在备份文件目录下执行,-m只能在第一次执行,如果数据库不存在的话,恢复可以成功,但通过mysqld无法访问,需要重新创建数据库即可。
    -b 备份号,
    -n 节点号,
    -r 恢复数据,
    –m 恢复表结构,
    --print 打印至标准输出
     
    ndb_delete_all,ndb_desc,ndb_drop_index ,ndb_drop_table, ndb_select_all,ndb_select_count, ndb_show_tables
     基本等同于sql操作,但是他们可以看见隐式主键
     例:ndb_desc –d test x 察看test数据库中的x表

     ndb_waiter 校验cluster节点状态
    ndb_cpcd,ndb_test_platform ???
    MGM
    config.ini详解
    # Options affecting ndbd processes on all data nodes:
    [NDBD DEFAULT]   
    NoOfReplicas=2    #数据被复制的份数,也指明一个组的乘员数
                             #系统按id从低到高的顺序分组

    # TCP/IP options:
    [TCP DEFAULT]    
    portnumber=2202   #服务端口号

    # Management process options:
    [NDB_MGMD]     #简写[MGM]
    id=    #结点id 1-63,可以不写,自动分配
    ExecuteOnComputer=   # [computer]一节指定的计算机
    LogDestination=     # 取值为CONSOLE, SYSLOG, FILE,日志输出到控制台,
    # 系统日志或文件  例(??)
    # console
    # facility=syslog
    #   filename=cluster.log,maxsize=1000000,maxfiles=6
    #
    ArbitrationRank=1  #0:不使用仲裁(?)
          #1: 高优先级仲裁
          #2:低优先级仲裁
          #MGM,mysqld节点使用
    ArbitrationDelay=0 #毫秒

          
    hostname=192.168.0.10            #MGM节点地址, 不能配置为127.0.0.1或localhost,

                                                  #必须是本地实际ip
    datadir=/var/lib/mysql-cluster      # 日志,pid等文件

    # Options for data node "A":
    [NDBD]                         #配置NDB节点,除了hostname,id和ExecuteOnComputer,
                                       #其他共性的参数可以在[NDBD default中指定] ,每个NDB节点都要配一段
    id=                               #1-63   ,可以不写,自动分配   
    ExecuteOnComputer
    Serverport=       #连接其它节点使用的端口号,默认动态分配                      
    hostname=192.168.0.30             # Hostname or IP address
    datadir=/usr/local/mysql/data      #日志,pid等文件

    filesystempath=$datadir       #日志,撤销日志,数据所存在的位置,推荐/var/lib/mysql-clustere
    BackupDataDir=$FileSystemPath/BACKUP  #备份文件位置
    DataMemory=80M        #数据使用内存.用来放数据,ordered index(?)和索引,DUNO信息
    IndexMemory=18M      #主键,唯一性索引,注意和ordered index区分,最小1M
                                    #使用内存数=(DataMemory+IndexMemory)* NoOfReplicas

    MaxNoOfConcurrenttranctions=4096  #所有节点必须设想同值,最大事务并发
    MaxNoOfConcuttentOperations=32768    #每个事务处理数据大小
    MaxNoOfLocalOperations=1.1*$MaxNoOfConcurrentOperations #
    待续…
     
    # Options for data node "B":
    [NDBD]                         
    hostname=192.168.255.12           # Hostname or IP address
    datadir=/usr/local/mysql/data   # Directory for this data node's datafiles
           

    # SQL node options:
    [MYSQLD]     #配置mysqld节点,每个mysql节点都要配一段,可以不写任何内容,由mgm自动分配

    id=        #1-63,可以不写,自动分配
    ArbitrationRank=0  #0:不使用仲裁
          #1: 高优先级仲裁
          #2:低优先级仲裁
          #MGM,mysqld节点使用
    ArbitrationDelay=0 #毫秒
    BatchByteSize=32K  #转换为全表扫描或根据索引扫描的查询?
    BatchSize=64   #最大992
    MaxScanBatchSize=256K  #16MB
                          
    hostname=192.168.0.20           # Hostname or IP address
                                    # (additional mysqld connections can be
                                    # specified for this node for various
                                    # purposes such as running ndb_restore)

     

     

    对mysqld,ndbd都需要连接字符串用来连接MGM
    格式 id,host:port,host,port....
    如:nodeid=2,192.168.255.2:1186,192.168.255.3:1186
    或192.168.255.2
    Mysqld
    my.cnf详解
    [mysqld]
     ndbcluster      #使用ndb引擎
     skip-ndbcluster     #不使用ndb引擎(需要编译支持)
     ndb-connectstring=192.168.255.10  #MGM地址
    从4.1.8版本开始可以将ndb-connectstring写至[mysql_cluster]段
    [mysql_cluster]
    ndb-connectstring=192.168.255.10  #MGM地址
    Ndb
    My.cnf
    [mysql_cluster]
    ndb-connectstring=192.168.255.10  #MGM地址
    nbd.cfg??

    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日。每每想起这些,就有一丝丝的颤动,轻触着我的心。
    October, 2005

    sybase点滴

    不进行日志恢复的启动参数

    在RUN_svrname里面编辑,加上-T3608 或 -T3608

     

    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 table_name,tablespace_name from user_tables;
    alter table tb_name move tablespace tbs_name;

    select 'alter table ',table_name,' move tablespace tbs_name;' from user_tables
    where table_name not in (select table_name from user_indexes where index_type='LOB');

    重建普通表的索引

    select index_name,tablespace_name from user_indexes;
    select index_name,table_name from user_indexes;
    alter index id_name rebuild tablespace tb_tim;

    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字段的表
    select table_name,column_name from user_lobs;
    alter table tb_name move tablespace tbs_name lob(cl_name) store as (tablespace tbs_name);

    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
    where index_type='NORMAL' and table_name in
    (select table_name from user_indexes where index_type='LOB');

     

     

    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,万事大吉了