MILWAUKEE -- Dave Bush was calm until he had to leave Sunday's game.
Bush pitched into the ninth inning in another strong performance against Houston, Francisco Cordero worked out of a jam to get his seventh save and the Milwaukee Brewers beat Roy Oswalt and the Astros 4-3.
"That was tense," said Bush, who left the game up 4-1 with runners on second and third and nobody out. "It's harder to watch than it is to be out there on the mound. I probably paced a little bit. But I have full confidence in the guys coming in, and he's a good closer for a reason. He was able to work out of a real tough spot."
Oswalt (3-1) failed in his bid to win his 10th straight decision, a streak that dated to Aug. 23, 2006. He gave up four runs and seven hits in seven innings.
Bush (2-1) allowed three runs and five hits in eight-plus innings to improve to 3-0 in his career against Houston. He struck out seven and walked one.
Bush came out for the ninth inning but couldn't record an out, allowing Lance Berkman's RBI double before he was replaced by Cordero. Morgan Ensberg hit a run-scoring single with one out, and Adam Everett walked with the bases loaded to get the Astros within one.
Cordero then retired two straight pinch hitters, striking out Orlando Palmeiro and getting Craig Biggio to foul out to end the game. Cordero has not allowed a run in nine appearances this year.
Bush had thrown 26 straight scoreless innings against the Astros before the ninth. He retired 12 in a row after giving up a first-inning double to Mark Loretta.
"Ideally, we hope that Bushie can get through nine, and he was cruising going into the ninth inning," Brewers manager Ned Yost said.
The first-place Brewers (11-7) have won four of five. Houston (9-8) lost its second straight after winning five in a row and eight of nine.
"We fought back and made a game out of it, and we had a chance," Astros manager Phil Garner said. "Keep doing it, and we're going to get it done a lot of times."
Geoff Jenkins had two doubles and finished with his third three-hit game of the season for Milwaukee.
Bill Hall also had three hits -- and saved Houston from scoring a run in the first. Hall, who has struggled with four errors since moving to center field at the start of the season, made a sliding catch on his back of Carlos Lee's sinking liner with two outs in the first. A hit would have scored Mark Loretta, who had doubled.
Hall homered to lead off the fourth, lining the ball just over the wall in right and into the picnic area. In the second, he singled and scored two batters later on Jenkins' ground-rule double.
"I will never get mad at Ned for taking me out for a defensive replacement," Hall said. "But I am going to work my butt off to not come out of the game in the eighth and ninth inning and prove that I can be credible out there and make all the plays."
The Brewers scored two big runs in the seventh and Cordero, coming off a 26-pitch save Saturday night, threw 31 pitches Sunday.
Yost had setup man and former Brewers closer Derrick Turnbow warming up as Cordero retired Biggio, who hit a game-winning grand slam in the ninth Friday night for Houston.
"From time to time you are going to go through days like that where you're going to throw a lot of pitches, and sometimes you only throw 10 pitches," Cordero said. "I was ready for it, and I feel pretty good about it."
Oswalt was seeking to tie his career high with 10 straight wins. He also did that in 2002.
"Never got in a rhythm, but I battled through," Oswalt said. "I didn't have my breaking pitches. Pretty much threw fastballs all day and threw the curveball for show."
Lee, in his first games at Miller Park after the Brewers traded him to the Texas Rangers midway through last season, went 0-for-3 Sunday and 2-for-12 in the series. Lee signed with Houston as a free agent in the offseason. ... Ensberg singled in the fifth inning to extend his hitting streak to 10 games. It ties his career high. ... Hall started the season 6-for-35 (.171) but has 12 hits in his last 28 at-bats with three home runs.