replay怎么移到win7文档转移库里去

君,已阅读到文档的结尾了呢~~
flash从零学起完整版46764
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
flash从零学起完整版46764
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口帐号:密码:下次自动登录{url:/nForum/slist.json?uid=guest&root=list-section}{url:/nForum/nlist.json?uid=guest&root=list-section}
贴数:1&分页:*.*发信人: Gameplayer (一直在努力 | 做), 信区: LinuxDev
标&&题: [合集] git有没有办法把一个文件从库里完全删除
发信站: 水木社区 (Mon Aug 17 13:59:04 2009), 站内 && ☆─────────────────────────────────────☆ &&
meteor1113 (刘欣) 于
(Mon Aug&&3 15:39:16 2009)
提到: && 比如有一个库,一共才1M,已经用了几年了,有很多history不想丢掉,但后来不小心往里commit了一个几百M的大文件,work copy里虽然可以删掉这个文件,可是不想因为这么个东西把.git弄得几百M大。有什么办法把它从里面删掉吗? &&&&&& ☆─────────────────────────────────────☆ &&
jjgod (while(!asleep()) sheep++;) 于
(Mon Aug&&3 15:40:00 2009)
提到: && 我记得是有的,但是很麻烦
【 在 meteor1113 (刘欣) 的大作中提到: 】
: 比如有一个库,一共才1M,已经用了几年了,有很多history不想丢掉,但后来不小心往里commit了一个几百M的大文件,work copy里虽然可以删掉这个文件,可是不想因为这么个东西把.git弄得几百M大。有什么办法把它从里面删掉吗?
&&&&&&&& ☆─────────────────────────────────────☆ &&
Dieken (风催草低 - 明月何尝不照人) 于
(Mon Aug&&3 15:53:04 2009)
提到: && 不麻烦,git help filter-branch&&有例子。 &&&& 【 在 jjgod (while(!asleep()) sheep++;) 的大作中提到: 】
: 我记得是有的,但是很麻烦
&&&&&&&& ☆─────────────────────────────────────☆ &&
meteor1113 (刘欣) 于
(Mon Aug&&3 16:00:52 2009)
提到: &&&& 是这里面写的这个吗: && Removing a File from Every Commit && This occurs fairly commonly. Someone accidentally commits a huge binary file with a thoughtless git add ., and you want to remove it everywhere. Perhaps you accidentally committed a file that contained a password, and you want to make your project open source. filter-branch is the tool you probably want to use to scrub your entire history. To remove a file named passwords.txt from your entire history, you can use the --tree-filter option to filter-branch: && $ git filter-branch --tree-filter 'rm -f passwords.txt' HEAD
Rewrite 6b9b3cf04e7c8c3f36a8cb6a0fc2bd (21/21)
Ref 'refs/heads/master' was rewritten && The --tree-filter option runs the specified command after each checkout of the project and then recommits the results. In this case, you remove a file called passwords.txt from every snapshot, whether it exists or not. If you want to remove all accidentally committed editor backup files, you can run something like git filter-branch --tree-filter 'rm -f *~' HEAD. && You’ll be able to watch Git rewriting trees and commits and then move the branch pointer at the end. It’s generally a good idea to do this in a testing branch and then hard-reset your master branch after you’ve determined the outcome is what you really want. To run filter-branch on all your branches, you can pass --all to the command. &&&& 【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: 不麻烦,git help filter-branch&&有例子。
&&&&&&&& ☆─────────────────────────────────────☆ &&
meteor1113 (刘欣) 于
(Mon Aug&&3 16:02:09 2009)
提到: &&&& 我照这样做了之后,master里好像确实把这个文件删除了,可是我发现git自动建立了另外的branch,这些branch里还是有这个文件啊。
.git目录也没变小过 && 【 在 meteor1113 (刘欣) 的大作中提到: 】
: 是这里面写的这个吗:
: Removing a File from Every Commit
: This occurs fairly commonly. Someone accidentally commits a huge binary file with a thoughtless git add ., and you want to remove it everywhere. Perhaps you accidentally committed a file that contained a password, and you want to make your project op
: ...................
&&&&&& ☆─────────────────────────────────────☆ &&
Dieken (风催草低 - 明月何尝不照人) 于
(Mon Aug&&3 17:15:15 2009)
提到: && git branch -D xxx
rm -rf .git/logs
git gc --aggressive && 【 在 meteor1113 (刘欣) 的大作中提到: 】
: 我照这样做了之后,master里好像确实把这个文件删除了,可是我发现git自动建立了另外的branch,这些branch里还是有这个文件啊。
: .git目录也没变小过
&&&&&&&& ☆─────────────────────────────────────☆ &&
Dieken (风催草低 - 明月何尝不照人) 于
(Mon Aug&&3 17:15:54 2009)
提到: && 我不是说了 git help filter-branch 么,你舍近求远干嘛。。。。 && 【 在 meteor1113 (刘欣) 的大作中提到: 】
: 是这里面写的这个吗:
: Removing a File from Every Commit
: This occurs fairly commonly. Someone accidentally commits a huge binary file with a thoughtless git add ., and you want to remove it everywhere. Perhaps you accidentally committed a file that contained a password, and you want to make your project op
: ...................
&&&&&& ☆─────────────────────────────────────☆ &&
meteor1113 (刘欣) 于
(Mon Aug&&3 17:48:07 2009)
提到: &&&& git help那东西我没看懂... && 【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: 我不是说了 git help filter-branch 么,你舍近求远干嘛。。。。
&&&&&&&& ☆─────────────────────────────────────☆ &&
Dieken (风催草低 - 明月何尝不照人) 于
(Mon Aug&&3 17:51:22 2009)
提到: && 我说在例子里,呵呵 && 【 在 meteor1113 (刘欣) 的大作中提到: 】
: git help那东西我没看懂...
&&&&&&&& ☆─────────────────────────────────────☆ &&
meteor1113 (刘欣) 于
(Mon Aug&&3 17:58:00 2009)
提到: &&&& 还是不行啊
appledemacbook:~ apple$ mkdir test
appledemacbook:~ apple$ cd test
appledemacbook:test apple$ git init
Initialized empty Git repository in /Users/apple/test/.git/
appledemacbook:test apple$ du -hs &&60K&&&&.
appledemacbook:test apple$ dd if=/dev/urandom of=testme.txt count=10 bs=1M
dd: bs: illegal numeric value
appledemacbook:test apple$ dd if=/dev/urandom of=testme.txt count=10240 bs=1024
10240+0 records in
10240+0 records out
bytes transferred in 1.801582 secs (5820307 bytes/sec)
appledemacbook:test apple$ git add testme.txt&& appledemacbook:test apple$ git commit -m 'a'
[master (root-commit)]: created da8f245: "a" &&1 files changed, 0 insertions(+), 0 deletions(-) &&create mode 100644 testme.txt
appledemacbook:test apple$ du -hs &&20M&&&&.
appledemacbook:test apple$ git rm testme.txt&& rm 'testme.txt'
appledemacbook:test apple$ git commit -m "r"
[master]: created 9e3f6fb: "r" &&1 files changed, 0 insertions(+), 0 deletions(-) &&delete mode 100644 testme.txt
appledemacbook:test apple$ du -s -m
appledemacbook:test apple$ git filter-branch --tree-filter 'rm -f testme.txt' HEAD
Rewrite 9e3f6fbbb693b471bf0aefffaedf2d (2/2)
Ref 'refs/heads/master' was rewritten
appledemacbook:test apple$ git branch
appledemacbook:test apple$ rm -rf .git/logs
appledemacbook:test apple$ rm .git/
COMMIT_EDITMSG&&config&&&&&&&&&&index&&&&&&&&&& refs/
HEAD&&&&&&&&&&&&description&&&& info/&&&&&&&&&&&& branches/&&&&&& hooks/&&&&&&&&&&objects/&&&&&&&&
appledemacbook:test apple$ rm .git/refs/original/refs/heads/master&& appledemacbook:test apple$ du -hs &&10M&&&&.
appledemacbook:test apple$ git gc --aggressive
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), done.
Total 3 (delta 1), reused 0 (delta 0)
appledemacbook:test apple$ du -hs &&10M&&&&. && 【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: git branch -D xxx
: rm -rf .git/logs
: git gc --aggressive
: ...................
&&&&&& ☆─────────────────────────────────────☆ &&
meteor1113 (刘欣) 于
(Mon Aug&&3 18:00:01 2009)
提到: &&&& 我就是说那个例子。不过他好多例子,我只看懂git filter-branch --tree-filter 'rm filename' HEAD和git filter-branch --index-filter 'git rm --cached filename' HEAD这俩。
后面和subdirectory-filter相关的我就没看明白了。
好像后面的和我说的这个没相关吧 && 【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: 我说在例子里,呵呵
&&&&&&&& ☆─────────────────────────────────────☆ &&
Dieken (风催草低 - 明月何尝不照人) 于
(Mon Aug&&3 18:29:48 2009)
提到: && 还真难清理,git 很保守。。。 && $ git ls-remote .
$ git update-ref -d xxxxx&&(xxx&&是列出来的那个 original 的名字)
$ rm .git/ORIG_HEAD
$ git prune && git gc 会保留那个之前提交的文件。 && 【 在 meteor1113 (刘欣) 的大作中提到: 】
: 还是不行啊
: appledemacbook:~ apple$ mkdir test
: appledemacbook:~ apple$ cd test
: ...................
&&&&&& ☆─────────────────────────────────────☆ &&
meteor1113 (刘欣) 于
(Mon Aug&&3 21:02:11 2009)
提到: && 照这样就能删掉么?
【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: 还真难清理,git 很保守。。。
: $ git ls-remote .
meteor1113@ubuntu:~/test$ git ls-remote .
09e1f1cea48bf61f1fe1a538e8355&&&&&&&&HEAD
09e1f1cea48bf61f1fe1a538e8355&&&&&&&&refs/heads/master
a660ea88ff23d639ec2&&&&&&&&refs/original/refs/heads/master && : $ git update-ref -d xxxxx&&(xxx&&是列出来的那个 original 的名字)
git update-ref -d refs/original/refs/heads/master a660ea88ff23d639ec2
: $ rm .git/ORIG_HEAD
meteor1113@ubuntu:~/test/.git$ ls
COMMIT_EDITMSG&&branches&&description&&index&&logs&&&& refs
HEAD&&&&&&&&&&&&config&&&&hooks&&&&&&&&info&& objects
我这儿也没有ORIG_HEAD文件啊
meteor1113@ubuntu:~/test$ git ls-remote .
09e1f1cea48bf61f1fe1a538e8355&&&&&&&&HEAD
09e1f1cea48bf61f1fe1a538e8355&&&&&&&&refs/heads/master
不过刚才那个original确实删掉了 && : $ git prune
meteor1113@ubuntu:~/test$ git prune
meteor1113@ubuntu:~/test$ du -hs
11M&&&& . && : git gc 会保留那个之前提交的文件。
&&&&&&&& ☆─────────────────────────────────────☆ &&
Dieken (风催草低 - 明月何尝不照人) 于
(Mon Aug&&3 22:58:22 2009)
提到: && 为啥我就可以呢?见附件。 && .git/ORIG_HEAD 的存在与否貌似跟 git 版本有关系,删除它以及
.git/logs 是为了避免 git gc/prune 时考虑它们能追溯到被删除
的文件而保留它。 && 本来想做成 typescript 供 scriptreplay 回放的,结果发现手册里
说的 -t 要用2& 输出到一个时间文件,忘了敲这个,作罢,你看看
抓屏也行了。 && Debian testing, git version 1.6.3.3 && 【 在 meteor1113 (刘欣) 的大作中提到: 】
: 照这样就能删掉么?
: meteor1113@ubuntu:~/test$ git ls-remote .
: 09e1f1cea48bf61f1fe1a538e8355&&&&&&&&HEAD
: ...................
&&&&&& ☆─────────────────────────────────────☆ &&
Dieken (风催草低 - 明月何尝不照人) 于
(Mon Aug&&3 23:02:28 2009)
提到: && git config -l 显示: && core.logallrefupdates=true
user.email=xxx@yyy.zzz
user.name=XXX
rerere.enabled=true
color.ui=auto
diff.renames=copy
merge.summary=true
status.relativepath=true
alias.st=status
alias.ci=commit
alias.co=checkout
alias.desc=describe
alias.wtf=whatchanged
mitencoding=utf-8
core.repositoryformatversion=0
core.filemode=true && 【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: 为啥我就可以呢?见附件。
: .git/ORIG_HEAD 的存在与否貌似跟 git 版本有关系,删除它以及
: .git/logs 是为了避免 git gc/prune 时考虑它们能追溯到被删除
: ...................
&&&&&& ☆─────────────────────────────────────☆ &&
meteor1113 (刘欣) 于
(Tue Aug&&4 11:43:36 2009)
提到: &&&& Thank you.
照这么做可以了。可能昨天我还是忘了什么步骤 && 【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】
: 为啥我就可以呢?见附件。
: .git/ORIG_HEAD 的存在与否貌似跟 git 版本有关系,删除它以及
: .git/logs 是为了避免 git gc/prune 时考虑它们能追溯到被删除
: ...................
&&&&&& 文章数:1&分页:究竟是否需要升级到Oracle11g?
究竟是否需要升级到Oracle11g?
  Oracle 11g新特性测试一览
  摘要:本文作者对Oracle 11g的主要新功能特性做了测试,结合测试的结果,以及个人的体会,客观的讲述了Oracle 11g 的这些新功能特征。
  Oracle公司重量级产品Oracle 11g隆重发布,该产品以其良好的性能和便捷的管理辅助功能、优雅的应用程序测试、可靠的备用、低存储的要求给人留下深刻的印象。
  就我个人而言,我喜欢从“五点”审视数据库是否具有升级的必要性。如果新的数据库版本没有至少具备5种功能特性来改变我的生活,减少我的工作负担,那么我就认为该升级无足轻重,可升可不升。我的审视过程基本是这样的:我近似量化每周执行某项任务所需要的时间,然后评估升级后会给我节约多少时间。如果升级前我每周花上5个小时来处理资源使用(resource usage)工作,而升级后的版本可以自动来完成这项工作,那么升级可以每周给我省5小时,升级的结果还不错。同理,我拿这种方法来量化其它的四个功能特性,如果都可行,达到了5个以上的功能特性,并且确实减少了我的工作负担,那么我就向管理层推荐升级。
  我相信大多数Oracle数据库用户至少找出五种功能特性,告诉你Oracle 11g如何改变他们的生活。但是,值得一提的一个功能特性就是Real Application Testing,它是如此的具有吸引力,单凭这一点就有足够的理由来升级。用户在使用应用程序的过程中,通常会修改应用程序的代码,这样一来就出现了应用程序测试的问题,由于有了Real Application Testing,他们所需要的是再现生产工作负荷的方式来测试已做的修改,并且不影响生产环境(production environment)。Real Application Testing确实能做到这些。
  Database Replay、SQL Performance Analyzer、Real Application Testing这些功能特性能够使你捕捉工作负荷(workload),了解它的性能统计情况和重放它(无论在同一个逻辑单元或者另外的逻辑单元),计算出性能结果。对工作负荷的控制、管理达到如此水平是大多数数据库提供商一直追求的目标。
  Oracle 11g另外重大并且新增的功能就是Snapshot Standby、Active Data Guard、Advanced Compression。另外还有表现在资源管理改进、SQL 调整、健康检查。
  Active Data Guard由于其安装困难,文档较少(尤其是Window操作系统)使用起来有些费劲,但是它确实不必可少的,任何DBA都要设置一个空闲的备用数据库。而Data Guard的新Snapshot Standby将帮助DBA管理更改控制和应用程序测试(application testing)。
  在执行Advanced Compression的时候我很小心。我还不能达到它应该具有的压缩水平,并且它很贵,到多数用户的成本效应并不能实现。然而,却毫无疑问,只要你用好了,Advanced Compression能够有助一个DBA实现很高水平的复制。
  Result Cache是另外一个新的功能特性,它能正确的提供你所请求的信息,因此你应该谨慎使用。但是,我做过一些测试,发现要想得到满意的效果还是可能的,只要你能理解这个技术,清晰定义你的目标,工作在你系统的范围之内。
  自动健康监视和数据恶化检查功能也使得这个版本增色不少。当存在发生数据恶化的可能性时,Oracle 11g会提前动作,并且做出决策。
  总之,这个版本功能很强大。虽然有几个瑕疵,但这不是阻止你去升级的理由。它有许多的新功能,不论是大型或者小型的用户,在新增的功能特性中总有一些会对你有很大的帮助。
  随着数据库的越来越庞大,开发者是越来越如履薄冰,还是他们不能保持知识技能的更新,与爆炸式的需求增长率同步?不管怎么样,Oracle 11g对于数据库管理员来说,是一个得力助手,帮助他们发现和处理资源扰乱代码(resource-hogging code)。
  Oracle 11g的启动器,对它的自动SQL调整增加了“自我学习”的功能。现在引擎能够检测高负荷量的SQL语句,并且将其保存下来,以便在维护窗口中调整。他能够实施一些自动修改,或是建议查询进行结构变化,如使用索引。如果你让引擎来做更多的关于查询性能调整的话,你可以让它来捕获你的查询语句,并且进行建议修改。此时,如果引擎大多数时间的实施能够证明是对的话,你就能更加信任他了。有一个问题是Oracle不能考虑整个工作负荷,因此所做的改变或许对某个常见查询的常规数据流造成损害。
  有不止一种方式来量化某个失去控制的工作负荷,Oracle有能力对付这种局面。当工作负荷出错,引起这种错误的原因通常是服务器性能三大主要因素之一:CPU、内存、磁盘I/O。通常资源控制器通过测量CPU或者内存来量化失控的工作负荷,但是Oracle 11g也能通过查看一段时间的I/O极限来测定。
  这些I/O极限能够允许你设定工作负荷的最大值(无论是以I/O请求或是兆字节的方式),这样一来服务器上的最大连接数就可以确定。I/O极限是一个非常重要的附加功能,尤其是在大型仓库的情形下,因为这些系统能够很容易达到磁盘的容量极限,并且CPU或者内存资源上限(capping)不能充分的解决磁盘争用(disk contention)。
  I/O限制还能够帮助DBA中途结束长时间运行的查询。由于没有别的办法来定义这种策略:是否这个查询在20分钟内占用CPU的20%,那么这种I/O限制就很有用了。举个例子,DBA将会经常写他们自己的check,接着写一些代码来中断这些长时间的运行结果。能够给整个I/O消耗加一个限制意味着不需要再手动来管理这些check。
  按照惯例来说,当出现问题时,你可以将这些长期运行的查询任务移到低级别的资源组中去。有些像曲棍球比赛中,将其遣送到受罚席去。如果你通过写SQL语句,来阻止系统故障,那么你将只有很少的资源可用,因为故障已经占用了很多资源了。最终结果是你需要花上更多的时间。
  Result Cache这个功能特性,要么是你使用得非常成功,要么彻底失败,关键是看谁来掌舵。Result Cache能够让你非常高效的将一个查询结果集插入到内存中的一个专门的缓冲器中,因此当以后请求同一个查询的时候,就能对磁盘查找起到分路的作用。你能缓存整个查询,子查询,甚至PL/SQL函数。当然,随后调用的查询请求必须和高速缓存的查询一致。在大多数情况下,仅仅由于传递的参数不同而使得查询不同(大多数的OLTP请求也是一样的),因此你必须要缓存很多的查询,实际上也只有很少的查询能重用。
  因此,Oracle给你提供了三种不同的结果集缓存级别:数据库级别,通话级,和查询级。这可以让你指定结果集缓存到上述哪种级别。对于这些级别的选择,有利有弊,除非你已经彻底进行了数据库级别的测试,并且正确的知道将会出现怎样的结果集,那么我建议坚持选择查询或者通话级。在数据库级,所有的查询结果集都会被缓存,包括那些不需要的结果集。并且在缺省的情况下,结果缓冲器只分配到缓冲器的一小部分,如果你不去扩大分配的空间,你是不可能看到那么多结果集的。
  Oracle有一个执行得非常好Result Cache,它能准确执行你交给它的任务。在我的初始测试中,查看结果集没有任何问题。我测试了几个查询进行摸索,的确看到查询时间有了很大的改进。但是当我大幅增加查询的数量,并且对查询设置参数,我就看不到初始测试中的性能提高的变化了。这并不是没有预料到的,该功能特性也并不是没有缺点。我要说的是在你将此功能应用于实际时,你需要仔细计划测试的数量,并且测试充分。
  不言而喻,这个功能特性主要目的是用来提高磁盘受限(disk-bound)系统的性能的,并不是用于内存受限(memory-bound)系统的。如果你已经经历过内存不够带来的压力,在一个已经是受约的系统还划出一个缓冲器只会使得情况更糟糕。我想指出:这个功能特性对于处理OLTP工作负荷并没有多大的帮助。如果你使用它来支持工作负荷,就要小心你缓存的查询结果集。很容易忘掉的是即使是64位系统也有内存极限,对于内存资源来说,高速缓存200万行的结果集或许不是最好的用途。
  我喜欢使用Result Cache来对付那些麻烦的查询,如有Join,或者结果是通过扫描表的查询得到。Result Cache是一个好的功能特性,几乎能让你做你所希望的事情。
  Oracle 11g在查询性能方面做了很多的努力,在监视和恢复讹误(corruption)方面也做了同样多的努力。如自动健康监测就是一个重大的特点,因为Oracle 11g运行的是反应检查(reactive check),或者是人工检查(manual check)。当一个严重的错误发生时,反应检查(reactive check)就会运行。这些检查可以检验数据库结构、数据完整性、redo完整性和其它的情况。当Oracle运行这些检查时,就会创建一个报表和给出一些建设性的修改。
  损坏undo程序段自动检疫是一个不错的工具。当Oracle 11g发现一个损坏的undo表空间,它就会隔离程序段,不让接下来的事务使用这个程序段。这就使得Oracle记录下这个损害,让这个损害不至于扩散。
  快速分析(Fast Analyze)功能特性将会治愈给大型数据库管理员的痛苦。快速分析(Fast Analyze)能够让你更快的扫描表索引讹误(corruption)。这个功能特性是非常重要的,因为这类维护工作都是在预订的维护窗口完成的,如果分析操作不能在这个窗口完成,那么维护工作也不能完成。
  Data Guard是Oracle提供完全的数据库备用的技术,防止灾难性事故发生。Data Guard以防各种系统、网络故障,不局限于地理位置。备用数据库可以与运行数据库在同一个房间,也可以在千里之外。但是像其它的故障切换解决方案一样,包括远程的监控和本地群集,当第一线的数据库在线时,备用数据库是空闲,不可用的。
  一项新的Data Guard功能特性出现了,我们称之为Snapshot Standby,这个技术能让你将备用数据库处于临时的读写模式(read/write mode),在提供原始的HA/DR保护的同时还能让你测试数据库改变。单单这个功能特性就能改变公司管理数据库开发、更改控制、基准测试等的工作方式。应用程序升级等这些相关任务的方式也发生改变。
  举个例子,假设你需要在你的生产数据库(production database)上对一个重要的存储过程进行修改。问题是不进行生产工作负荷测试,你就不知道这个修改到底对你的系统有多少性能的改善。Snapshot Standby和Database Replay(下面将会提到)联手的话,你就能测试任何情况。你所需要做的就是记录你主要数据库的生产工作负荷,将备用数据库设置为读写模式,在备用数据库上执行你修改的代码。接着在备用数据库上重放你记录的工作负荷,接着你就可以比较结果了。
  当你把备用数据库设置为Snapshot Standby模式时,就会停止应用来自主要数据库的日志(日志仍旧在发送,只是他们暂时没有应用)。当你完成测试后,能将备用数据库调回读模式。这个时候备用数据库将会自动废除你之前的所有修改,返回到你测试前的状态,应用那些一直等待应用的日志。这样一来,备用数据库在物理上一直和主要数据库保持同步,只是暂时在逻辑上不同步。
  Snapshot Standby还有许多时候能派上用场,从查找生产故障到磁盘布局分区的索引调整。在很重的用户负荷下,可以使用Snapshot Standby来测试备份,索引reorgs。它几乎可以做任何事情。
  这里还有另外一个使用目的。DBA最重要的问题之一就是让分析员、开发者和其它的人员不能进入生产数据库。他们都有合法的理由来读取系统的数据,但是由于性能和顺应性的原因,你希望尽可能的限制他们的访问。通常的做法是你将提供另外一台服务器供他们使用,通过备份/恢复或者复制的方法,让这台数据库和生产数据库保持同步。使用Snapshot Standby这个功能特性,你只在一个数据库上就可以完成上述的功能。
  像Snapshot Standby功能特性一样,Active Data Guard能够让你有备份数据库,也能使用它。在Oracle 11g中引入了一个新的选择权,Active Data Guard允许你将备用数据库设置为读模式,支持实时查询,用来解决一个重大的问题:即当提供近实时(near-real-time)报表,如何分离OLTP和读取活动。Active Data Guard不仅仅允许你很容易读取备用数据库,也能让你在客户端做一些小的配置改变。
  通过将资源密集的活动从生产数据库卸载到一个或多个同步的备用数据库来提高服务质量。 Oracle活动数据卫士支持对物理备用数据库进行只读访问,以便进行查询、排序、编制报表、基于Web的访问等,同时不断地实施从生产数据库收到的变 更。Oracle活动数据卫士还能够在把备份卸载到备用数据库时使用快速增量备份方法,而且它还能够提供高可用性以及在生产现场对计划内和计划外停机的灾 害预防等更多好处。
  某个工作负荷,在相同或者不同的系统下重放,接下来你就可以比较结果。Database Replay准确的重放工作负荷的并发性和时间,允许让你充分测试修改,如同在真实的工作负荷下。因此,在你将这些修改运用到生产之前,你就能看到这些修改对数据库的真实影响。
  在我所做的测试中,Database Replay非常容易配置,正如我所预料的结果。你只需要学习几个简单的配置的相关概念,比如说如何在数据库中创建目录对象(directory object),以此来捕获工作负荷;如何以命令行的方式来启动重放,一旦你熟悉了这些,以后就一帆风顺了。
  我测试选择的是50个用户、读写混合的工作负荷。在测试中,我删除了表格的索引,以便我能看到报表编号方面的变化。正如我所期待的,删除索引的却增加了写入的性能,却减弱了读取的性能。我能检验出重放机制(replay mechanism)重新创建了所有的线程,并且能够很好的运行它们。
  建立一个捕获只需要四五步的过程。常用的做法是你重启数据库,为捕获设置选择(哪些部分的工作负荷是要包含,哪些是需要排除的),创建目录来保存捕获文件,设置捕获开始时间和持续时间,或者人工启动它,停止它。
  你能够在主机或者客户机上重放工作负荷。如果你捕获了大的工作负荷,Database Replay有一个校准的工具,告诉你需要多少重放客户端。
  另外一种分析工作负荷、图表的方法就是:当你运行重放工作负荷时,简单的记录在SQL Performance Analyzer中的数据。数据库不会知道100个真实用户工作负荷和100个虚拟用户工作负荷之间的区别,因此,当你做重放测试时,你就简单的捕获Performance Analyzer中的有用数据。
  简单的使用Database Replay来捕获主要数据库的工作负荷,将备用数据库设置为读写模式,完成你所需要完成的修改,然后重放备用数据库中的工作负荷,这样一来就完成了测试。完成测试之后,你能记录测试结果,还原备用数据库的状态,和工作数据库保持一致。
  在数据库的管理中,既要保证在真实的环境,而又要避免在生产数据库中完成准确的测试是最为重要的问题之一。Database Replay以一种简单和优雅的方式很好的解决了这个问题。
  还有另外一个功能特性是Advanced Compression。一种写入数据的方式,使得数据占据更少的空间,Advanced Compression能够减少存储费用,减少内存和网络带宽,甚至提高查询性能。通过替换重复值,Advanced Compression节约了存储空间。换句话说,Advanced Compression并没有真正压缩数据,只是将数据库标准化。你的数据越重复,你使用Advanced Compression就越成功。另外,因为Advanced Compression工作在数据库块级,压缩比取决于数据表中数据的顺序。
  除了能够在磁盘上存储更多的数据,Advanced Compression还能提高I/O性能。因为更多的数据压缩到更少的空间,更容易满足数据库查询。从物理角度来说,数据库从硬盘上读入的数据越少,获取数据库的数据就会更快。
  因此Advanced Compression将会提高某些查询的性能,并不是全部的查询。它将减少一些数据的储存空间的需求,并不是所有的数据都是如此。另外,即使是同样的数据,总压缩比也会不同,取决于数据的重复度和数据的顺序(索引)。
  我在两个单独的数据库上测试了Advanced Compression。第一个测试案例:数据库数据来自TPC-C 基准测试,模拟联机事务处理的真实环境。在第二个测试案例:数据库数据是由Oracle 联机事务处理表压缩工具(OLTP Table Compression Test Kit)提供的。
  这时候,我想你已经猜想Advanced Compression由于数据表和数据的不同而有不同的表现,事实上你的猜想是对的,我的两个测试结果的确如此。Oracle测试工具(Oracle Test Kit)提供的两个数据表不仅仅压缩到原始大小的1/4,并且查询性能有了很大的提高,甚至也提高了写操作的速度。而TCP-C数据库表压缩的不是很好,是原始大小的15%到57%不等,并且也没有看到查询或者写操作性能的提高。
  很自然,我的测试结果,Oracle自己的测试结果,以及你的测试结果都不会相同。当然你的压缩结果也会根据表的不同而不同,有时候差别还会非常大。需要注意的是对数据表做修改会导致压缩比的变化。如果商业报告变化(事实上经常发生),你就需要对你的数据表排序,这样就会使得压缩比大量下降。更坏的情况是,你或许突然发现你的磁盘空间不够了。
  需要注意的是,Advanced Compression也增加了系统资源的成本。当我给TCP-C基准测试进行读测试时,我将所有类似的数据集合在一起,然后进行查询。我期待聚合类似的数据会提高扫描性能。但是,这种情况并没有发生。因此除非你充分测试,用你的真实生产数据,你可能能得到令人惊喜的结果。
  对于能够正确管理Advanced Compression、使用很成功、并且维护的很好的数据库管理员来说,Advanced Compression就会是一个巨大的帮助,但是它也会平时的操作带来了复杂度,你应该谨慎。在你执行之前,你需要做大量的回归测试,保证你的应用程序和以前一样工作正常。
  总之,Oracle 11g 增加了许多新的功能特性,非常有用的当属真实环境应用程序测试(Real Application Testing)功能特性。其它诸多功能加以利用,会给极大减轻平时工作负担。
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&}

我要回帖

更多关于 怎么转移我的文档 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信