我必须更新一个大表的某些值(为了一个假定的例子,它被称为“资源”,它超过 500 万行),因此我必须在执行更改之前进行备份。我们没有足够的数据库可用空间来存储完整的备份表。
哪种方法最好?有没有办法通过块来做到这一点?我的意思是:备份原始表中的前 100K 行,更新原始表中的那 100K 行,从备份表中删除那 100K 行,备份原始表中的以下 100K 行,然后进行类似的操作. 这可行吗?
我有一个包含三列的大表,如下所示:
"START_DATE" DATE,
"START_VALUE" NUMBER(10,7)
"START_DATE_VALUE" NUMBER(18,7)
GENERATED ALWAYS AS
(
(extract(YEAR FROM START_DATE) * 10000 +
extract(MONTH FROM START_DATE)*100 +
extract(DAY FROM START_DATE))*power(10,3) +
(START_VALUE+180)
) VIRTUAL
Run Code Online (Sandbox Code Playgroud)
该START_DATE_VALUE
列是用于分区的虚拟列。但是,当我有这样的查询时:
select *
from mytable
where
start_date > to_date('02-01-2012', 'MM-DD-YYYY')
and start_value > 120.23452
Run Code Online (Sandbox Code Playgroud)
它扫描所有分区以获取结果。如何让 Oracle 使用虚拟列,然后选择正确的分区来处理它?
抱歉,我的表定义非常大,我无法将其复制到此处。
我正在开发一个 Web 应用程序,我计划将应用程序设置存储在数据库中的名称、值字段(一行 = 一个设置)中。
这些设置范围从目录路径到简单的是/否标志。显然,我无法将路径(字符串)存储到布尔字段中。
我唯一的选择是将值字段设为字符串,然后根据设置根据需要解释该值,还是有其他一些策略?
(我使用的是 PostgreSQL,但答案可能适用于任何数据库服务器。)
我在做数据卫士。我已经手动完成了备用数据库的备份。它工作正常。当我使用备用控制文件时出现问题。在主服务器上,我创建了一个备用控制文件并将其传输到备用。
scp test_sdy oracle@db3.oracle.com:/u03/app/oracle/oradata/TEST1/control01.ctl
cp /u03/app/oracle/oradata/TEST1/control01.ctl \
/u03/app/oracle/flash_recover_area/TEST1/control02.ctl
Run Code Online (Sandbox Code Playgroud)
备用设备init.ora
包含:
*.control_files='/u03/app/oracle/oradata/TEST1/control01.ctl','/u03/app/oracle/flash_recovery_area/TEST1/control02.ctl'
Run Code Online (Sandbox Code Playgroud)
当我使用 pfile 启动备用数据库时,出现此错误:
ORA-10458: standby database requires recovery
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u03/app/oracle/oradata/TEST1_SDY/system01.dbf'
Run Code Online (Sandbox Code Playgroud)
我是不是对备用控制文件做错了什么?我怎样才能解决这个问题?
我有一个(Java)Web 应用程序,它当然会对 Oracle 数据库执行许多查询(选择、插入、更新、删除)。
我想了解过去 7 天的以下内容:
SQLQuery Times-Executed Average-Resp-Time Average-Rows-Returned
====================================================================================
SELECT whatever 981 330ms 1201
UPDATE whatever 45 99ms 0
Run Code Online (Sandbox Code Playgroud)
这是 Oracle 可以给我的东西吗?如果是这样,我怎样才能得到它?如果不是 Oracle,我应该看看 JDBC 驱动程序吗?
有人可以向我展示或描述如何实现软删除吗?
我有包含以下字段的凭证表:id
, username
, password
, serial
。
我想根据客户的请求显示给定的行数,一旦显示,它们应该被删除,以便不再显示。(它们已经无效了。)
我认为软删除将确保不会显示两次凭证。如果您对我将如何做有任何其他想法,我将不胜感激。
我使用 Berkeley DB (BDB) 作为 JMS 队列的持久存储。当我使用队列中的条目时,底层 BDB 文件不会立即缩小,但最终会缩小。我遇到了 BDB 文件在文件系统上占用大量空间而检索性能下降的问题。
我的条目大小变化很大,但在持久队列中有 400,000 条大约 32kb 的消息并不少见。
我想了解 BDB 如何管理文件,以便我可以限制文件大小/检索性能的条目数。或者我可以排除 BDB 作为我的持久存储机制。
我可能正在搜索错误的术语,但在Oracle 文档或The Berkeley DB Book 中没有找到我要查找的内容。如果 BDB 不想让我弄乱它的内部结构,我不会感到惊讶,但如果(至少)没有关于它如何处理其内部结构的概述,我会感到惊讶。
Mysql 显示 5 个 root 用户:
| root | % |
| root | 127.0.0.1 |
| root | ::1 |
| root | localhost |
| root | mysrverhostname |
Run Code Online (Sandbox Code Playgroud)
这5个有什么用?有可以删的吗?
当查询编写如下时,SQL Server 显示性能大幅下降:
select top 101 name
from Dogs
order by name
Run Code Online (Sandbox Code Playgroud)
与选择前 100 名相比。
据我所知,发生这种情况的原因是top 100+
查询中的 SQL Server只是简单地对所有数据集进行排序并选择顶部记录(而前 100 个和更少的查询使用更复杂的算法)。
是否有任何解决方法?
我们有一个 Windows 2008 r2 服务器(在 hyper v 上),我们正在运行一个 SQL 服务器。这个数据库大约有 300 GB。服务器有 32 GB 内存。在 SQL Server 属性中,我看到了以下内容:
我只是想知道这是可以的还是内存过多。根据 www.sqlservercentral.com/blogs/glennberry/2009/10/29/suggested-max-memory-settings-for-sql-server-2005_2F00_2008/ 我读到 32 GB 的服务器需要最大 29000
有人可以建议。谢谢
oracle ×3
sql-server ×3
mysql ×2
performance ×2
backup ×1
berkeley-db ×1
dataguard ×1
partitioning ×1
php ×1
postgresql ×1
update ×1