HOUSTON -- Roy Oswalt broke in a new catcher on Friday night and didn't miss a beat.
Oswalt's batterymate all season had been Ivan Rodriguez, but the Astros traded Pudge to Texas on Tuesday. Chris Coste, claimed off waivers last month, caught Oswalt for the first time and let the right-hander decide what pitches to throw.
"I had a lot of fun," said Coste. "When you have a guy like Roy throwing as well as he did, it's a pretty easy game to call because at about any time, you could've thrown anything and I really couldn't go wrong."
Oswalt (7-4) improved to 9-1 in 11 career starts against the Diamondbacks, including a 7-0 mark in seven starts at Minute Maid Park. He easily controlled Arizona's lineup, even though he felt his throwing motion was off most of the night.
"My mechanics, it didn't feel like the ball was coming out of my hand smoothly," Oswalt said. "The last inning, I found them. I was thinking, 'Where were you at six innings ago?' But I was able to get through it."
Jeff Keppinger drove in the only run for the Astros, who have won four of five.
LaTroy Hawkins pitched the eighth and Jose Valverde finished the four-hitter for his 19th save in 23 chances this season and third in three games.
Oswalt looked sharp one night after Wandy Rodriguez pitched into the ninth inning in a 4-1 win over Florida.
"We've been waiting on games like we've had the last couple," manager Cecil Cooper said. "That's what we need, those guys to rack 'em up, get us into the seventh and eighth inning."
Yusmeiro Petit (2-8) lost for the fifth time in seven starts, though he almost matched Oswalt pitch for pitch. Petit allowed four hits in six innings after giving up a total of 10 earned runs in his previous two starts.
The Diamondbacks were shut out for the eighth time this season and have lost their last eight road games. They've averaged two runs during their current losing streak and mustered only one hit off Oswalt between the fourth and seventh innings.
Houston went in front in the fifth. Hunter Pence walked with one out and stole second as Keppinger batted. Keppinger drove the next pitch off the left-field scoreboard and Pence scored easily.
Keppinger started at second base in place of Kaz Matsui, who's in a 1-for-25 slump.
Arizona put runners on first and second with no outs in the third but couldn't come up with a clutch hit. First baseman Lance Berkman made a nice play on Petit's sacrifice attempt, racing in and throwing to third to retire the lead runner. Stephen Drew grounded out before Oswalt struck out Gerardo Parra.
Petit retired the first 11 hitters he faced, four on strikeouts. Berkman beat out a slow roller to third baseman Mark Reynolds for Houston's first hit, but Carlos Lee popped out to end the inning.
Petit escaped a bases-loaded jam in the sixth when Geoff Blum and Pence popped up.
Oswalt allowed only one hit in his last four innings, though two hitters reached base on errors by Houston infielders. He threw 100 pitches, 71 for strikes, and didn't walk a hitter for the fourth time in 25 starts this season.
"He was very efficient, very dominant," Arizona manager A.J. Hinch said. "He threw 70-plus percent of his pitches for strikes. He wasn't messing around."
Hawkins relieved Oswalt and pitched a perfect inning, striking out the last two hitters he faced. Hawkins has not allowed a run in five appearances since coming off the disabled list on Aug. 12 after treatment for shingles.
The Astros have committed errors in three straight games. ... The Astros are 8-1 in the last nine games Oswalt has started. ... The Diamondbacks arrived at their hotel in Houston about 3 a.m. on Friday and had to wait more than an hour to get to their rooms because of a chlorine leak in the hotel's pool.