代码之家  ›  专栏  ›  技术社区  ›  Romias

MS Access(JET)是否适合多用户访问?

  •  17
  • Romias  · 技术社区  · 17 年前

    我有一个设计为桌面产品的产品,它使用MS Access文件作为数据库。

    我想把MS Access文件放在一个共享文件夹中,然后从PC访问它,但是。..JET引擎是为多用户访问而设计的?

    编辑: 该应用程序是一个.net应用程序,使用数据库作为存储(不使用数据库作为前端)

    13 回复  |  直到 17 年前
        1
  •  26
  •   David-W-Fenton    17 年前

    这个帖子的答案中有太多的错误信息,我不知道从哪里开始。我刚刚花了4分的声誉投票否决了其中包含误导性和错误信息的答案。

    1. Jet数据库引擎(正如OP通过编辑澄清的那样,这里涉及的全部内容)默认是多用户的——它是从头开始构建的。

    2. 共享Jet数据存储 非常 当网络没有不合规时,它是可靠的。这意味着不是广域网,也不是无线的,因为带宽必须足以让Jet维护LDB文件(用于多用户锁定),这意味着本地PC的Jet数据库引擎实例每秒ping一次(使用默认设置),并且因为Jet无法从断开的连接中恢复(这在无线环境中很常见)。

    对于OP的问题,我的基本答案是,是的,对于这种规模的应用程序来说,Jet将是一个很好的数据存储。然而,如果用户数量有可能增长到25以上,那么最好从头开始,使用在更高用户数量下更强大的数据库引擎。

        2
  •  7
  •   dsteele    17 年前

    这样做是完全可行的;但是,您必须将数据库分为前端(包含表单、查询、代码)和后端(仅限数据)。每个用户都必须在自己的计算机上拥有前端,链接到共享后端。

    由于Jet会产生大量的网络流量,因此速度会很慢。微软也在逐渐弃用Access作为开发工具。例如,Access 2007的安全模型远不如Access 2003复杂。

        3
  •  6
  •   Jeff Fritz    17 年前

    不要这样做…Jet数据库声称能够支持多个用户,但使用升级向导将Access文件转换为Sql Express数据库非常容易。该数据库文件很容易被用户或管理员锁定,您的所有用户都无法使用该数据库。

    …以及 Sql Express is free 。从那里升级到Sql Server完整实例或其他商业数据库的路径很简单。

        4
  •  6
  •   Keith    17 年前

    在一个可靠的本地网络上有2到3个用户,只要你经常备份网络驱动器,你应该没问题。

    避免在表中使用任何bit/mol字段——Jet在多次访问这些字段时存在一些严重的损坏问题。

    还要记住,Access中的所有锁定都是乐观的:你偶尔会得到脏读。

    MS Access专为这样的小型办公场景而设计:您可以用最少的编程设置非关键的轻型办公用途。

    预计数据文件偶尔会损坏,请定期备份。

        5
  •  2
  •   onedaywhen    17 年前

    ACE/Jet发动机是一款很棒的软件,但 设计 支持多用户,实际上支持多用户并不是它的优点之一。对我来说,最后一根稻草是从引擎中删除用户级安全性(ULS)的地方:我想我可以想象一个简单的数据库情况,所有用户都有相同的权限(即管理员访问 全部 数据库对象),但与MS SQL Server相比,IMO不能很好地支持多个用户。

        6
  •  1
  •   Jason Kresowaty    17 年前

    是的,它支持多个(即一个小的、工作组大小的数量)用户通过网络文件共享进行访问。然而,文件共享架构根本不适合支持多个用户同时写入文件。客户端/服务器数据库系统(SQL server等)通常提供更好的性能、安全性和可靠性。

        7
  •  1
  •   Don Werve    17 年前

    作为系统管理员,请不要对任何多用户使用Access。按照Jeff Fritz的建议,使用专为多用户访问设计的数据库。你可能认为你的小应用程序只会在少数人之间共享,但我向你保证,到今年年底,它将有100个用户和50个新功能。如果这些都是Access,而不是VB/SQL Express,你的运维人员会在某个晚上闯入你的房子,割断你的喉咙。

    Access不是一个客户端-服务器应用程序,在备份/恢复或任何自动化方面提供的很少。更不用说接口和数据库是非常紧密耦合的。..所以如果你想把它变成一个网络应用程序,或者做出任何重大改变,你的世界将充满痛苦。

        8
  •  1
  •   onedaywhen    17 年前

    许多通用软件工程师已经做过很多次了,我们看到.mdb在多用户情况下会损坏。如果像我倾向于相信的那样,这么多经验丰富的专业Access开发人员都能做到这一点,那么我们这些通才一定做错了什么,而且对于我们中的许多人来说,这一定是相当基本但不明显的事情,以至于我们尖叫着“再也不会发生了!”!“因此,如果你认为自己是一名经验丰富的专业Access开发人员(或者你知道如何找到一名),那么就去做吧。但如果你是一名通才或普通用户,正在寻找轻量级的后端,那么我建议你去别处找(SQL Server是不错的选择)。”。

        9
  •  1
  •   JeffO    17 年前

        10
  •  0
  •   Jim    17 年前

    Jet没有支持多用户场景所需的复杂锁逻辑。如果你的应用程序主要是读取和低争用,你可以使用它。

        11
  •  0
  •   bglenn    16 年前

    我可以从痛苦的经历中告诉你,Jet 3/3.5不可靠。我看到它在轻负载下经常崩溃,当发生崩溃时,你就有数据损坏的风险。它过去对任何电源问题、任何客户端崩溃(甚至链接到mdb的UI)和任何局域网问题都非常敏感。较新版本的Jet可能更好,但在我看来,切换到Sql Server显然是除少量用户的琐碎数据输入之外的任何事情的解决方案。Sql Express是免费的,你不会真的失去任何东西,特别是如果你的UI在里面。网络,而不是访问。

    编辑:微软也不认为你应该依赖Jet 4。

    发件人: http://support.microsoft.com/kb/303528

    数据库损坏 稳定性问题,如IIS崩溃或锁定 驱动程序突然或持续无法连接到需要重新启动IIS服务的有效数据库

        12
  •  0
  •   Andrew Barber Eric Lafortune    14 年前

    只需检查db-lock文件(如.ldb)是否存在。如果它在那里,有人正在访问该文件。如果没有,目前没有人访问该文件,您可以继续。否则,请等待该文件(.ldb)不再存在。

        13
  •  0
  •   Summer-Time    12 年前

    如果你使用终端服务器,性能真的很好。我们有更多的解决方案,一个Access mdb最多可容纳50个用户。开发非常快,部署也很容易。

    问题:

    • 每个人都可以复制数据mdb
    • 有限商店程序
    • 优化(压缩和修复)只能在不使用数据数据库的情况下进行
    • 限制为2GB!