XMind中如何添加自定义图标

问题:如何想要在XMind中添加自己喜欢的图标?

1.XMind中提供了丰富的图标资源,但是总是有自己不喜欢的或者自己觉得不够完善的图标,下图为XMind软件[其他]菜单里自带的一些图标:

2.想要添加以下自定义图片到[其他].

解决办法:

1.将想要添加的图片放到路径(D:/Program Files/XMind/plugins/org.xmind.ui.resources_3.1.1.200912022330/markers),如图

2.打开同目录下的markerSheet.xml文件,并添加<marker id=”other-i miss u” name=”i miss u” resource=”i miss u.png” />标记,如图:

3.关闭XMind再打开,就会出现我们自定义的图片:

XMind如何改变默认设置

问题:XMind如何改变默认设置(以字体名称为例)

1.XMind虽然提供了修改默认配置的接口,但是并不能保存这些设置.

2.用户想要设置自定义的字体名称,字体大小等等选项

3.需要导出设置在其它机器上不用再配置即可使用

解决办法:

1.默认设置打开的界面,如图:

2.打开设置默认风格的路径(D:/Program Files/XMind/plugins/org.xmind.ui.resources_3.1.1.200912022330/styles),打开defaultStyle.xml文件,如图:

3.默认字体为: font-family=”$system$”,替换为: font-family=”Courier New”

4.再次打开XMind如图:

5.修改其它设置:

  • font-weight=”bold”
  • fo:color=”#4c4c4c”
  • fo:font-family=”$system$”
  • fo:font-style=”normal”
  • fo:font-size=”18pt”
  • fo:text-decoration=”none”
  • shape-class=”org.xmind.topicShape.roundedRect”
  • shape-corner=”8pt”
  • svg:fill=”#97cbff”
  • fo:margin-left=”22pt”
  • fo:margin-right=”22pt”
  • fo:margin-top=”14pt”
  • fo:margin-bottom=”14pt”

如何改变XMind默认的语言?

问题:如何改变默认的语言?

1.比如,中文系统下如何选用英文版?

2.有时候装上去打开是英文版的想要选用中文版.

解决办法:

1.右键查看XMind快捷方式的属性,查看目标参数(“D:/Program Files/XMind/xmind.exe”),打开XMind后是中文简体,如图:

2.修改目标参数(“D:/Program Files/XMind/xmind.exe” -NL en_US),打开后英文版,如图:

3.还可以更改为其他国家语言版本

  • zh_CN中文(中国)
  • zh_HK中文(香港)
  • zh_TW中文(台湾)
  • en_US英文 (美国)
  • ja_JP日文(日本)
  • ko_KR朝鲜文(南朝鲜)
  • de_DE德文(德国)
  • de_DE_EURO德文(德国,Euro)
  • en_AU英文(澳大利亚)
  • en_CA英文(加拿大)
  • en_GB英文(英国)
  • fr_CA法文(加拿大)
  • fr_FR法文(法国)
  • iw_IL希伯来文(以色列)
  • u_RU俄文(俄罗斯)

打开XMind时出现 JVM terminated. Exit code=-1 错误

问题:打开XMind软件时出现 JVM terminated. Exit code=-1 错误,如下图所示

解决办法:

1.关闭 360安全卫士

2.修改XMind的配置文件”xmind.ini(与”xmind.exe”在同一目录下). 将参数”-XX:MaxPermSize=256m”移到”-vmargs”前面

3.D:/Program Files/XMind/xmind.ini文件中,删掉如下3:

-Xms128m

-Xmx512m

-XX:MaxPermSize=256m

效果:

SqlServer数据库访问Oracle数据库

最近要实现一段业务,把Sqlserver数据库中表的数据作为条件在Oracle核心库中查询到相应的数据,然后再在SqlServer数据库中做统计信息.所以要实现Sqlserver数据库到Oracle的DBlink把数据从Oracle数据库中拉出来.
 

准备工作:

1.必须安装SqlServer数据库;
2.要有Oracle的客户端,客户端版本不低于Oracle数据库的版本;
3.配置tnsnames.ora文件(路径:$ORACLE_HOME$\db_1\NETWORK\ADMIN\tnsnames.ora)
OrclDBLink =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL.SNDA.COM)
    )
  )
4.测试tns配置是否成功,使用sqlplus命名在命令行窗口登录,如果能够登录成功说明tnsname.ora配置正确.
  
 
创建连接服务器
1.在常规页面配置,如图:
  
2.在安全性页面配置,如图:
  
 
测试访问Oracle数据库
1.SELECT * FROM DBLINK..HR.EMPLOYEES; 此查询对象要用大写,如果查询某个字段也要使用大写,连接服务器后面是两点[..]
2.SELECT * FROM 
openquery(DBLINK, ‘SELECT * FROM HR.EMPLOYEES’);此方法比上一种方法快50%,此方法跟直接连Oracle的速度相当.

VMWare下搭建Linux/Oralce环境

因为要学习Oracle,所以整理了在虚拟机上安装Linux系统,然后安装Oracle10g的截图,希望能帮助想要了解这方面知识的童鞋,也方便自己以后查阅.因为中间都是截图,这个编辑器中上传截图太麻烦,所以就编辑的word,然后上传成了资源,如果谁有这方面的需要的话可以下载一下.

步骤:

1.在VMWare下安装Linux4.8系统

3.在Linux下安装Oracle10g

中间所需要的工具有:
1.SecureCRT6.5SecureFX6.5

2.XManager3.0
欢迎下载并附带注册码.

Oracle 中sys和system用户区别

1.最重要的区别,存储的数据的重要性不同
sys用户:所有oracle的数据字典的基表和视图都存放在sys用户中,这些基表和视图对于oracle的运行是至关重要的,由数据库自己维护,任何用户都不能手动更改.sys用户拥有dba,sysdba,sysoper等角色或权限,是oracle权限最高的用户.
system用户
 
: 用于存放次一级的内部数据,如oracle的一些特性或工具的管理信息.system用户拥有普通dba角色权限.
2.其次的区别,权限的不同.
system用户:只能用normal身份登陆em,除非你对它授予了sysdba的系统权限或者syspoer系统权限.
sys用户:具有“SYSDBA”或者“SYSOPER”系统权限,登陆em也只能用这两个身份,不能用normal.
以sys用户登陆Oracle,执行select * from V_$PWFILE_USERS;可查询到具有sysdba权限的用户,如:SQL> select * from V_$PWFILE_USERS;

dba, sysdba这两个系统角色有什么区别呢 
在说明这一点之前我需要说一下oracle服务的创建过程
创建实例→•启动实例→•创建数据库(system表空间是必须的)
启动过程
实例启动→•装载数据库→•打开数据库
sysdba,是管理oracle实例的,它的存在不依赖于整个数据库完全启动,只要实例启动了,他就已经存在,以sysdba身份登陆,装载数据库、打开数据库.只有数据库打开了,或者说整个数据库完全启动后,dba角色才有了存在的基础.

normal, sysdba, sysoper有什么区别
normal 是普通用户
sysdba拥有最高的系统权限,登陆后是 sys
sysoper主要用来启动、关闭数据库,sysoper 登陆后用户是 public

sysdba和sysoper属于system privilege,也称为administrative
privilege,拥有例如数据库开启关闭之类一些系统管理级别的权限sysdba和sysoper具体的权限可以看下表:

系统权限

sysdba

sysoper

区别

Startup( 启动数据库)

startup

Shutdown( 关闭数据库)

shutdown

alter database open/mount/backup

alter database open/mount/backup

改变字符集

none

create database( 创建数据库)

None 不能创建数据库

drop database( 删除数据库)

none

create spfile

create spfile

alter database archivelog( 归档日志)

alter database archivelog

alter database recover( 恢复数据库)

只能完全恢复, 不能执行不完全恢复

拥有restricted session( 会话限制) 权限

拥有restricted session 权限

可以让用户作为sys 用户连接

可以进行一些基本的操作, 但不能查看用户数据

登录之后用户是sys

登录之后用户是public

system如果正常登录,它其实就是一个普通的dba用户,但是如果以as sysdba登录,其结果实际上它是作为sys用户登录的,这一点类似Linux里面的sudo的感觉,从登录信息里面我们可以看出来.因此在as sysdba连接数据库后,创建的对象实际上都是生成在sys中的.其他用户也是一样,如果 as sysdba登录,也是作为sys用户登录的,看以下实验:
SQL> create user strong identified by strong;
用户已创建.
SQL> conn strong/strong@magick as sysdba;
已连接.
SQL> show user;
USER 为 “SYS”
SQL> create table test(a int);
表已创建.
SQL> select owner from dba_tables where table_name=’test’;
未选定行 //因为创建表时oracle自动转为大写,所以用小写查的时候是不存在的;
SQL> select owner from dba_tables where table_name=’TEST’;
OWNER
——————————
SYS

Oracle RETURNING INTO 用法示例

1.The RETURNING INTO clause allows us to return column values for rows affected by DML statements. The following test table is used to demonstrate this clause.

 

DROP TABLE t1;

DROP SEQUENCE t1_seq;

 

CREATE TABLE t1 (

ID NUMBER(10),

DESCRIPTION VARCHAR2(50),

CONSTRAINT t1_pk PRIMARY KEY (id));

 

CREATE SEQUENCE t1_seq;

 

INSERT INTO t1 VALUES (t1_seq.nextval‘ONE’);

INSERT INTO t1 VALUES (t1_seq.nextval‘TWO’);

INSERT INTO t1 VALUES (t1_seq.nextval‘THREE’);

COMMIT;

 

2.When we insert data using a sequence to generate our primary key value, we can return the primary key value as follows.

 

SET SERVEROUTPUT ON

DECLARE

v_id t1.id%TYPE;

BEGIN

INSERT INTO t1

VALUES (t1_seq.nextval‘FOUR’)

RETURNING id INTO v_id;

COMMIT;

DBMS_OUTPUT.put_line(‘ID=’ || v_id);

END;

/

ID=4 

 

3.The syntax is also available for update and delete statements.

 

SET SERVEROUTPUT ON

DECLARE

v_id t1.id%TYPE;

BEGIN

UPDATE t1

SET description = description

WHERE description = ‘FOUR’

RETURNING id INTO v_id;

DBMS_OUTPUT.put_line(‘UPDATE ID=’ || v_id);

 

DELETE FROM t1

WHERE description = ‘FOUR’

RETURNING id INTO v_id;

DBMS_OUTPUT.put_line(‘DELETE ID=’ || v_id);

COMMIT;

END;

/

UPDATE ID=4

DELETE ID=4

 

4.When DML affects multiple rows we can still use the RETURNING INTO, but now we must return the values into a collection using the BULK COLLECT clause.

 

SET SERVEROUTPUT ON

DECLARE

TYPE t_tab IS TABLE OF t1.id%TYPE;

v_tab t_tab;

BEGIN

UPDATE t1

SET description = description

RETURNING id BULK COLLECT INTO v_tab;

 

FOR i IN v_tab.first .. l_tab.last LOOP

DBMS_OUTPUT.put_line(‘UPDATE ID=’ || l_tab(i));

END LOOP;

 

COMMIT;

END;

/

UPDATE ID=1

UPDATE ID=2

UPDATE ID=3

 

5.We can also use the RETURNING INTO clause in combination with bulk binds.

 

SET SERVEROUTPUT ON

DECLARE

TYPE t_desc_tab IS TABLE OF t1.description%TYPE;

TYPE t_tab IS TABLE OF t1%ROWTYPE;

l_desc_tab t_desc_tab := t_desc_tab(‘FIVE’‘SIX’‘SEVEN’);

l_tab t_tab;

BEGIN

FORALL i IN l_desc_tab.first .. l_desc_tab.last

INSERT INTO t1

VALUES (t1_seq.nextval, l_desc_tab(i))

RETURNING iddescription BULK COLLECT INTO l_tab;

 

FOR i IN l_tab.first .. l_tab.last LOOP

DBMS_OUTPUT.put_line(‘INSERT ID=’ || l_tab(i).id || ‘ DESC=’ || l_tab(i).description);

END LOOP;

COMMIT;

END;

/

INSERT ID=5 DESC=FIVE

INSERT ID=6 DESC=SIX

INSERT ID=7 DESC=SEVEN

 

6.This functionality is also available from dymanic SQL.

 

SET SERVEROUTPUT ON

DECLARE

TYPE t_tab IS TABLE OF t1.id%TYPE;

l_tab t_tab;

BEGIN

EXECUTE IMMEDIATE ‘UPDATE t1

SET description = description

RETURNING id INTO :l_tab’

RETURNING BULK COLLECT INTO l_tab;

 

FOR i IN l_tab.first .. l_tab.last LOOP

DBMS_OUTPUT.put_line(‘UPDATE ID=’ || l_tab(i));

END LOOP;

COMMIT;

END;

/

UPDATE ID=1

UPDATE ID=2

UPDATE ID=3

SqlServer数据库访问Oracle数据库

最近要实现一段业务,把Sqlserver数据库中表的数据作为条件在Oracle核心库中查询到相应的数据,然后再在SqlServer数据库中做统计信息.所以要实现Sqlserver数据库到Oracle的DBlink把数据从Oracle数据库中拉出来.
 

准备工作:

1.必须安装SqlServer数据库;
2.要有Oracle的客户端,客户端版本不低于Oracle数据库的版本;
3.配置tnsnames.ora文件(路径:$ORACLE_HOME$\db_1\NETWORK\ADMIN\tnsnames.ora)
OrclDBLink =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ORCL.SNDA.COM)
    )
  )
4.测试tns配置是否成功,使用sqlplus命名在命令行窗口登录,如果能够登录成功说明tnsname.ora配置正确.
  
 
创建连接服务器
1.在常规页面配置,如图:
  
2.在安全性页面配置,如图:
  
 
测试访问Oracle数据库
1.SELECT * FROM DBLINK..HR.EMPLOYEES; 此查询对象要用大写,如果查询某个字段也要使用大写,连接服务器后面是两点[..]
2.SELECT * FROM 
openquery(DBLINK, ‘SELECT * FROM HR.EMPLOYEES’);此方法比上一种方法快50%,此方法跟直接连Oracle的速度相当.

Oracle中SID的作用

SID 主要用于区分同一台计算机上的同一个数据库的不同实例.SID 与ORACLE_HOM 一起HASH 出来一个UNIQUE KEY NAME 分配给SGA.
ORACLE
 数据库服务器主要有两部分组成:物理数据库和数据库管理系统
数据库管理系统是用户和物理数据库之间的一个中间层, 是软件层. 这个软件层具有一定的结构, 这个结构又被称为例程结构.
在启动数据库时, ORACLE 首先要在内存中获取,划分,保留各种用途的区域, 运行各种用途的后台进程, 即创建一个例程( instance ) , 然后由该例程装载, 打开数据库, 最后由这个例程来访问和控制数据库的各种物理结构.
在启动数据库并使用数据库的时候, 实际上是连接到该数据库的例程, 通过例程来连接、使用数据库. 所以例程是用户和数据库之间的一个中间层.
例程是由操作系统的内存结构和一系列进程所组成的, 可以启动和关闭.
一台计算机上可以创建多个ORACLE 数据库, 当同时要使用这些数据库时, 就要创建多个例程. 为了不使这些例程相互混淆, 每个例程都要用称为SID 的符号来区分, 即创建这些数据库时填写的数据库SID.

DELETE, TRUNCATE, DROP 的区别

1. delete/truncate 只删除数据不删除表,索引的结构. drop 将删除表的结构被依赖的index/constrain/trigger,依赖于该表的 procedure/function 将保留,但是变为 invalid 状态

2. delete 是 dml,写 rollback segement,可回滚,速度慢,事务提交之后才生效.在 9i 满足undo_retention 条件下可使用 flashback.一次性大批量数据的 delete 可能导致回滚段急剧扩展从而影响到数据库,慎用.触发 trigger. truncate/drop 是 ddl,隐式提交,不写 rollback segment,不能回滚,速度快.9i不能使用 flashback.不触发 trigger

3. delete 不影响表所占用的 extent, HWM 保持原位置不动,即使删除的是最靠近 HWM 的数据.delete 其实也可以释放空间,但是不降低 HWM, delete 后 block 的空闲空间达到 pct_used,就可以重用. truncate 缺省情况下将空间(表和索引)释放到 minextents 个 extent,除非使用 reuse storage.truncate 会将高水线复位(回到最开始). drop 将表所占用的空间全部释放,segment 不存在,无所谓 HWM 的概念

4. truncate/drop 的对象必须是本模式下的,或者被授予 drop any table 的权限,但 drop any table 权限不能 truncate/drop sys 的表. delete 的对象必须是本模式下的,或者被授予 delete on SCHEMA.table或 delete any table 的权限,但 delete any table 权限不能 delete sys 的表

5. 不能 truncate 一个带有 enable 外键的表,不管表里有没有数据,如果要 truncate,首先要 disable 外键或者删除外键(drop 外键的表肯定是删除了外键).不能 drop 一个带有 enable 外键的表,不管表里有没有数据,如果要 drop,首先要删除外键,或者直接用 drop table TABLE_NAME cascade constraints; 级联删除外键. delete 可以.

CREATE SEQUENCE command

PURPOSE:

    To create a sequence. A sequence is a database object from which multiple users may generate unique integers. You can use sequences to automatically generate primary key values.

 

SYNTAX:

CREATE SEQUENCE [schema.]sequence

    [INCREMENT BY integer]

    [START WITH integer]

    [MAXVALUE integer | NOMAXVALUE]

    [MINVALUE integer | NOMINVALUE]

    [CYCLE | NOCYCLE]

    [CACHE integer | NOCACHE]

    [ORDER | NOORDER]

 

where:

schema

    is the schema to contain the sequence. If you omit schema, Oracle creates the sequence in your own schema.

 

sequence

    is the name of the sequence to be created.

 

INCREMENT BY

    specifies the interval between sequence numbers. This value can be any positive or negative Oracle integer, but it cannot be 0. If this value is negative, then the sequence descends. If the increment is positive, then the sequence ascends. If you omit this clause, the interval defaults to 1.

 

MINVALUE

    specifies the sequence’s minimum value.

 

NOMINVALUE

    specifies a minimum value of 1 for an ascending sequence or -10 for a descending sequence.

    The default is NOMINVALUE.

 

MAXVALUE

    specifies the maximum value the sequence can generate.

 

NOMAXVALUE

    specifies a maximum value of 10 for a descending sequence.

    The default is NOMAXVALUE.

 

START WITH

    specifies the first sequence number to be generated. You can use this option to start an ascending sequence at a value greater than its minimum or to start a descending sequence at a value less than its maximum. For ascending sequences, the default value is the sequence’s minimum value. For descending sequences, the default value is the sequence’s maximum value.

 

CYCLE

    specifies that the sequence continues to generate values after reaching either its maximum or minimum value. After an ascending sequence reaches its maximum value, it generates its minimum value. After a descending sequence reaches its minimum, it generates its maximum.

 

NOCYCLE

    specifies that the sequence cannot generate more values after reaching its maximum or minimum value.

    The default is NOCYCLE.

 

CACHE

    specifies how many values of the sequence Oracle preallocates and keeps in memory for faster access. The minimum value for this parameter is 2. For sequences that cycle, this value must be less than the number of values in the cycle.

 

NOCACHE

    specifies that values of the sequence are not preallocated. If you omit both the CACHE parameter and the NOCACHE option, Oracle caches 20 sequence numbers by default. However, if you are using Oracle with the Parallel Server option in parallel mode and you specify the ORDER option, sequence values are never cached, regardless of whether you specify the CACHE parameter or the NOCACHE option.

 

ORDER

    guarantees that sequence numbers are generated in order of request. You may want to use this option if you are using the sequence numbers as timestamps. Guaranteeing order is usually not important for sequences used to generate primary keys.

 

NOORDER

    does not guarantee sequence numbers are generated in order of request. If you omit both the ORDER and NOORDER options, Oracle chooses NOORDER by default. Note that the ORDER option is only necessary to guarantee ordered generation if you are using Oracle with the Parallel Server option in parallel mode. If you are using exclusive mode, sequence numbers are always generated in order.

 

PREREQUISITES:

    To create a sequence in your own schema, you must have CREATE SEQUENCE privilege. To create a sequence in another user’s schema, you must have CREATE ANY SEQUENCE privilege. If you are using Trusted Oracle in DBMS MAC mode, your DBMS label must dominate the creation label of the owner of the schema to contain the sequence.

Oracle 10g 查询闪回功能应用

Oracle中如果错误地提交了修改操作,然后想查看并修改原来的值,这时候可以使用查询闪回(query flashback).

查询闪回可以根据根据一个时间值或者系统变更号(SCN:System Change Number)进行,数据库使用SCN来跟踪对数据进行的修改,因此可以用它来闪回到数据库中一个特定的SCN时的状态.

 

.执行闪回操作,需要使用DBMS_FLASHBACK,登录用户要具有此包的EXECUTE权限,下面以sys身份登录,并授权给用户EXECUTE权限:

CONNECT SYS/P@ssw0rd AS SYSDBA;

GRANT EXECUTE ON SYS.DBMS_FLASHBACK TO UserName;

 

.时间查询闪回

1.执行SQL语句从products中查询前五条记录,如下:

SELECT product_id, name, price, SYSDATE AS TIME

FROM products

WHERE product_id <= 5;

2.更新记录,如下:

SELECT product_id, NAME, price, SYSDATE AS TIME

FROM products

WHERE product_id <= 5;

3.执行DBMS_FLASHBACK.ENABLE_AT_TIME()语句,闪回到一个特定的时间,如下:

DBMS_FLASHBACK.ENABLE_AT_TIME(SYSDATE – 10 / 1440);

闪回到10分钟之前(24h * 60mins = 1440Mins).

4.现在执行查询,结果如下:

5.禁用闪回 EXECUTE DBMS_FLASHBACK.DISABLE(); 在再次启用闪回操作前,必须先将其禁用.这些命令只能在sqlplus中使用,pl/sql中不能使用.

 

.系统变更号查询闪回

根据SCN进行闪回操作比根据时间进行要更精确,因为数据库就是使用SCN来跟踪数据库的变化.

1.获得当前SCN命令:

VARIABLE curr_scn NUMBER;

EXECUTE :curr_scn := DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER();

print curr_scn

2.插入一条记录.

SELECT * FROM products;

INSERT INTO products(product_id, product_type_id, NAMEDESCRIPTION, price)

VALUES(13, 5, ‘Kobe Bryant’, ‘No.24’, ‘24.00’);

SELECT *

FROM products

WHERE product_id = 13;

3.通过DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER()语句可以闪回到这个SCN的状态,需要一个SCN参数.

EXECUTE DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER(:curr_scn);

4.查询刚刚插入的数据,没有任何记录.

SELECT *

FROM products

WHERE product_id = 13;

5.禁用闪回操:EXECUTE DBMS_FLASHBACK.DISABLE();

Oracle Flashback 闪回查询功能9i和10g的区别

Oracle9i开始提供了基于回滚段的闪回查询(Flashback Query)功能,可用于恢复错误的DML操作.Oracle 10g中对闪回查询做了较大改进,不再局限于闪回查询,还可用于恢复错误的DDL(Drop)操作,闪回表,闪回数据库等.下面介绍两个版本的区别:

Oracle9i 闪回原理:

    Oracle 9i中提供闪回查询,由一个新的包DBMS_FLASH来实现.用户使用闪回查询可以及时取得误操作DML(Delete, Update, Insert)前某一时间点数据库的映像视图,用户可以利用系统时间或系统改变号(SCNSystem Change Number)来指定这个只读视图,并可以针对错误进行相应的恢复措施.闪回查询功能完全依赖于自动回滚段管理(AUM),对于Drop等误操作不能恢复.

    因为Oracle9i使用undo来作为flashback query的前镜像存放点,所以 undo_management = auto,而且undo_retention设置时间要合理还有5分钟的问题,9i的时候,根据时间来做flashback query,是很容易有比较大的误差的,不过幸好的是,10g改进了这一点.其实,主要的原因是因为,9iscn与时间的同步问题,需要5分钟以后才能同步,也就是说,如果新插入的数据,还不到5分钟,马上就根据时间来flashback query,是查不到数据的.

1.查找SCN, Time对应关系:SELECT to_char(sysdate, ‘yyyy-mm-dd hh24:mi:ss’),

                             to_char(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) AS SCN

                      FROM dual;  

2.通过时间flashback query数据:SELECT * FROM test AS OF TIMESTAMP

                            TO_TIMESTAMP(‘2007-04-09 11:25:17’, ‘YYYY-MM-DD HH:MI:SS’);   

3.通过SCN闪回数据:SELECT * FROM test AS OF SCN 23565583;  

——————————————————————————————————-  

Oracle10g 闪回原理:

   Oracle Flashback Database特性允许通过SQL语句Flashback Database语句,让数据库前滚到当前的前一个时间点或者SCN,而不需要做时间点的恢复.闪回数据库可以迅速将数据库回到误操作或人为错误的前一个时间点,Word中的撤消操作,可以不利用备份就快速的实现基于时间点的恢复.Oracle通过创建新的Flashback Logs(闪回日志),记录数据库的闪回操作.如果希望能闪回数据库,需要设置如下参数:1.DB_RECOVER_FILE_DEST日志的存放位置,

2.DB_RECOVER_FILE_DEST_SIZE恢复区的大小.在创建数据库的时候,Oracle将自动创建恢复区,但默认是关闭的,需要执行 alter database flashback on命令.

SQL>flashback database to time to_timestamp(xxx);

SQL>flashback database to scn xxx 

    Oracle Flashback Table特性允许利用Flashback Table语句,确保闪回到表的前一个时间点.Oracle 9i中的Flashback Query相似,利用回滚段信息来恢复一个或一些表到以前的一个时间点(一个快照).要注意的是,Flashback Table不等于Flashback Query, Flashback Query仅仅是查询以前的一个快照点而已,并不改变当前表的状态,Flashback Table将改变当前表及附属对象一起回到以前的时间点.

flashback table tablename to timestamp xxx

flashback table tablename to scn xxx 

例如:SQL>flashback table test to timestamp to_timestamp(‘2005-05-07 15:00:00’, ‘yyyy-mm-dd hh24:mi:ss’);  

    Oracle Flashback Drop特性提供一个类似回收站的功能,用来恢复不小心被删除的表.当删除表时,Oracle 10g并不立刻释放被删除的表所占用的空间,而是将这个被删除的表进行自动重命名(为了避免同类对象名称的重复)并放进回收站中.所谓的回收站类似于 Windows系统中的回收站,是一个虚拟的容器,用于存放所有被删除的对象,在回收站中被删除的对象将占用创建时的同样的空间.如果这个被删除的表需要进行恢复,就可利用Flashback Drop功能.

SQL>show recyclebin;

SQL>drop table test_drop;

SQL>show recyclebin;

ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME

TEST_DROP BIN$b+XkkO1RS5K10uKo9BfmuA==$0 TABLE 2005-05-07:14:30:47 

SQL>flashback table test_drop to before drop;

SQL>flashback table “BIN$b+XkkO1RS5K10uKo9BfmuA==$0” to before drop;

最后清理回收站:

1.清除回收站中的单个表:purge table test_drop

2.清除整个回收站:purge recyclebin

3.清除不同的对象回收站:purge user_recyclebinpurge dba_recyclebin 

4.彻底删除一个table:SQL>drop table test_drop purge;就不能被恢复了.

单独还原个别文件操作

创建数据库与多个文件组,在各个文件组中放置不同的数据表,故意损坏其中一个文件后,

通过设置,可以让改数据库内其它完好的文件组继续提供访问,并经过还原备份数据,可以单独回复该数据文件与文件组

 

1.创建NWind测试数据库,并添加3个文件组

  

 

 

2.在不同的FileGroup中分别放置一个数据表

3.查看各个数据表所属的FileGroup

4.分析各个数据文件的属性

 

 

5.向数据库中插入数据

  

6.分析各个表中的数据

  

 

 

7.备份NWind数据库

 

 

8.暂停MSSQLSERVER服务,并删掉NWind_B.ndf文件模拟数据库损坏

 

 

9.出现错误

 

 

10.检查NWind数据库处于RECOVERY_PENDING状态

 

11.设置文件NWind_B为OFFLINE,并设置NWind数据库状态为ONLINE

 

12.分析各个数据文件的在线状态

 

 

13.分析各个表的数据,查询TbB时候出错

 

14.向数据库中插入数据,TbB中插入数据时出错

 

15.备份日志文件

NO_TRUNCATE 指定不截断日志,并使数据库引擎尝试执行备份,而不考虑数据库的状态.

因此,使用 NO_TRUNCATE 执行的备份可能具有不完整的元数据.该选项允许在数据库损坏时备份日志.

BACKUP LOG 的 NO_TRUNCATE 选项相当于同时指定 COPY_ONLY 和 CONTINUE_AFTER_ERROR.

如果不使用 NO_TRUNCATE 选项,则数据库必须联机.

 

16.查询备份文件的头信息

 

17.查询备份文件的文件信息

 

18.还原损坏的数据库

 

19.分析各个数据文件的属性,Nwind_B处于RESTORING状态

20.还原NWind的日志文件

21.分析各个数据文件的属性

 

22.分析各个表中的数据

Database Mirroring

试验目标:创建Database Mirroring

准备工作:

1.准备3台数据库实例

  • WIN-9JFNLS74727为主服务器
  • WIN-9JFNLS74727/SQLSERVER_R2_S01为镜像服务器
  • WIN-9JFNLS74727/SQLSERVER_R2_S02为见证服务器

         

2.在主服务器上创建DB_Mirror示例数据库,并设置示例数据库的RECOVERY MODEL为FULL

3.备份主服务器上的DB_Mirror示例数据库

  

4.将DB_Mirror示例数据库的备份文件以WITH NORECOVERY模式还原至镜像服务器,以承接后续的事务数据

 

实验步骤

1.创建端点:

  • SQL Server Management Studio主服务器的DB_Mirror数据库中,单击右键选择属性选项,然后在数据库属性对话框中选择镜像页签,如图:

  • 在单击配置安全性按钮,弹出设置数据库镜像安全向导对话框,包括见证服务器窗口中选择如图所示:

  • 分别设置主体,镜像和见证服务器,首先是主体服务器的端点名称侦听器端口(默认5022)”,如图:

  • 设置镜像服务器的端点名称侦听器端口(默认5023)”,如图:

  • 设置见证服务器的端点名称侦听器端口(默认5024)”,如图:

  • 显示配置信息

  • 显示配置成功

2.创建镜像连接

  • 创建成功后向导会询问是否要启动镜像,可以立即启动或者事后再启动

  • 服务器网络地址:显示了3个服务器(主体,镜像,见证)端点路径及通信端口
  • 运行模式:
    • 高性能模式:不需要见证服务器,采用异步操作,有数据遗失的风险
    • 高保护模式:不需要见证服务器,采用同步操作,没有数据遗失的风险,但是主体发生异常时必须手动转移至镜像服务器
    • 高可用模式:需要有见证服务器,采用同步操作,没有数据遗失的风险,如果主体发生异常可以自动转移至镜像服务器
  • 镜像机制开始运行

3.验证数据库镜像

  • 在主体服务器上创建表及数据

  • 点击故障转移“,如图

  • 验证镜像服务器中数据

master数据库的备份与恢复

master数据库内保存了SQL Server最重要的信息,主要包括:

1.服务器系统配置

2.用户登录账户

3.用户数据库的配置及文件位置

 

master数据库备份的原则是:只要SQL Server系统配置有任何更改或者执行各项数据库管理工作,都要备份master数据库

1.创建或者删除数据库

2.新建或者移除文件和文件组

3.新建SQL Server登录账户或变更安全性设置

4.更改SQL Server服务器级别设置,或者数据库配置选项

5.创建或者移除备份设备

6.配置SQL Server分布式查询与远程调用(RPC)功能

 

master数据库还原步骤

1.执行setup.exe重建master数据库

2.以’单一用户模式’启动SQL Server实例

3.利用最近一次的备份数据还原master数据库

4.重新启动SQL Server实例

 

在SQL Server 2008中,如果需要重新创建master数据库,必须利用SQL Server的安装程序从命令行执行setup.exe,语法为:

setup.exe /QUIET /INSTANCENAME=MSSQLSERVER /ACTION=REBUILDDATABASE /SQLSYSADMINACCOUNTS=Administrator /SAPWD=…

/QUIET:setup.exe工具程序不呈现互动画面,直接完成指令所要求的工作

/INSTANCENAME:目标实例名称,如果是默认实例则为MSSQLSERVER

/ACTION:要setup.exe执行的工作,此处REBUILDDATABASE选项代表要创建系统数据库

/SQLSYSADMINACCOUNTS:管理SQL Server实例的Windows账户

/SAPWD:若SQL Server的验证采用混合验证模式,则通过这个参数给定sa账户的密码,要满足复杂度

SQL Server 2008后setup.exe工具程序在路径 C:/Program Files/Microsoft SQL Server/100/Setup Bootstrap/Release 下

 

执行sqlservr.exe 加上-m选项,以单用户模式启动SQL Server,如:sqlservr.exe -m

sqlservr.exe在路径C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/Binn下

利用单用户模式启动SQL Server实例后,应先停用SQL Server相关服务,包括:

1.SQL Server Agent

2.SQL Server Analysis Services

3.SQL Server Fulltext Search

4.SQL Server Integration Services

5.SQL Server Reporting Services

 

执行RESTORE DATABASE语句还原master数据库

[c-sharp] view plaincopy

  1. USE MSDB
  2. GO
  3. RESTORE DATABASE master
  4. FROM DISK = N’物理路径’

 

 

详细步骤:

1.创建master的备份设备

 

[c-sharp] view plaincopy

  1. EXEC sp_addumpdevice N’DISK’, N’Master_BackupDevice’, N’D:/master.bak’

 

 

2.设置master数据库的恢复模式为完整

 

[c-sharp] view plaincopy

  1. ALTER DATABASE master SET RECOVERY FULL
  2. — 或者用修改数据库选项方式:
  3. EXEC sp_dboption master, N’trunc. log on chkpt.’, FALSE
  4. EXEC sp_dboption master, N’select into/bulkcopy’, FALSE

 

 

3.备份master数据库到Master_BackupDevice备份设备中

 

[c-sharp] view plaincopy

  1. BACKUP DATABASE master
  2. TO Master_BackupDevice
  3. WITH NAME = N’master 完全备份’, COMPRESSION, INIT

 

 

4.备份master数据库后创建,测试还原master之后的结果

 

[c-sharp] view plaincopy

  1. CREATE DATABASE AfterMaster

 

 

5.停掉SQL Server所有服务,并在路径C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA下删除master数据库文件(master.mdf)和mastlog.ldf文件,以模拟master数据库的损坏

 

6.重建master数据库,进入命令行界面执行 cd C:/Program Files/Microsoft SQL Server/100/Setup Bootstrap/Release进入此路径,然后执行 setup.exe /QUIET /INSTANCENAME=MSSQLSERVER /ACTION=REBUILDDATABASE /SQLSYSADMINACCOUNTS=CA0043416 /SAPWD=1q2w3e.!! 命令,如下图,此时C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA路径下出现了master.mdf和mastlog.ldf文件

 

 

7.单用户模式启动SQL Server实例,进入命令行界面执行 cd C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/Binn进入此路径,然后执行命令sqlservr.exe -m,如下图所示:

 

8.还原master数据库,再打开一个命令行界面,执行sqlcmd命令,利用sqlcmd工具程序登陆SQL Server

 

[c-sharp] view plaincopy

  1. — 执行RESTORE DATABASE语句还原master数据库
  2. USE msdb
  3. GO
  4. RESTORE DATABASE master
  5. FROM DISK = N’D:/master.bak’
  6. WITH REPLACE
  7. GO

 

 

9.还原成功 执行NET START MSSQLSERVER命令,重新启动SQL Server实例

 

 

10.如预期所想,启动SQL Server实例后没有AfterMaster数据库,则附加数据库到SQL Server

 

[c-sharp] view plaincopy

  1. USE [master]
  2. GO
  3. CREATE DATABASE [AfterMaster] ON
  4. ( FILENAME = N’C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AfterMaster.mdf’ ),
  5. ( FILENAME = N’C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AfterMaster_log.LDF’ )
  6. FOR ATTACH
  7. GO

 

更多0