HOUSTON -- Roy Oswalt realized very quickly that the Arizona Diamondbacks were going to try to beat him by swinging early in their at-bats on Saturday.
Oswalt responded by throwing strikes they couldn't hit. He matched a season high with eight strikeouts and dominated Arizona again to lead the Houston Astros to a 4-1 victory.
"It seemed like the very first inning, they were going to be aggressive," said Oswalt, who threw 71 strikes in 98 pitches. "I knew they were going to try to hit the fastball early and that kind of worked to my advantage."
Oswalt (8-7) allowed six hits without a walk in eight innings, improving to 5-0 with a 0.95 ERA in five career starts against the Diamondbacks. He won for just the third time since June 14.
"Roy was masterful," Houston manager Phil Garner said. "He didn't fool around. He seemed to be ahead (in the count) most of the day."
Chris Snyder homered for Arizona in the fifth, the first run the Diamondbacks had scored on Oswalt in 21 innings -- and two years. Oswalt then retired 10 straight before Eric Byrnes singled with one out in the eighth.
Brad Lidge pitched a perfect ninth to earn his 23rd save in 27 opportunities.
Oswalt lost consecutive complete games on June 30 and July 5, but said he was ready to leave Saturday's game when Garner put in Lidge.
"The last inning, I knew I was grabbing for straws there a little bit," Oswalt said. "I knew they were going to pinch hit for me anyway, so get Lidge in there and he did a great job tonight."
Lidge gave up two runs in the ninth inning of the Astros' 8-4 loss to Cincinnati on Thursday, rekindling questions about his psyche after his failures in the playoffs last season.
Lidge needed only 11 pitches to secure the win this time, striking out Carlos Quentin to end the game.
"I did feel better out there tonight -- what the reason is, I don't exactly know," he said. "I just felt like I needed to get out there and stay confident. I just wanted to get out there and simplify things and fortunately, it worked out."
Craig Biggio homered and Willy Taveras had a two-run triple to help the Astros win for just the sixth time in 15 games since the All-Star break. Preston Wilson added an RBI single in the eighth off Diamondbacks reliever Luis Vizcaino.
Arizona starter Juan Cruz (3-6) matched a career high with eight strikeouts, but still dropped to 0-3 with two no-decisions since coming off the disabled list on July 3. He pitched five scoreless innings after the Astros jumped out to a 3-0 lead after two.
With one out in the first, Biggio hit a 1-0 pitch just inside the left-field foul pole for his 11th homer of the season and second in three days.
"Any time you can get a run in the first inning, ask any starter, it's a nice way to start your day off," Biggio said.
Houston added two more in the second inning after Cruz gave up a walk to Brad Ausmus -- a .237 hitter -- and a broken-bat single to Adam Everett. Oswalt advanced the runners with a sacrifice bunt before Taveras lined his fourth triple of the season to the gap in left-center.
That was all the offense Oswalt needed.
The Diamondbacks got four hits in the first four innings, but failed to get a runner past second. Snyder doubled leading off the third and Oswalt threw him out at third on Cruz's weak bunt in front of the mound.
"We've had a tough time with him," Arizona manager Bob Melvin said. "It looked like he was locked in right away."
Snyder snapped Oswalt's scoreless streak by launching a 2-1 pitch off the brick facade in left. Oswalt hadn't allowed a run against the Diamondbacks since Shea Hillenbrand's two-run homer in the sixth inning of Houston's 10-3 win on July 22, 2004.
Byrnes grounded out and Oswalt struck out Cruz and Orlando Hudson to end the fifth.
"It's tough to come in on the losing end of it," Snyder said. "We battled, but it was hard to scratch together runs."
Cruz, meanwhile, retired eight in a row after hitting Aubrey Huff with a pitch in the third. Huff snapped the hitless streak in the sixth with a one-out double off the left-field wall.
One night after hitting for the cycle, Astros rookie Luke Scott went 0-for-2 with a strikeout and two intentional walks. ... Arizona has hit 25 homers in its last 20 games and has an extra-base hit in 50 consecutive games.