精华内容
下载资源
问答
  • 应用系统数据删除恢复

    千次阅读 2018-05-11 11:48:38
    删除数据的恢复2. 假删除的权限控制2.1. 假删除功能的目的2.2. 数据恢复功能的授权2.3. 彻底删除功能的授权3. 唯一性约束的处理3.1. 全局唯一性约束处理3.2. 清理或解除原数据后启用3.3. 管理权交给用户3.4. 唯一性...
    • 1. 重要数据假删除的基本实现
      • 1.1. 假删除的实现
      • 1.2. 删除数据的恢复
    • 2. 假删除的权限控制
      • 2.1. 假删除功能的目的
      • 2.2. 数据恢复功能的授权
      • 2.3. 彻底删除功能的授权
    • 3. 唯一性约束的处理
      • 3.1. 全局唯一性约束处理
      • 3.2. 清理或解除原数据后启用
      • 3.3. 管理权交给用户
      • 3.4. 唯一性约束添加删除标记
      • 3.5. 唯一性编码特殊处理
    • 4. 数据的级联关系
      • 4.1. 被删除数据引用了其他数据作为子对象
      • 4.2. 被删除数据作为子对象被其他数据引用
      • 4.3. 数据相互引用,对象间的关联关系
        • 4.3.1. 级联逻辑删除
        • 4.3.2. 使用Code建立主外键联系并使用数据库级联更新
    • 5. 其他解决方案
      • 5.1. 状态控制
      • 5.2. 数据审核控制

    1. 重要数据假删除的基本实现

    业务数据删除功能,对于一些重要数据采用“假删除”的实现方式,即数据并非从数据库中delete,而是标识该记录为已删除,数据显示时过滤掉该部分数据;对于非重要数据采用直接删除的实现方式。

    1.1. 假删除的实现

    数据库表增加deleted字段,默认值为0表示数据未被删除,删除操作时,将deleted字段更新为1表示数据已被删除,查询数据时使用deleted=0过滤。

    1.2. 删除数据的恢复

    假删除的目的是防止重要数据被误删除,一旦被误删除后,则需要数据恢复的功能。
    系统添加“删除数据恢复”功能,查询deleted=1的数据,执行恢复操作时,将deleted更新为0。

    2. 假删除的权限控制

    2.1. 假删除功能的目的

    对于重要数据的保护,一是防止误删除,二是防止恶意删除,根据不同的业务场景设定,可采用不同的功能实现。

    2.2. 数据恢复功能的授权

    数据被删除后,恢复功能应“谁删除的数据谁有权恢复”,没必要交给管理员(不少系统重要操作都交给管理员处理,例如用户账户锁定等),管理员可以授权处理所有的数据。
    每条数据都应该拥有其“所有者(OWNER)”,应设计为所有者有权删除其所拥有的数据,也有权恢复其所拥有的数据,即授权根据数据的所有者操作。
    所有者并非是系统的用户,可以泛化为该数据的所有者组织机构,由于组织机构存在树形层级的特点,因此可设计为上级有权管理下级数据(根据业务场景设定)。

    2.3. 彻底删除功能的授权

    针对于“防止误删除”,可以在“删除数据恢复”功能中添加“彻底删除”的功能,该功能将数据从DB中delete掉。
    针对于“防止恶意删除”,则不允许一般业务用户“彻底删除”数据。

    3. 唯一性约束的处理

    上述deleted标记控制实现的逻辑删除,简单、通用的实现了所有业务数据需求,但对于有唯一性约束的数据则暴露出了问题。
    假设有人员数据信息,包含“用户编码(UserCode)”唯一性约束,当添加了用户U-001并标记逻辑删除后,再次添加用户时U-001将引发唯一性约束冲突,但用户UI上却没有U-001的记录,因此造成了用户的困惑,解决该问题有多种方式,各有优缺点,可根据业务场景来选择。

    3.1. 全局唯一性约束处理

    例如常见的网站用户注册,当输入的用户名已存在时,无论该用户是否已弃用该账户,网站都不会删除该账户,并禁止新用户使用该用户名,以备原用户再次启用该账户,或其他需求。

    3.2. 清理或解除原数据后启用

    同样是在用户注册上,不少网站使用手机号绑定注册信息,但手机号可能被注销,并分配给新用户。假设用户A使用xxx手机号注册了账号,然后A用户xxx手机号已注销,并被分配被B用户(手机号码资源有限,目前移动运营商都是将号码重复利用的),当B用户在该网站上注册时,使用号码短信验证通过后,即可解除xxx手机号码与A用户注册账号的绑定关系。
    不少网站存在用户注册后账号、密码忘记的情况,因此一般使用手机号来绑定验证,但不应仅使用手机号。在仅使用手机号的情况下,上述场景只好将A用户的xxx手机号注册信息清除掉了。
    不少应用在手机号外添加身份证号码等其他隐私数据的验证,并通过人工协助的方式处理,例如A用户希望恢复xxx手机号注册的信息时(xxx手机号已被注销并分配给B用户),可通过身份证号码、姓名验证后将该部分信息重置到A用户的yyy手机号账号上。

    3.3. 管理权交给用户

    当用户输入编码U-001,添加时出现冲突,冲突数据可能位于“删除区(标记deleted=1的数据)” ,因此可针对性的提醒用户“该用户编码已存在,请使用其他编码”(针对非删除区数据冲突)、“该用户编码已存在于删除区,是否要恢复?”(针对删除区数据冲突),当用户选择恢复时,将删除的数据deleted标志更新为0,针对业务需求可继续使用历史数据或初始化。
    此方式处理简单,但适用于的业务场景较少。仅适用于系统中要维护的数据在现实中有唯一性的现实编码,例如人员管理中的身份证信息、仪器管理中的资产编号,这些信息在现实中是有唯一编码的,假设输入资产编号为E-001的仪器资产后,删除了该记录,再次录入E-001的时候,原E-001的数据很可能是由于误删除操作造成的,此时提醒用户继续维护即可,系统中不应出现两条E-001的数据,不论是否在删除区。

    3.4. 唯一性约束添加删除标记

    例如用户管理中删除了用户U-001,新增用户时,再次使用U-001将被允许,因为约束条件设置为deleted=0不存在U-001即可,该操作需要对所有管理对象的所有唯一性约束做处理。
    假设再次将U-001删除后,则deleted=1的数据存在两条U-001记录,即针对删除区不做唯一性约束校验。
    数据恢复时,继续使用原编码U-001则将遇到唯一性约束冲突,此时可提醒用户U-001已存在,是否覆盖或是否恢复为新记录或放弃操作,类似于Windows垃圾桶恢复操作或者Copy文件操作,提示“覆盖、重命名、取消”三操作。


    import org.apache.spark.{SparkConf, SparkContext}
    
    /**
      * Created by legotime on 2016/4/21.
      */
    object WorkSheet {
      def main(args: Array[String]) {
    
        val conf = new SparkConf().setAppName("RDD的基本理解").setMaster("local")
        val sc = new SparkContext(conf)
    
        // Load  the data
        val data1 = sc.textFile("E:\\SparkCore2\\data\\mllib\\ridge-data\\lpsa.data")
        println("data1的类型"+data1)
        //MapPartitionsRDD[1] at textFile at WorkSheet.scala:15
        println("data1的partittion:" + data1.partitions.size)//1
        println("data1的length:" +data1.collect.length)//67
        println("data1的count:" +data1.count())//67
        println("缓存:"+data1.cache())
        //MapPartitionsRDD[1] at textFile at WorkSheet.scala:15
        println("data1的name:"+data1.name)
        //data1的name:null
        println("data1的id:"+data1.id)
        //data1的id:1
    
        data1.partitions.foreach { partition =>
           println("index:" + partition.index + "  hasCode:" + partition.hashCode())
        }//index:0  hasCode:1681
        println("data1 father dependency: " + data1.dependencies)
        //data1 father dependency: List(org.apache.spark.OneToOneDependency@36480b2d)
    
        data1.dependencies.foreach { dep =>
               println("dependency type:" + dep.getClass)
                 println("dependency RDD:" + dep.rdd)
                 println("dependency partitions:" + dep.rdd.partitions)
                 println("dependency partitions size:" + dep.rdd.partitions.length)
               }
        //dependency type:class org.apache.spark.OneToOneDependency
        //dependency RDD:E:\SparkCore2\data\mllib\ridge-data\lpsa.data HadoopRDD[0] at textFile at WorkSheet.scala:15
        //dependency partitions:[Lorg.apache.spark.Partition;@3c3c4a71
        //dependency partitions size:1
        //
        val data1Map = data1.map(_+1)
        //经过一次转换
        data1Map.dependencies.foreach { dep =>
          println("dependency type:" + dep.getClass)
          println("dependency RDD:" + dep.rdd)
          println("dependency partitions:" + dep.rdd.partitions)
          println("dependency partitions size:" + dep.rdd.partitions.length)
        }
        //dependency type:class org.apache.spark.OneToOneDependency
        //dependency RDD:MapPartitionsRDD[1] at textFile at WorkSheet.scala:15
        //dependency partitions:[Lorg.www.120xh.cn  apache.spark.Partition;@3c3c4a71
        //dependency www.hjha178.com partitions size:1
        println("data1Map father dependency: " + data1Map.dependencies)
        //data1Map father www.boshenyl.cn dependency: List(org.apache.spark.OneToOneDependency@b887730)
        data1Map.dependencies.foreach(x =>
          println("data1Map的依赖:"+x)
        )
        //data1Map的依赖:org.apache.spark.OneToOneDependency@b887730
    
    
        val data2 = sc.textFile("E:\\SparkCore2\\data\\mllib\\ridge-data\\lpsa.data",2)
        println("data2的类型"+data2)
        //data2的类型MapPartitionsRDD[4] at textFile at WorkSheet.scala:45
        println("data2的partittion:" + data2.partitions.size)//2
        println("data2的length:" +data2.collect.length)//67
        println("data2的count:" +data2.count())//67
        println("缓存:"+data2.cache())
        //缓存:MapPartitionsRDD[4] at textFile at WorkSheet.scala:45
        println("data2的name:"+data2.name)
        //data2的name:null
        data2.setName("huhu!!")
    
        println("data2的new name:"+data2.name)
        //data2的new name:huhu!!
    
        println("data2的id:"+data2.id)
        //data2的id:4
        data2.partitions.foreach { partition =>
          println("index:" + partition.index + "  hasCode:" + partition.hashCode())
        }
        //index:0  hasCode:1804
        //index:1  hasCode:1805
        println(data2.first())
        //-0.4307829,-1.63735562648104 -2.00621178480549 -1.86242597251066 -1.02470580167082 -0.522940888712441 -0.863171185425945 -1.04215728919298 -0.864466507337306
        //println(data2.take(0))//java.lang.String;@5f2bd6d9
        println(data2.take(2))
    
        sc.stop()
      }

    3.5. 唯一性编码特殊处理

    通过唯一性编码特殊处理,可避免影响数据添加的实现,即删除数据U-001时,将该记录标记为deleted=1并将UserCode更新为U-001@deleted,@deleted根据业务场景选用不会出现在正常业务编码中的标记。此种处理方式,添加数据的逻辑可保持不变,删除区数据的处理同前方案,在恢复数据时,将U-001@deleted恢复为U-001并校验U-001是否已存在

    4. 数据的级联关系

    4.1. 被删除数据引用了其他数据作为子对象

    例如删除用户U-001,该数据配置了其工作经历W-001、W-002,系统设计时,Users和UserWorks表应该使用UserID做主外键约束,而不应该使用UserCode,当删除U-001时,W-001、W-002的数据将不能够通过用户级联查询到。

    4.2. 被删除数据作为子对象被其他数据引用

    例如删除UserWorks的W-001记录,逻辑删除该记录即可。

    4.3. 数据相互引用,对象间的关联关系

    当删除U-001时,W-001、W-002的数据将不能够通过用户级联查询到,但从其他维度查询数据则会出现脏数据。例如UserWorks中人员工作经历记录了人员Users数据的UserID和工作单位Companies数据的CompID,当查询某单位的员工时将会查询到该条记录。
    对于子信息从属于被删除数据的情况该处理没有问题,而对于子信息为被删除数据与其他数据的关联数据的情况,则需要做额外处理。

    4.3.1. 级联逻辑删除

    通过查询被删除数据引用的其他数据,并将其标记为deleted=1,可级联删除掉子信息,避免脏数据。此方式的缺点是增加子对象类别时,需要更改父对象的删除实现,例如用户下新增用户教育经历的数据UserEducations,则在标记U-001为Deleted=1的时候,需要标记W-001、E-001的Deleted=1。

    4.3.2. 使用Code建立主外键联系并使用数据库级联更新

    如果UserWorks使用UserCode关联Users数据,并在DB中设置触发器,则Users的U-001删除时(更新为U-001@deleted),UserWorks记录也将更新。
    此方式一是使用Code做主外键关联,二是适用于删除时通过更新Code实现的场景。

    5. 其他解决方案

    5.1. 状态控制

    使用状态变更来代替删除操作。例如人员状态有“在用”、“停用”等状态,数据不允许删除,也不提供假删除的功能,仅将用户状态切换即可。在用户管理处,可查询不同状态的用户,不再提供删除区数据的概念。
    现实中,一些数据删除的场景,对应的是数据的状态更改,例如员工离职、商品下架等。

    5.2. 数据审核控制

    但在系统操作时,难免有错误添加的情况,例如新增员工时员工编号填写错误,系统设计为编号不允许修改,因此只好删除该错误数据。
    此种情况,可通过数据审核来控制,即填写人新增的数据可以删除,但当数据审核后,则不允许删除,仅可做状态变更,例如更改为废弃状态。
    现实中,当我们在银行柜台填写一份申请单时,当填写错误时,我们重新填写一张,此时即为删除操作,(如果银行申请单允许涂改的话,那么该操作即为系统中的编号修改操作);当申请单递交后,如果我们放弃该申请操作,则系统中将该记录标记为“终止”而非delete。

    展开全文
  • 如果你尝试过了命令窗口执行脚本、恢复重置电脑等方式,Windows Store 依然没有恢复情况下 ...请尝试:Windows Store应用商店 没有了/删除了/恢复 终极方法 下载立即下载工具,使用该工具恢复。 立即下载工具 ...

    如果你尝试过了命令窗口执行脚本、恢复重置电脑等方式,Windows Store 依然没有恢复情况下

    请尝试:Windows Store应用商店 没有了/删除了/恢复 终极方法 下载立即下载工具,使用该工具恢复。

    展开全文
  • 1: 进入:C:\Program Files\WindowsApps  复制红色框框文件夹的名称。 ...在 WindowsApps 这个文件夹下没有东西或者没有这个文件夹,复制一个过来, 或者使用镜像恢复一下系统就行了。

    1: 进入:C:\Program Files\WindowsApps

     复制红色框框文件夹的名称。

     

     2: 管理员运行  windows  powershell, 执行如下命令, 引号要记得打上。

     add-appxpackage -register “C:\Program Files\WindowsApps\文件夹名称\appxmanifest.xml” -disabledevelopmentmode ”
    例如此处
    add-appxpackage -register “C:\Program Files\WindowsApps\Microsoft.WindowsStore_11805.1001.49.0_x64__8wekyb3d8bbwe\appxmanifest.xml” -disabledevelopmentmod

    输入命令,回车,等待几秒就OK 了。 在开始菜单就能看到加载的程序。

     

     

     

    在 WindowsApps 这个文件夹下没有东西或者没有这个文件夹,复制一个过来, 或者使用镜像恢复一下系统就行了。

    展开全文
  • 适用于所有版本在恢复出厂设置时我们会将用户手动安装的JAVA应用也一并删除,仅保留预置的JAVA应用,如需保留已安装的所有JAVA应用,可以参照如下方法。  [SOLUTION]  选择恢复出厂设置后会执行到 mmi_restore_...
    适用于所有版本在恢复出厂设置时我们会将用户手动安装的JAVA应用也一并删除,仅保留预置的JAVA应用,如需保留已安装的所有JAVA应用,可以参照如下方法。 
    [SOLUTION] 
    选择恢复出厂设置后会执行到 mmi_restore_app_data -> mmi_restore_app_check_func,依次执行
    mmi_restore_app_callback[]中的函数,其中就包含用于恢复JAVA数据的mmi_setting_restore_java_data。 
    在RestoreServiceHdlr.c中,mmi_restore_app_callback[]的定义里注释掉以下代码     
    /* clean JAVA info in target */ 
    #if !defined(MMI_ON_WIN32) && defined(__J2ME__) 
        {NVRAM_APP_PHNSET, MSG_ID_MMI_RESTORE_JAVA_SETTING_CNF, mmi_setting_restore_java_data, NULL}, 
    #endif
    展开全文
  • Win10系统自带了诸多工具软件,如应用商店、便签、天气、相机、Xbox等等,有时误删除后却无法下载回来(当然应用商店还在的话就可以下载)。 下面方法通过Windows PowerShell组件加命令行来恢复想要重新安装的软件...
  • mac 删除系统应用

    千次阅读 2018-09-25 18:00:51
    就我这重强迫症者,必须想办法把它们给干掉了,以前用AppZapper删除系统应用,如今用它已经无法删除了。经一番思索终于找了一个方法: 第1步: 关闭安全设置 重启mac,不停地按住command+R键进入macOS恢复功能,如下...
  • Win10内置应用误卸载恢复方法

    千次阅读 2019-05-27 22:53:14
    博主手贱把win10自带的计算机卸载了,在网上找了半天没找到软件安装,ps看不惯自带太多软件,提前删除了乱起八糟的没用的软件,比如说应用商店,所以网上说应用商店可以下载的都不行。 最后在网上找怎么安装应用...
  • 6.这一步就做你想对模拟器做的,比如移除系统应用等等,比如我们rm Phome.apk,如果成功,重启模拟器之后再到system/app下是看不到Phone.apk的 7.备份system.img 拷贝system.img的临时文件到avd目录下 这边...
  • 但有时我们一不小心,把不该删除的硬盘分区给删除了(第一感觉就是晴天霹雳,尤其是误删除的硬盘分区保存着最重要文件)。这时先别慌,有办法恢复的。  问题解决:  首先,删除卷还未把该盘的资料格式化,数据还...
  • windows10内置应用误删或者恢复

    千次阅读 2017-08-03 22:20:12
    不小心给内置的商店删除了,百度上各种方法没有用,在管理员运行power shell,运行代码:Get-AppxPackage -AllUsers| Foreach {Add-AppxPackage -DisableDevelopmentMode -Register "$($_.InstallLocation)\...
  • 误删 Win10 应用商店应该如何恢复

    千次阅读 2021-01-22 13:06:40
    误删 Win10 应用商店应该如何恢复? 今早的一顿操作让我的应用商店没了,被完全删掉了,现在我的win10的应用都用不了了,包括最基本的计算器、日历、天气、还有很多全都用不了了。
  • Windows10自带应用的卸载和恢复

    万次阅读 多人点赞 2017-06-30 21:05:26
    在开始菜单中的Windows PowerShell文件夹中以... 输入命令Get-AppxPackage,则可以查看所有已安装的应用。一定要进行这一步骤,后面会用到里面的内容。查询出后把他们复制粘贴到记事本中以便后续步骤的进行(用鼠标选
  • 2、在打开的PowerShell窗口中输入“Get-AppxPackage | Select Name,PackageFullName”(注意空格和英文标点),查看已安装应用的清单 3、输入"Get-AppXPackage | Remove-AppxPackage"可以卸载当前账户中所有的自带...
  • 这是小编的问题起源,因为学校网络限制,win10自带的应用商店无法联网,所以小编就将之删除了二、开弓没有回头箭?好马不吃回头草?no zuo no die ,终于,小编认识到win10 应用商店也是好的,因为他可以下载到很...
  • Windows 10 自带应用的卸载和恢复

    千次阅读 2020-02-27 20:58:05
    一、Windows 10 自带应用的卸载 ...二、Windows 10 自带应用恢复 1.查看应用 在开始菜单中的 Windows PowerShell 文件夹中以管理员方式(右键)打开 Windows PowerShell 。 (注意:每执行一次命令,左上角都会闪...
  • 小米手机ADB删除系统应用去广告

    万次阅读 多人点赞 2020-01-25 16:29:22
    本文要介绍的方法可以免 root 卸载预置应用,仅删除当前用户下的 APP,不是彻底删除 APP,恢复出厂设置后,删除的 APP 即可恢复删除APP后,手机不会再显示该APP,也就没有了应用自启,广告等问题。 1、准备 小米...
  • iOS彻底下架删除应用

    千次阅读 2019-02-26 16:49:52
    iOS彻底下架删除应用第一步:登录:[苹果开发者中心](https://developer.apple.com/account/#/welcome)第二步:进入应用中心第三步:进入要删除应用第四步:下架该应用第五步:彻底删除应用(慎重啊!) 今天我也...
  • Win10误删应用商店和计算的恢复办法

    千次阅读 2018-06-13 19:42:36
    今天手残,卸载lantern不小心点到计算器,引出了这篇博客恢复办法:打开小娜:搜索Windows Powershell并使用管理员身份运行,复制下面的命令到打开的窗口(复制的时候可能有点慢,耐心等待)商店恢复:Get-AppXPackage...
  • 如果你的App因为某些版权之类的...进入应用页面 看到目前的状态是被开发人员下架,确定你的开发账号没有到期,你的应用是上线后才被你手动下架的,这个时候,点击“在所在区域供应”,选择后可点击后面的编辑选择
  • 某天开发过程中,遇到了Android APP应用退到后台后再打开老是恢复到前台的现象,上网找了下原因是启动模式的问题,如设置了: android:launchMode="singleInstance"  删除掉解决问题。
  • adb删除系统应用

    千次阅读 2019-01-28 10:43:55
    因为自己在开发中,总是需要进行对系统中的应用进行删除操作才能调试,又容易忘记,所以自己把步骤叙述记录下来,为有需要的人解决问题!!!首先要进入系统中的cmd中进行命令行操作。命令步骤:#adb root -------&...
  • MySQL——GTID模式应用及数据恢复

    千次阅读 2020-04-10 22:42:37
    //基于binlog恢复,日志里面记录的也是mysql语句,临时关闭恢复时产生的新日志。 mysql> source /tmp/gtid.sql mysql> set sql_log_bin=1; 报错: ERROR 1049 (42000): Unknown database ‘gtid’ Query OK, 0 rows ...
  • Android 将自己的应用改为系统应用

    万次阅读 多人点赞 2016-11-30 16:19:11
    所谓系统程序就是system/app目录中的程序,普通应用转换成系统程序后有稳定、减少内存(DATA)空间占用、恢复出厂设置后不会消失、修改系统时间、调用隐藏方法、系统关机重启、静默安装升级卸载应用等等等等优点,想...
  • Win10 TLSB属于Win10企业版,LTSB就是长期支持更新分支(Long Time Service Branch),这个版本专门给一些企业用户的,相比一般版本会缺少很多新功能,例如没有应用商店、没有Edge浏览器,没有cortana,大家可以把...
  • adb删除系统应用命令

    千次阅读 2018-12-20 14:44:57
    adb remount------->重新挂载系统分区,使系统分区重新可写 adb shell rm system/app/包名/应用名.apk------->删除对应的apk文件(注:...重新启动手机(因为只有重启才能进行应用删除,注意点!!!!)...
  • MySQL的全量、增量备份与恢复MySQL备份的分类MySQL完全备份mysqldump备份库恢复数据库MySQL备份思路全量备份的shell脚本MySQL增量备份开启增量备份增量恢复三种方式一般恢复基于位置的恢复增量备份的shell脚本制定...
  • 同样HiSuite也可以把微信库文件完整地备份到电脑上,这样就可以扫描微信库文件中待回收区域中的删除记录,从而实现微信删除记录的恢复。因此做为一种补救措施,即使聊天记录删除后再备份数据文件也是可以恢复的。...
  • Windows 10包含各种通用应用程序,并且没有简单的方法可以将它们隐藏在新的“开始”菜单中的“所有应用程序”视图中。您可以卸载它们,但Microsoft不允许您以通常的方式轻松卸载...但请注意,此技巧不允许您删除一...
  • 这个问题比较常见,但是又不太好说...若再后退到之前的应用,系统会自动恢复其状态。 但是有个时候不是这样,首先系统最多只能维持5个应用程序的状态。当多了的时候,系统会把早期的应用逻辑删除。这时候程序 的 Closin

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 337,988
精华内容 135,195
关键字:

删除应用怎么恢复