最好的比特币钱包有哪些?- 高级指导

在本指导中,我们会帮你找到最好的比特币钱包!

不过请注意!并不存在一种可以适用于所有需求的比特币钱包。不同运营平台提供的钱包都有其不同的特点。

如果你想知道那个钱包最适合你,那么请往下读…

 

1章:什么以比特币钱包?

一个比特币钱包是你使用比特币所需的第一步。为什么这么说?

如果你没有这样一个钱包,你就不能接收,存放和支付比特币啦~

你可以将比特币钱包看作是你个人接入比特币网络的一个接口,这就像在一般的金融系统中以你在线银行账户作为接口是一个道理。

比特币钱包中含有私钥;这保证了你可以使用你的比特币做支付。

而实际上,并不是你的比特币需要进行安放,而是你需要钱包中的私钥来访问到你的这些加密货币。

换言之,比特币钱包可比是一种简单应用,网站,或这设备,专门用于为你管理和保存你的货币私钥。

 

2章:比特币钱包种类

让我们先讨论下比特币钱包的种类,这样你就知道为什么你需要这种而不是那一种了~

 

硬钱包

硬钱包(或称硬件钱包)是一种电子设备,其唯一目的就是为了保护比特币安全。

其核心创新是,你必须将硬钱包连接到你的计算机、手机或其它手持设备上才能允许进行比特币支付。

当前流行的几个最好的比特币硬钱包是:

  • Ledger Nano S
  • KeepKey
  • Trezor

图中为一款Nano S硬钱包

如果你特别需要保证数字资产安全并考虑相对方且可信赖的比特币存放的的话,硬钱包是一个不错的选择。

比特币硬钱包保护了私钥以免于存放在脆弱的网络连接设备上。

你的所有重要的私钥都被以一种安全的线下方式存于硬钱包中,即使硬钱包设备插入了已经受到恶意软件感染的计算机上,这些私钥文件也仍处于充分保护当中。

由于比特币是数字货币,你计算机上的“软件钱包”很可能成为网络犯罪的潜在目标,他们通过获取你钱包中的私钥从而偷取你的比特币。

使用硬钱包生成并线下存放你的私钥可以保证黑客无法盗取你的比特币。

当然,这并不意味着黑客不能去偷你的硬钱包,而且甚至更严格些,你可以通过使用PIN码来保护您的硬钱包不被在偷取后打开。

不要过于担心你的硬钱包会被偷,丢失或损坏;只要你已经做好相应安全备份,你就总能拿回你的比特币。

“你可以将硬钱包想象成你自己的一个地下金库。如果你有大量比特币的话,那么你非常需要考虑搞个硬钱包”

 

为什么说硬钱包好?

  • 保护比特币的一种最简单方法
  • 很方便就能备份并保护好
  • 使用起来很少出错;即便对不懂技术的人也能很容易配置

 

为什么又说硬钱包不好?

因为他们不免费 :(

 

热钱包

热钱包是一种直接运行在互联网连接设备(如计算机,手机或其它手持设备)上的比特币钱包。

私钥是一种加密码。因为热钱包会将你的私钥生成在和互联网连接的设备上,因此它们不能认为是100%安全的。

“你可以将热钱包想象成你随身携带的钱包:你使用它来存放一些现金,但绝对不会用来存放你的巨额存款。如果你需要进行频繁的支付,那么热钱包用起来很棒,但却绝不是用来进行比特币长期安全存放的好选择。”

 

为什么说热钱包好?

  • 小额比特币存放的最简单方式
  • 比特币支付和接受简单快捷,相当方便
  • 一些热钱包允许在多个设备上同时访问

 

为什么又说热钱包不好?

对量太大的比特币存放不安全。

 

那种钱包对你最适合?

这要看你平时怎么用比特币了。如果你仅买了比特币屯着做投资,那么你最好将你的钱包放在硬钱包里安全。否则普通的软钱包(或称软件钱包/热钱包)就够你用了,支付和接收比特币都很方便,最重要的是,软钱包是免费的。

每种钱包都有优缺点,不同的钱包是为了解决不同的问题。一些钱包的设计更倾向于安全,而另一些钱包则可能更侧重隐私保护。

由于实际上没有固定的所谓“最好的钱包”,这完全需要按照你的使用来判断选择。

后面,我们会列出你可以买到或下载到的钱包。我们建议你在购买和下载任何一款钱包前先做一些深入的了解。

每天,总有些新的比特币欺诈钱包应用被加到Google Play和Apple应用商店,它们被设计用来偷用户的比特币。

因此,我们仅列出那些已公布并开源可信的钱包供大家使用。

 

3章:硬钱包保证你的货币安全

硬钱包不是免费的。

不过如果你确实有很多比特币的话,那么买一个这样的钱包是很值得的。不管是你要保管100多个比特币还是上百万个比特币,使用效果都是一样的,一个硬钱包即可。

 

硬钱包是如何工作的?

硬钱包是安全的线下设备。因为私钥是在线下保管,因此它们不会受到黑客入侵。

这意味着即便你现在使用的电脑已经中毒了,你还是可以这个钱包。

 

为什么硬件钱包最好带个小电子屏?

在以下图表中,你会留意到有些硬件钱包有电子屏。

电子屏能够提供额外的安全度,以验证和显示钱包的一些重要细节信息。由于硬钱包是基本不可能被黑的,电子屏上信息显示也比你计算机上显示的信息要可信得多。

 

比特币硬钱包比较

这里我们对3款主流硬钱包(Ledger Nano S, Trezor,以及KeepKey)做一个简单比较:

 

最好的比特币硬钱包一览

Ledger Nano S

在这3款带屏幕的硬钱包中,Ledger Nano S算是其中最便宜的一款了;它价格约65美金。Ledger也是最著名的几家比特币安全公司之一,2016年8月出的这款产品。

TREZOR

TREZOR是2014年8月首个发布的比特币硬钱包,提供了比特币存放安全性的同时还增加了热钱包消费便捷的特性。TREZOR是一个非常小巧、拇指大小的设备。

KeepKey

KeepKey是在2015年9月发布的第二款带屏的比特币硬钱包。由于其屏幕更大,因此相比Nano S和Trezor提供了更多额外的安全特性。

Ledger HW.1

如果你预算不够多的话,那么也可以考虑Ledger HW.1。它是一款不带屏的硬钱包。相比前3种带屏的钱包来说会少些安全性。不过,它要比热钱包更安全些。

 

4章:热钱包

热钱包是在线的比特币钱包(网络钱包)

网络钱包将你的私钥存放在线上,这些私钥使用你的密码进行的加密保护。尽管这是最低限度的保护,不过在线钱包的优势也就在于可以被来自任意的网络连接设备访问,安全度下降带来的是可用性的便利。

 

GreenAddress

GreenAddress是一个网络、桌面、Andriod和iOS可用的多次签名比特币钱包。GreenAddress可以和硬钱包如TREZOR, Ledger Nano以及HW.1相兼容。

“多次签名”意味着当你的比特币需要进行转移操作时,需要得到一次手工签名确认,这极大地提高了安全性。

 

安卓(Andriod)比特币钱包

这类钱包有许多种选择。由于比特币最初就受到Apple的禁止,因此开发者更多是在Andriod上进行相关应用的开发。

 

Mycelium

Mycelium是Android上现在最流行的一款比特币钱包。用来支付和接收付款都非常容易。由于Mycelium提供了很清晰的安装和备份指导,所以给钱包做备份也很容易。

 

breadwallet

这是一款很棒的iPhone比特币钱包,最近还发布了其Andriod版本。它提供了用户对私钥的控制,有一个很容易的界面接口并可使用密码控制支持。

 

Airbitz

Airbitz是一款iPhone和Andriod都可方便使用的比特币钱包。它的一些特性对新接触比特币的人来说非常友好。钱包可以进行自动备份,因此你无需关心进行钱包备份相关的技术细节。

 

GreenBits

GreenBits是GreenAddress的Andriod版本。它的多签名钱包特性可以支持如TREZOR和Ledger等硬钱包做手工签名。

 

Bitcoin Wallet

Bitcoin Wallet, 或称“Schildbach Wallet”,是比特币世界第一个开发出手机比特币钱包。Bitcoin Wallet比特其它手机比特币钱包都要安全,因为它直接和比特币网络进行连接。Bitcoin Wallet有一个简单的用户界面和最基本的一些功能特性,对比特币新手来说是一个最好的比特币钱包和学习使用工具。

 

iOS和iPhone比特币钱包

Apple从2014年2月开始在其应用商店(App Store)中禁止比特币钱包应用,不过在几个月后它又反悔了其决定。幸运的是,虽然政策反反复复打击了开发者信心,对于iOS用户来说现在还是有不少可用的钱包选择。

 

breadwallet

我们认为breadwallet和之后提到的Copay都是iPhone最佳的比特币钱包。它是开源的,并允许用户对他们的私钥进行完全地控制。并且在发送和接收比特币上的界面使用流程非常清晰明了。

 

Airbitz

Airbitz是一款在iPhone和Andriod都有相应版本的比特币钱包应用,使用方便。对于新接触比特币的人来说界面友好易懂。钱包会自动进行备份,使得用户不必对手工钱包备份等技术操作发愁。

 

桌面钱包

桌面钱包可以被下载安装在你的计算机上。如果你比较关心个人隐私的话,那么这种比特币钱包是个不错的选择,因为它不依赖于第三方来进行比特币的数据交互。

 

Electrum

Electrum是一种Mac, Linux以及Windows上都支持的比特币轻钱包。Electrum是在2011年11月开发的。Electrum主要的特性有:支持硬钱包(如TREZOR, Ledger Nano和KeepKey),使用离线计算机方式来保证比特币的存放安全。Electrum对于新人和高级用户来说都是一个不错的选择。

 

5章:比特币银行:在黑客攻击中损失了价值10亿美金的比特币

最后需要你尤其留意是,比特币钱包和比特币银行是不同的概念。一些用户将Coinbase当作是比特币钱包来存放,但事实上这些公司的运营更像银行。

请记住:

比特币用户为了保护自己的比特币不被偷,那就需要保护好自己的私钥。如果你让其它人来控制你的私钥,那么就等于是你将钱存放在金融机构一样 – 这更像是将比特币存放在银行一样。

“不要将比特币存在在交易所!比特币用户在交易所碰到的黑客事件和一些欺诈事件中已经总计损失了价值10亿美金的比特币。因此你更应该自己来管控你的私钥。”

 

当然,这并不是说比特币银行就一定是不好的。像Coinbase这样的公司也同时在将更多用户带入比特币世界。在文中我们仅仅是希望用户记住,“谁控制了私钥,谁就控制了私钥对应的比特币”这个重要知识点。

在过去由于对这一点的认知错误已经导致了以百万计美金价值的货币损失,因此了解比特币私钥存放的不同之处非常必要。

理解比特币钱包的运作对于如何安全使用这项新技术是非常重要。关于比特币的相关应用开发在最近几年仍在继续,而钱包的开发使用也会变得更加友好。

在不久的未来,一些设备可能就已经预安装有钱包,不需要用户确认即可实现区块链的交互。

不过现在,如果你希望你的比特币足够安全,能够免于黑客公司,用户错误操作等其它可能事件的话,那么始终记得保护你的私钥非常关键。

 

6章:偷窃和诈骗

不管你选择了那种钱包,你都需要记住:

只有在私钥是安全的环境中生成,受到严格安全保管且完全只受到你自己控制的情况下,你的比特币才会是安全的!

这里有两个用户曾将比特币存放在第三方而受到诈骗的例子:

  • Bitfinex黑客事件,这次事件造成用户价值7000万美金的损失
  • Mt Gox门头沟事件,在这次比特币被盗事件中造成了超过5亿美金的损失

为了避免被偷盗,诈骗和其它可能的损失,请遵守以下3个基本原则在保证你的资产安全:

  1. 请在一个安全的离线环境中生成你的私钥。
  2. 对你的私钥做好备份。如果碰到硬件意外损坏,这是保护你比特币免于丢失的最后手段。理想中,你应该有多个线下备份以避免可能的火灾或偷盗等意外。
  3. 对钱包加密提供了额外的安全性。这可以帮助你避免钱包(你的硬钱包设备丢失或被盗情况)意外被偷导致的比特币损失。

保护你的比特币资产安全对于每个比特币用户来说都是最重要的。

作为比特币的持有者,这不仅仅是你的所有权利,你同时也有责任来保护好这些资产。由于关于比特币不计其数的诈骗事件也导致了很多人不再信任比特币。

因此这里的铁律就是:永远不要相信其它任何人来替你保管你的钱。

 

dbDao.com数据岛学习平台整体迁移到小密圈的公告

数据岛Oracle/MySQL学习平台将整体迁移到微信小密圈ORACLE,可以通过微信扫码加入小密圈来获得所有数据岛学习资料,加入小密圈的费用为300元/人。

扫码加入微信Oracle小密圈,了解Oracle最新技术下载分享资源

 

 

 

 

Solix优化Oracle E-Business Suite性能

Solix优化Oracle E-Business Suite性能

12c vs 11g x$messages

ACMS initialization ACMS
ADR PDB Auto Purge Task MMON
ADR Space Management Statistics Flush MMON
ARCH initialization ARC*
ASH Progressive Flusher (KEWA) MMON
ASM Audittrail cleanup MMON
AWR PDB Auto Flush Task MMON
AWR PDB Auto Purge Task MMON
AWR Raw Metrics Capture GEN1
Action-Based process Test GEN0
Archiver disconnect ARCH
Auxilary ipc finish gen0 action GEN0
Auxilary ipc init gen0 action GEN0
Auxilary ipc intr gen0 action GEN0
Auxilary ipc message gen0 action GEN0
Auxilary ipc timedout gen0 action GEN0
BA container GEN0 action GEN0
CLI AutoPartition MMON
CLI Create All Slave Tasks GEN0
CLI Create One Slave Task GEN0
Check for async in-memory job messages CJQ0
Cleanup of unpinned KGL handles MMON
Column-Level Statistics flush MMON
DBRM ADG in-memory state refresh DBRM
DBWO timeout kcbifc DBW0
DBWR write buffers DBW*|BW*
DDE Periodic Dump Scheduler MMON
DMON do critical instance eval and registration DMON
DSKM fini DSKM
DSKM init DSKM
DSKM procures HCA loadavg and computes offloaded write thresh DSKM
DTrace based Kernel IO  Outlier  Processing GEN0
Direct NFSv4 RENEW lease operation GEN0
Execute on-demand tuning task (KESTS) MMON
Free java patching locks LCK0
GEN0 Master Check GEN0
Get java patching locks LCK0
Hang Manager parameters GEN0
ILM check MMON
ILM cleanup MMON
ILM row access flush MMON
ILM segment access flush MMON
IMCO ADO action IMCO
IMCO FastStart Defer Write Scheduler IMCO
IMCO Trickle Repopulate IMCO
IMCO action IMCO
IMCO cycle action IMCO
IMCO global dictionary action IMCO
IMCO worker action IMCO
Inactive Account Time Job GEN0
Index usage tracking statistics flush MMON
Initiate KSBCITST TEST
KEWR SlavePool Test MMON Main MMON
KJBFP PBR logfile scan LMFC
KJBFP PBR recovery LMFC
KJBFP PBR writer main LMFC
KJBFP increment PRI LMFC
KJBFP pbr logFile CLose *
KJFM update process heartbeat LCK*|DIA*|LGWR|CKPT|DBRM|IPC0
KQLM interrupt action LCK1
KQLM invalidation instance lock operation LCK1
KSB GEN1 init GEN1
KSGL initialize service IPC0
KSGL mount in IPC0 IPC0
KSGL node exit IPC0
KSGL node join IPC0
KSGL notify IPC0 IPC0
KSGL timeout IPC0
KSIPC Grp Refresh action IPC0
KSIPC MGA Segment Check IPC0
KSIPC finish action IPC0
KSIPC initialize server IPC0
KSIPC interrupt action IPC0
KSIPC msg action IPC0
KSIPC reconfig action IPC0
KSIPC shutdown action IPC0
KSIPC timeout action IPC0
KSM SGA slaves spawn GEN0
KSRMA RMA OP IPC0
KSRMA Recovery Log Allocation IPC0
KSRMA mount IPC0
KSU GUID MAC Address update GEN0
LGWR flush workers LGWR
LGWR initialization LGWR
MMON request to purge LTXID history table MMON
Monitor initialization TMON
Monitor wakeup TMON
Multi procs per DTP UTMU
Network Server forced NSS*
Network Server shutdown NSS*
PDB SGA init GEN0
PDB close abort GEN0
PMON notify IPC0 of process failure IPC0
PQ: Adjust Slave Pool MMON
Payload action to BG RMON
Process new DBs that join ASM locally DIA*
RMON BG Driver RMON
RMON Init Action RMON
RTTD initialization RTTD
Real-Time ADDM Trigger MMON
Redo writer quiesce IMC on standby LGWR
Refresh active service cache MMON
Report Capture Daemon MMON
Report Capture Test (KERPI) MMON
SGA deferred allocated granules Initialization MMAN
SGA deferred allocated granules move MMAN
SMON_SCN_TIME Copy to PDBs MMON
SQL Memory Management Calculation DBRM
Spawn processes on behalf of someone else GEN0
Standby media recovery info cleanup LGWR
Suspended session cleanup GEN0
Sweep PL/SQL incidents MMON
Switchover/PDB relocate message channel subscribe LGWR
TPZ initialization TPZ*
Test Driver wakeup RTTD
Test Process wakeup TPZ*
Timeout interrupt action RBAL
Triton Session Cleanup MMON
UMF Auto Task Pool Queue Server MMON
UMF Auto Task Pool Scheduler MMON
UTS Async Dump GEN0
Volume Resource Action GEN0
Wait event outlier detection GEN0
XStream timeout action GEN0
acquire enq during pdbopen by HARIM DBW0
action for buddy instance RMS0
action to cleanup buddy instance context RMS0
check for KJCI cross-instance requests *
cleaning up workload information for optimizer MMON
clear the dependent scn DBRM
dblink logon table cleanup MMON
enter / exit graph test specified wait *
event nfy timeout action GEN0
event outlier dump info. GEN0
extend quarantine area GEN0
flushing workload information for optimizer MMON
free PX memory chunks in background PXMN
get/release open thread enqueue DBW*|BW*
init function for LCK1 *
initiate block repair GEN0
kcb DW object cooling GEN0
kcbz background redodump GEN0
kcbz update TSE bh CKPT
kill client GEN0
ksim cache line update LCK0
ksim instance group membership notifier *
kxfp remote slave spawn recv function PXMN
light-weight checks for optimizer statistics advisor MMON
mira CKPT channel CKPT
mount/dismount all db files DBW*|BW*
pdb event stats action GEN0
periodic PDB tasks GEN0
pmon dtp init PMON|CLMN
prespawn clean check GEN0
prespawn init check GEN0
prespawn timeout check GEN0
register to node local process group RBAL
shutdown RMON process RMON
sync PDB DBW0
threshold reloading MMON
unit test DBW0

oracle如何判定统计信息陈旧

本文原始地址:http://www.askmaclean.com/?p=18742

注意自动收集统计信息是从10g开始的,10g以前版本默认不自动收集统计信息。

对于自动收集统计信息而言需要知道统计信息是否陈旧stale ,判定陈旧的标准是对应的表上的数据修改超过10%(删除或插入或更新10%或以上数据行)。 这里oracle是如何知道修改超过10%的?

 

SGA的shared pool存有SQL的statistics情况,对应的有SQL处理的行数,SMON进程定期将这些信息刷到表SYS.MON_MODS$基表中(参考拙作: http://www.askmaclean.com/archives/smon-flush-dml-statistics-mon-mods.html):SMON后台进程会每15分钟将SGA中的DML统计信息刷新到SYS.MON_MODS$基表中(SMON flush every 15 minutes to SYS.MON_MODS$),
同时会将SYS.MON_MODS$中符合要求的数据MERGE合并到MON_MODS_ALL$中,并清空原MON_MODS$中的数据。
MON_MODS_ALL$作为dba_tab_modifications视图的数据来源,起到辅助统计信息收集的作用,详见拙作<Does GATHER_STATS_JOB gather all objects’ stats every time?>

这样基于之前的统计信息中的表的行数(dba_tables.num_rows),对比 MON_MODS_ALL$(dba_tab_modifications)中的update、delete、insert、truncate信息就可以知道该表从上一次收集统计信息到现在做了多少百分比的修改,若该百分比超过10%则判定为stale陈旧,否则为不陈旧。陈旧的统计信息会在自动收集统计信息时再次被收集。

 

 

DOP degree of parallelism的设计算法 ​​​​

直击oracle内核代码算法,对于11g以后的自动Parallelism算法一般只能用10053 trace来研究其算法。这里通过直接查看oracle源码设计文档,我们可以得到DOP degree of parallelism的设计算法

 

8358fa4fgy1fcr7ivo81lj20zq0kijwk

12CR2 vs 11gR2 新增optimizer 参数列表

_optimizer_adaptive_plan_control 0
_optimizer_adaptive_plans_continuous FALSE
_optimizer_adaptive_plans_iterative FALSE
_optimizer_adaptive_random_seed 0
_optimizer_ads_for_pq FALSE
_optimizer_ads_result_cache_life 3600
_optimizer_ads_spd_cache_owner_limit 64
_optimizer_ads_use_partial_results TRUE
_optimizer_ads_use_spd_cache TRUE
_optimizer_aggr_groupby_elim TRUE
_optimizer_ansi_join_lateral_enhance TRUE
_optimizer_ansi_rearchitecture TRUE
_optimizer_band_join_aware TRUE
_optimizer_batch_table_access_by_rowid TRUE
_optimizer_bushy_cost_factor 100
_optimizer_bushy_fact_dim_ratio 20
_optimizer_bushy_fact_min_size 100000
_optimizer_bushy_join off
_optimizer_cbqt_or_expansion ON
_optimizer_cluster_by_rowid TRUE
_optimizer_cluster_by_rowid_batch_size 100
_optimizer_cluster_by_rowid_batched TRUE
_optimizer_cluster_by_rowid_control 129
_optimizer_control_shard_qry_processing 65534
_optimizer_cube_join_enabled TRUE
_optimizer_db_blocks_buffers 0
_optimizer_dsdir_usage_control 0
_optimizer_eliminate_subquery TRUE
_optimizer_enable_plsql_stats TRUE
_optimizer_enhanced_join_elimination TRUE
_optimizer_gather_feedback TRUE
_optimizer_gather_stats_on_load TRUE
_optimizer_generate_ptf_implied_preds TRUE
_optimizer_generate_transitive_pred TRUE
_optimizer_hll_entry 4096
_optimizer_hybrid_fpwj_enabled TRUE
_optimizer_inmemory_access_path TRUE
_optimizer_inmemory_autodop TRUE
_optimizer_inmemory_bloom_filter TRUE
_optimizer_inmemory_capture_stored_stats TRUE
_optimizer_inmemory_cluster_aware_dop TRUE
_optimizer_inmemory_gen_pushable_preds TRUE
_optimizer_inmemory_minmax_pruning TRUE
_optimizer_inmemory_pruning_ratio_rows 100
_optimizer_inmemory_quotient 0
_optimizer_inmemory_table_expansion TRUE
_optimizer_inmemory_use_stored_stats AUTO
_optimizer_interleave_or_expansion TRUE
_optimizer_key_vector_aggr_factor 75
_optimizer_key_vector_pruning_enabled TRUE
_optimizer_multi_table_outerjoin TRUE
_optimizer_multicol_join_elimination TRUE
_optimizer_nlj_hj_adaptive_join TRUE
_optimizer_null_accepting_semijoin TRUE
_optimizer_partial_join_eval TRUE
_optimizer_performance_feedback OFF
_optimizer_proc_rate_level BASIC
_optimizer_proc_rate_source DEFAULT
_optimizer_reduce_groupby_key TRUE
_optimizer_strans_adaptive_pruning TRUE
_optimizer_synopsis_min_size 2
_optimizer_undo_cost_change 12.2.0.1
_optimizer_union_all_gsets TRUE
_optimizer_unnest_scalar_sq TRUE
_optimizer_use_feedback_for_join FALSE
_optimizer_use_gtt_session_stats TRUE
_optimizer_use_histograms TRUE
_optimizer_use_table_scanrate HADOOP_ONLY
_optimizer_use_xt_rowid TRUE
_optimizer_vector_base_dim_fact_factor 200
_optimizer_vector_cost_adj 100
_optimizer_vector_fact_dim_ratio 10
_optimizer_vector_min_fact_rows 10000000
_optimizer_vector_transformation TRUE
optimizer_adaptive_plans TRUE
optimizer_adaptive_reporting_only FALSE
optimizer_adaptive_statistics FALSE
optimizer_features_enable 12.2.0.1
optimizer_inmemory_aware TRUE

金蝶EAS HR系统后台Oracle备份恢复维护方案

很多金蝶EAS或HR系统的后台 ORACLE 数据库都处于无备份且未打开归档的状态,由于一般企业对于EAS或HR系统的后台数据库没有专职的DBA维护,所以实际也不推荐真的开归档并基于归档做备份维护,因为这样做会多一点维护的工作量(如果你是大企业 那么理应打开归档并维护归档以满足自身的备份恢复要求,例如大企业要求数据能回溯到一个月前,那么有归档才是合适的。)

对于中小企业使用金蝶EAS或HR系统而言,视乎系统后台ORACLE数据库的大小和可容忍的数据丢失时间,可以自主选择逻辑备份周期。这里说的逻辑备份主要是指ORACLE自带的EXPDP 数据泵导出工具,一般来说目前的金蝶EAS/HR用户的后台ORACLE数据库都是大于版本9i的版本(例如10g和11g等),则都可以选择使用EXPDP,其好处是逻辑导出备份要比传统export/import工具的exp速度上要快很多,且其导出格式也比exp周全。

 

一般来说中小企业大多可以容忍一天到半天的数据丢失,这部分的数据丢失一般可以基于财务或人力部分的同事通过手工补录来弥补,则对于这种场景下可以规划每12小时或24小时做一次逻辑备份:注意逻辑备份的频率就决定了数据丢失的量,因为逻辑备份是就是一次对数据的全量备份,每一次逻辑备份都是对现有数据的全量备份;所以周一中午12点备份的数据,在周二上午12点备份前的周一下午6点发生了数据库损坏/毁灭等问题,则周一中午到下午6点间产生的数据将可能丢失。

 

对于逻辑备份而言,其实维护的命令很简单:

expdp   DIRECTORY=(备份存放的目录,需要在ORACLE内以CREATE DIRECTORY创建)    dumpfile=(备份的文件名,会放在DIRECTORY下)  schemas=(EAS或HR所在的Schema)   logfile=(日志的文件名,会放在DIRECTORY下) parallel=2

例如 备份的目录叫DMP,EAS或HR所在schema伟EAS1和SHR1 则

expdp   DIRECTORY=DMP dumpfile=kingdee_20170315.dmp schemas=eas1,shr1 logfile=exp_20170315.log  parallel=2

 

对于Windows可以使用计划任务,对于Unix/Linux可以使用crontab自动调度以上备份脚本;另脚本内一般要考虑删除多久之前的备份文件。

此外要考虑  逻辑备份一般都是备份在数据库所在服务器,若服务器出现主机故障则恢复将较为麻烦,因此一般会考虑则EXPDP逻辑备份后FTP或COPY到其他远程服务器的磁盘上,以便冗余备份。

例如在 Linux下 定期备份并传到到FTP服务器上:

 

#!/bin/sh 
ORACLE_HOME=/home/app/oracle/product/11.2.0/dbhome_1 
export ORACLE_HOME 
export PATH=$ORACLE_HOME/bin:$PATH 
ORACLE_SID=orcl; export ORACLE_SID 
HOST='IP地址' 
USER='ftpuser' 
PASSWD='password' 
expdp eas/SHITANRUANJIAN DIRECTORY=backdir DUMPFILE=eas-$(date +%Y%m%d%H) VERSION=10.2 LOGFILE=easLOG-$(date +%Y%m%d%H).log 
zip -r /home/app/oracle/admin/orcl/dpdump/eas-$(date +%Y%m%d%H).zip /home/app/oracle/admin/orcl/dpdump/eas-$(date +%Y%m%d%H).dmp 
cat /home/app/oracle/admin/orcl/dpdump/easLOG-$(date +%Y%m%d%H).log | mutt -s "eas Backup" eas@tiger.com 
cd /home/app/oracle/admin/orcl/dpdump 
ftp -n -v $HOST << EOT 
binary 
user $USER $PASSWD 
prompt 
put eas-$(date +%Y%m%d%H).zip 
bye 
EOT 
find /home/app/oracle/admin/orcl/dpdump -name "eas*" -mtime +10 -type f -exec rm {} ;


如上脚本首先备份EAS用户并FTP到备份服务器上,最后删除10天前的备份。

 

如上描述了对金蝶EAS的备份方案,之后谈一下恢复方案;使用EXPDP的备份方案后,若出现大规模的数据库问题 例如ORACLE数据库打不开或出现大量坏块或ORACLE
所在服务器出现故障无法启动。则可以在必要的可用服务器上安装与之前ORACLE版本一样的ORACLE数据库软件,之后使用DBCA工具创建新的数据库,最后
使用IMPDP工具将之前的备份导入数据库中。

 

导入命令也十分简单:

 

impdp DIRECTORY=(备份所存放的目录,需要在ORACLE内以CREATE DIRECTORY创建)    dumpfile=(备份的文件名)  logfile=(日志的文件名,会放在DIRECTORY下) parallel=2 full=y

 

其他的一些恢复场景下的恢复方案:

由于 EAS/HR 运行在 NOARCHIVELOG 模式下,针对不同的故障场景下可以采取以下恢复策略:

1. SPFILE 初始化参数文件物理损坏:

从 PFILE 中重新生成一个 SPFILE
CREATE SPFILE=’’ FROM PFILE=’’
或者从备份中恢复
RESTORE SPFILE TO PFILE=’’;
RESTORE SPFILE;
RESTORE SPFILE FROM AUTOBACKUP;

2. Control File 文件部分物理损坏:

关闭数据库,将其它完整的控制文件复制到已损坏的控制文件,重启数据库

3. Control File 文件全部物理损坏 在数据库关闭时或者出于 mounted 时,即数据库处于一致性状态时 control file 全部物 理损坏,则执行 create controlfile 命令重新创建控制文件,如果处于非一致性状态时 损坏,则通过最新的物理备份全库恢复,然后追加备份发生时到故障点之间的数据。

4. 非 CURRENT 在线日志文件物理损坏 执行 alter database clear logfile 语句重新创建该损坏的非 CURRENT 在线日志文件

5. CURRENT 在线日志文件物理损坏

SQL> startup mount

SQL> recover database until cancel; #(cancel immediately)

SQL> alter database open resetlogs;

 

6. SYSTEM,SYSAUX,UNDO 表空间物理文件物理损坏 :

通过最新的逻辑备份全库恢复

 

7. TEMP 表空将物理文件物理损坏

执行"alter database”重新创建 temp 物理文件
8. 用户数据表空间物理文件物理损坏

通过最新的逻辑备份全库恢复
9. 用户索引表空间物理文件物理损坏

重新创建用户索引表空间,然后 rebuilt 相应的索引
10. 物理快损坏

如果该损坏块为用户索引,则 rebuilt 相应的索引

如果该损坏块为用户表,则通过设置 event 将没有损坏的数据正常读出来(损坏块中的数据库会丢失)或者通过关键表的逻辑备份恢复
如果该损坏块为系统数据,通过最新的逻辑备份全库恢复
11. 用户表数据不正常更新(INSERT、UPDATE、DELETE)
可以通过关键表的逻辑备份恢复,或者相应的 flashback 技术恢复
12. 用户表不正常删除(drop)
可以通过关键表的逻辑备份恢复,或者 flashback drop 技术恢复

 

如果上述方案还不能搞定你的EAS/HR后台ORACLE数据库的问题那么也可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638   QQ号:47079569    邮箱:service@parnassusdata.com

 

 

 

 

沪公网安备 31010802001379号

TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569