从其他环境恢复数据库后,有一种方法可以将数据库中的用户映射到服务器中的登录名。我可以删除并重新创建或别名,但在MS SQL Server中有一种方法:
EXEC sp_change_users_login 'Auto_Fix', 'user'
我在SYBASE ASE 16中寻找类似的东西
从其他环境恢复数据库后,有一种方法可以将数据库中的用户映射到服务器中的登录名。我可以删除并重新创建或别名,但在MS SQL Server中有一种方法:
EXEC sp_change_users_login 'Auto_Fix', 'user'
我在SYBASE ASE 16中寻找类似的东西
在我的工作中,我经常被告知我不应该进行表扫描,因为它可能会对数据库和使用数据库的应用程序产生负面影响。他们所说的“负面影响”到底是什么意思?我能想到的一个负面影响是表扫描会占用大量磁盘时间,从而阻止其他请求使用磁盘。
有没有办法在没有任何负面影响的情况下进行表扫描?有时我需要为一次性检查做一次表扫描(对于例行的事情,我当然会做一个索引)。
在正常的复制世界中,会发生以下顺序:
但是,如果发生以下事件序列会怎样?
代表服务器是否失败?主 ASE 事务是否中止?是否每个人都表现得像从未发生过并且复制有效(因为最终结果好像确实如此)?
PS 是的,我知道,通常你不应该搞这样的噱头,并且永远不应该在复制目标上更改数据。如果不是,您应该在主服务器会话上使用“设置复制关闭”。问题是“如果确实发生这种情况会发生什么,违反了‘应该’”。
我们知道索引改进select
了语句,同时,索引对每个update/insert/delete
语句都有维护成本。
我不知道如何衡量/评估这个成本。
一些上下文:有十几个关键表涉及多个插入/更新,行数在 20M 到 80M 之间。平均每秒 1400 个事务。
在过去的几个月里,添加了几个索引来优化系统不同部分的性能。这工作正常,但现在系统的另一部分出现了一些退化。
我有这个理论,但我不知道如何验证或反驳它。
编辑:我读过其他一些帖子,但大多数都是面向 SQL Server 的,我正在运行SYBASE ASE 15.7
,如标记
在 Sybase 服务器端语言中,我的代码如何测试它是在链式还是非链式(自动提交)模式下运行?
检查的状态@@TRANCOUNT
并不是真正的结论。
我认为必须有一种方法,例如,JDBC 提供了getAutoCommit,它能够检测连接是否处于自动提交(未链接)模式。但是我如何在存储过程中做到这一点?
我找到了这个问题,但它似乎只回答了 SQL Server。
一旦我连接到数据库服务器而不指定特定数据库,例如:
sqsh -Usomeuser -Ssomeserver
......我可以做一个:
select db_name();
…查看该用户的默认数据库。但是这些信息保存在哪里和/或如何查看为每个用户名或登录名配置的默认数据库?
你们有没有一种简单的方法可以用来确定这一点?
好的,我们有超过 x gb 的数据,我们应该去 IQ!好的,我们有超过 x 份报告,我们应该去 IQ!好吧,我们有很多数据存档,需要更好的时间检索它,我们应该去 IQ!
你做出这个决定时考虑的因素是什么?
我目前正在 RHEL 上测试 Sybase 16.0 Developer 版本。原来是对最大值的限制。并发连接对我来说是一个真正的问题,所以我想切换到 Express 版本。
我的主要担忧如下:
该文档提到最大限制为 5 GB。数据库大小。这是否意味着我可以拥有一个 20 GB 的设备,其中包含 4 x 5 GB 的数据库,或者 Express 版中的整个服务器总容量不会超过 5 GB?
将开发者版中创建的设备迁移到 Express 版中是否容易?
我支持一个数据库,该数据库有许多包含非常相似数据的表。随着时间的推移,这些数据中的大部分都不再需要了,并且表名是动态的,因为应用程序正在创建这些表,并且在表名中使用当前日期。
我正在尝试编写一个批处理文件,用于isql
删除不再需要存储在所有表中的行。它们都以相同的字符集开头,然后是_creation date。
有什么方法可以编写脚本来查找这些名称,或者使用通配符,例如:
DELETE FROM Table_* WHERE Type = 1
根据我的测试,上面的 SQL 命令不起作用。有没有办法解决这个问题而不必指定确切的表名?
需要以下代码的帮助,因为它因截断错误而失败
发生截断错误。命令已中止。
create table monCacheQuality (
ServerName sysname
,CollectionDateTime smalldatetime not null
,PhysicalWrites decimal(15, 0) not null
,PhysicalReads decimal(15, 0) not null
,LogicalReads decimal(15, 0) not null
,CacheQuality decimal(15, 0) not null
,CacheHitPct decimal(15,4) not null
)
-- Main code starts here
declare @physical_read1 decimal(15, 0)
,@logical_read1 decimal(15, 0)
,@physical_write1 decimal(15, 0)
,@cache_search1 decimal (15,4)
declare @physical_read2 decimal(15, 0)
,@logical_read2 decimal(15, 0)
,@physical_write2 decimal(15, 0)
,@cache_search2 decimal (15,4)
while (1=1)
begin
select @physical_write1 = PhysicalWrites
,@physical_read1 = PhysicalReads
,@logical_read1 = LogicalReads
,@cache_search1 = CacheSearches
from master..monDataCache
waitfor delay '00:00:20' -- Log every 20 sec
select @physical_write2 = PhysicalWrites
,@physical_read2 = PhysicalReads
,@logical_read2 = LogicalReads
,@cache_search2 = CacheSearches
from master..monDataCache
insert monCacheQuality
select @@servername as ServerName
,getUTCdate()
,@physical_write2 - @physical_write1
,@physical_read2 - @physical_read1
,@logical_read2 - @logical_read1
,case
when @physical_read2 - @physical_read1 = 0
then - 1
else (@logical_read2 - @logical_read1) / (@physical_read2 - @physical_read1)
end as CacheQuality
,100-(((@physical_read2-@physical_read1)/(@cache_search2-@cache_search1))*100) as CacheHitPct
end